Changeset 2411168
- Timestamp:
- 11/02/2020 02:27:44 PM (5 years ago)
- Location:
- mnumidesigner/trunk
- Files:
-
- 4 added
- 23 edited
-
admin/class-mnumidesigner-calendars-list-table.php (added)
-
admin/class-mnumidesigner-templates-list-table.php (modified) (2 diffs)
-
admin/class-mnumidesigner-translations-list-table.php (modified) (2 diffs)
-
admin/woocommerce/class-mnumidesigner-wc-order-data.php (modified) (2 diffs)
-
admin/woocommerce/class-mnumidesigner-wc-product.php (modified) (5 diffs)
-
assets/css/admin.css (modified) (3 diffs)
-
assets/js/admin/calendars.js (added)
-
assets/js/admin/projects.js (modified) (5 diffs)
-
assets/js/admin/templates.js (modified) (10 diffs)
-
assets/js/admin/translations.js (modified) (7 diffs)
-
class-mnumidesigner.php (modified) (5 diffs)
-
docs/shortcodes.md (modified) (7 diffs)
-
includes/admin/backbone/html-calendars.php (added)
-
includes/admin/backbone/html-new-project-template-form.php (modified) (2 diffs)
-
includes/admin/backbone/html-translations.php (modified) (2 diffs)
-
includes/class-mnumidesigner-install.php (modified) (1 diff)
-
includes/helper-functions.php (modified) (1 diff)
-
includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php (added)
-
includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php (modified) (2 diffs)
-
includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php (modified) (2 diffs)
-
includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php (modified) (1 diff)
-
includes/shortcodes/class-mnumidesigner-shortcode-edit-project-url.php (modified) (3 diffs)
-
includes/woocommerce/class-mnumidesigner-wc-cart.php (modified) (4 diffs)
-
includes/woocommerce/shortcodes/class-mnumidesigner-wc-shortcode-new-project-link.php (modified) (1 diff)
-
includes/woocommerce/shortcodes/class-mnumidesigner-wc-shortcode-new-project-url.php (modified) (3 diffs)
-
languages/mnumidesigner.pot (modified) (15 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
mnumidesigner/trunk/admin/class-mnumidesigner-templates-list-table.php
r2315791 r2411168 160 160 <h1 class="wp-heading-inline"><?php esc_html_e( 'Templates', 'mnumidesigner' ); ?></h1> 161 161 <?php if ( current_user_can( 'create_mnumidesigner_template' ) ) : ?> 162 <a href class="page-title-action thickboxopen-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> 163 163 <?php endif; ?> 164 164 <hr class="wp-header-end"> … … 189 189 <?php if ( isset( $data['available_project_types'] ) ) : ?> 190 190 <?php $available_project_types = $data['available_project_types']; ?> 191 <script type="text/html" id="tmpl-mnumidesigner-new-template">192 191 <?php include dirname( __FILE__ ) . '/../includes/admin/backbone/html-new-project-template-form.php'; ?> 193 </script>194 192 <?php else : ?> 195 193 <script type="text/html" id="tmpl-mnumidesigner-new-template"> -
mnumidesigner/trunk/admin/class-mnumidesigner-translations-list-table.php
r2299029 r2411168 72 72 array( 73 73 'screen' => 'mnumidesigner_page_mnumidesigner-translations', 74 // 'screen' => get_plugin_page_hookname( self::MENU, MnumiDesigner::MENU )75 74 ) 76 75 ); … … 140 139 <h1 class="wp-heading-inline"><?php esc_html_e( 'Translations', 'mnumidesigner' ); ?></h1> 141 140 <?php if ( current_user_can( 'create_mnumidesigner_translation' ) ) : ?> 142 <a href="" class="page-title-action thickboxopen-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> 143 142 <?php endif; ?> 144 143 <hr class="wp-header-end"> -
mnumidesigner/trunk/admin/woocommerce/class-mnumidesigner-wc-order-data.php
r2299029 r2411168 130 130 $current_url = mnumidesigner_get_current_admin_url( 'post.php' ); 131 131 $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 } 132 138 133 139 // results always is an array with one entry... … … 149 155 $edit_btn = do_shortcode( 150 156 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]', 152 158 MnumiDesigner_Shortcode_Edit_Project_Link::SHORTCODE, 153 159 $project->get_project_id(), 154 160 $current_url, 155 __( 'Edit', 'mnumidesigner' ) 161 __( 'Edit', 'mnumidesigner' ), 162 $extra 156 163 ) 157 164 ); -
mnumidesigner/trunk/admin/woocommerce/class-mnumidesigner-wc-product.php
r2315791 r2411168 60 60 public static function get_translation( $product_or_variation ) { 61 61 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 ); 62 72 } 63 73 … … 278 288 ) 279 289 ); 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 ); 280 322 } 281 323 … … 390 432 delete_post_meta( $post_id, $key ); 391 433 } 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 } 392 448 } 393 449 … … 426 482 delete_post_meta( $variation_id, $key ); 427 483 } 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 } 428 498 } 429 499 … … 444 514 <?php if ( isset( $data['available_project_types'] ) ) : ?> 445 515 <?php $available_project_types = $data['available_project_types']; ?> 446 <script type="text/html" id="tmpl-mnumidesigner-new-template">447 516 <?php include dirname( __FILE__ ) . '/../../includes/admin/backbone/html-new-project-template-form.php'; ?> 448 </script>449 517 <?php else : ?> 450 518 <script type="text/html" id="tmpl-mnumidesigner-new-template"> -
mnumidesigner/trunk/assets/css/admin.css
r2299029 r2411168 74 74 .mnumidesigner-dialog.ui-dialog .ui-dialog-content { 75 75 padding: .5em 1em; 76 width: auto !important; 76 77 } 77 78 .mnumidesigner-dialog.ui-dialog .ui-button { … … 97 98 .mnumidesigner-dialog.ui-dialog .ui-dialog-title { 98 99 margin: 0; 100 white-space: nowrap; 101 padding-right: 36px; 99 102 } 100 103 .mnumidesigner-dialog.ui-dialog .ui-dialog-titlebar, … … 157 160 } 158 161 162 .mnumidesigner-calendar-event.cyclic::-webkit-datetime-edit-year-field { 163 display: none; 164 } 159 165 160 166 #woocommerce-order-items #order_line_items .mnumidesigner-download { -
mnumidesigner/trunk/assets/js/admin/projects.js
r2315791 r2411168 40 40 if ( ! e.isDefaultPrevented() ) { 41 41 e.preventDefault(); 42 if ( ! this.model. attributes._links.edit ) {42 if ( ! this.model.get( '_links' ).edit ) { 43 43 return; 44 44 } … … 46 46 wp.apiRequest( 47 47 { 48 url: this.model. attributes._links.edit[0].href,48 url: this.model.get( '_links' ).edit[0].href, 49 49 data: { 50 50 back_url: window.location.href … … 63 63 if ( ! e.isDefaultPrevented() ) { 64 64 e.preventDefault(); 65 if ( ! this.model. attributes._links.duplicate ) {65 if ( ! this.model.get( '_links' ).duplicate ) { 66 66 return; 67 67 } … … 73 73 method: 'POST', 74 74 dataType: 'json', 75 url: this.model. attributes._links.duplicate[0].href,75 url: this.model.get( '_links' ).duplicate[0].href, 76 76 success: function(response) { 77 77 console.log( JSON.parse( response.body ) ); … … 96 96 if ( ! e.isDefaultPrevented() ) { 97 97 e.preventDefault(); 98 if ( ! this.model. attributes._links.delete ) {98 if ( ! this.model.get( '_links' ).delete ) { 99 99 return; 100 100 } -
mnumidesigner/trunk/assets/js/admin/templates.js
r2315791 r2411168 10 10 function() { 11 11 '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 ); 12 36 13 37 wp.api.init( … … 40 64 if ( ! e.isDefaultPrevented() ) { 41 65 e.preventDefault(); 42 if ( ! this.model. attributes._links.edit ) {66 if ( ! this.model.get( '_links' ).edit ) { 43 67 return; 44 68 } … … 46 70 wp.apiRequest( 47 71 { 48 url: this.model. attributes._links.edit[0].href,72 url: this.model.get( '_links' ).edit[0].href, 49 73 data: { 50 74 back_url: window.location.href … … 63 87 if ( ! e.isDefaultPrevented() ) { 64 88 e.preventDefault(); 65 if ( ! this.model. attributes._links.duplicate ) {89 if ( ! this.model.get( '_links' ).duplicate ) { 66 90 return; 67 91 } … … 73 97 method: 'POST', 74 98 dataType: 'json', 75 url: this.model. attributes._links.duplicate[0].href,99 url: this.model.get( '_links' ).duplicate[0].href, 76 100 success: function(response) { 77 101 console.log( JSON.parse( response.body ) ); … … 96 120 if ( ! e.isDefaultPrevented() ) { 97 121 e.preventDefault(); 98 if ( ! this.model. attributes._links.delete ) {122 if ( ! this.model.get( '_links' ).delete ) { 99 123 return; 100 124 } … … 187 211 var view = new NewTemplateView( 188 212 { 213 model: new Project(), 189 214 back_url: window.location.href 190 215 } 191 216 ); 192 $( view. el ).dialog(217 $( view.render().el ).dialog( 193 218 { 194 219 show: "fadeIn", … … 222 247 window.location.href = response.redirect; 223 248 view.setErrors( '' ); 224 view.dialog( ' close' );249 view.dialog( 'destroy' ); 225 250 } 226 251 } … … 232 257 'class': 'button btn-cancel', 233 258 click: function () { 234 $( this ).dialog( ' close' );259 $( this ).dialog( 'destroy' ); 235 260 } 236 261 } … … 258 283 } 259 284 ); 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_url286 },287 options288 );289 }290 }291 );292 285 } 293 286 ); -
mnumidesigner/trunk/assets/js/admin/translations.js
r2299029 r2411168 10 10 function() { 11 11 '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 ); 12 82 13 83 wp.api.init( … … 40 110 e.preventDefault(); 41 111 42 var editView = new EditTranslationView( this.model ); 112 var editView = new EditTranslationView( 113 { 114 model: this.model 115 } 116 ); 43 117 $( editView.el ).dialog( 44 118 { … … 62 136 "OK" : function () { 63 137 editView.save(); 64 $( this ).dialog( ' close' );138 $( this ).dialog( 'destroy' ); 65 139 } 66 140 } … … 96 170 } 97 171 ); 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 options123 );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.value151 );152 },153 updateEntry: function(entryId, trans) {154 var object = this.model.attributes.translations155 .find(156 function(entry) {157 return entry.id == entryId158 }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 );173 172 174 173 var TranslationsView = Table.extend( … … 181 180 e.preventDefault(); 182 181 var collection = this.collection; 183 var newView = new NewTranslationView(); 182 var newView = new NewTranslationView( 183 { 184 model: new Translation() 185 } 186 ); 184 187 $( newView.el ).dialog( 185 188 { … … 207 210 collection.add( model ); 208 211 newView.setErrors( '' ); 209 self.dialog( ' close' );212 self.dialog( 'destroy' ); 210 213 } 211 214 } … … 214 217 "Cancel" : function () { 215 218 newView.setErrors( '' ); 216 $( this ).dialog( " close" );219 $( this ).dialog( "destroy" ); 217 220 } 218 221 } -
mnumidesigner/trunk/class-mnumidesigner.php
r2315791 r2411168 70 70 $upload_dir = wp_upload_dir( null, false ); 71 71 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'; 72 82 } 73 83 … … 126 136 $controller = new MnumiDesigner_REST_Translations_Controller(); 127 137 $controller->register_routes(); 138 $controller = new MnumiDesigner_REST_Calendars_Controller(); 139 $controller->register_routes(); 128 140 $controller = new MnumiDesigner_REST_Projects_Controller(); 129 141 $controller->register_routes(); … … 192 204 array( 193 205 'MnumiDesigner_Translations_List_Table', 206 'register_menu', 207 ) 208 ); 209 add_action( 210 'admin_menu', 211 array( 212 'MnumiDesigner_Calendars_List_Table', 194 213 'register_menu', 195 214 ) … … 345 364 include_once 'admin/class-mnumidesigner-customer-projects-list-table.php'; 346 365 include_once 'admin/class-mnumidesigner-translations-list-table.php'; 366 include_once 'admin/class-mnumidesigner-calendars-list-table.php'; 347 367 include_once 'admin/class-mnumidesigner-settings.php'; 348 368 … … 359 379 include_once 'includes/rest-api/endpoints/class-mnumidesigner-rest-settings-controller.php'; 360 380 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'; 361 382 include_once 'includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php'; 362 383 -
mnumidesigner/trunk/docs/shortcodes.md
r2299029 r2411168 5 5 ---------------- 6 6 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=""] 8 8 9 9 Outputs edit url to MnumiDesigner project … … 17 17 * translation_id- optional, ID of translation which will be used in 18 18 MnumiDesigner editor 19 * calendar_ids - optional, comma separated IDs of calendars which will be used in 20 MnumiDesigner editor 19 21 20 22 Edit project link 21 23 ----------------- 22 24 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=""] 24 26 25 27 Outputs HTML edit link to MnumiDesigner project: … … 33 35 * translation_id- optional, ID of translation which will be used in 34 36 MnumiDesigner editor 37 * calendar_ids - optional, comma separated IDs of calendars which will be used in 38 MnumiDesigner editor 35 39 * text - Text which will be displayed in link 36 40 * class - Anchor class … … 42 46 --------------- 43 47 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=""] 45 49 46 50 Outputs url allowing creation of new MnumiDesigner projects. … … 58 62 * translation_id- optional, ID of translation which will be used in 59 63 MnumiDesigner editor 64 * calendar_ids - optional, comma separated IDs of calendars which will be used in 65 MnumiDesigner editor 60 66 61 67 … … 63 69 ---------------- 64 70 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=""] 66 72 67 73 Outputs link to MnumiDesigner based currently viewed product … … 79 85 * translation_id- optional, ID of translation which will be used in 80 86 MnumiDesigner editor 87 * calendar_ids - optional, comma separated IDs of calendars which will be used in 88 MnumiDesigner editor 81 89 * text - Text which will be displayed in link 82 90 * class - Anchor class -
mnumidesigner/trunk/includes/admin/backbone/html-new-project-template-form.php
r2299029 r2411168 10 10 } 11 11 ?> 12 <script type="text/html" id="tmpl-mnumidesigner-new-template"> 12 13 <div class="errors"></div> 13 14 <form onsubmit="event.preventDefault();"> 14 <table class=" form-table">15 <table class="widefat"> 15 16 <tr> 16 17 <th><label><?php esc_html_e( 'Type', 'mnumidesigner' ); ?></label></th> … … 43 44 </table> 44 45 </form> 46 </script> -
mnumidesigner/trunk/includes/admin/backbone/html-translations.php
r2299029 r2411168 14 14 <form onsubmit="event.preventDefault();"> 15 15 <input name="domain" type="hidden" value="editor"> 16 <table class=" form-table">16 <table class="widefat"> 17 17 <tr> 18 18 <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> 20 20 </tr> 21 21 <tr> 22 22 <th><label><?php esc_html_e( 'Base locale', 'mnumidesigner' ); ?></label></th> 23 23 <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"> 25 25 <option value="en"><?php esc_html_e( 'English', 'mnumidesigner' ); ?></option> 26 26 <option value="pl"><?php esc_html_e( 'Polish', 'mnumidesigner' ); ?></option> … … 32 32 </script> 33 33 <script type="text/html" id="tmpl-mnumidesigner-edit-translations"> 34 <table >34 <table class="widefat"> 35 35 <thead> 36 36 <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> 40 40 </tr> 41 41 </thead> -
mnumidesigner/trunk/includes/class-mnumidesigner-install.php
r2299029 r2411168 64 64 ); 65 65 66 $capability_types = array( 'project', 'template', 'translation' );66 $capability_types = array( 'project', 'template', 'translation', 'calendar' ); 67 67 68 68 foreach ( $capability_types as $capability_type ) { -
mnumidesigner/trunk/includes/helper-functions.php
r2315791 r2411168 188 188 } 189 189 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 } 190 if ( ! 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 205 if ( ! 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 234 if ( ! 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 261 if ( ! 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 959 959 960 960 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() ); 962 962 963 963 if ( $order_item_id > 0 ) { … … 988 988 989 989 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 ); 990 1002 } 991 1003 -
mnumidesigner/trunk/includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php
r2299029 r2411168 334 334 } 335 335 336 $fs->put_contents( $file->getRealPath(), wp_json_encode( $data ) );336 $fs->put_contents( $file->getRealPath(), wp_json_encode( $data ), 0644 ); 337 337 338 338 $data = $this->prepare_item_for_response( $file, $request ); … … 439 439 'id' => $id, 440 440 '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, 441 449 'translation' => $translation, 442 450 ); -
mnumidesigner/trunk/includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php
r2299029 r2411168 30 30 $atts = shortcode_atts( 31 31 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' => '', 39 41 ), 40 42 $atts -
mnumidesigner/trunk/includes/shortcodes/class-mnumidesigner-shortcode-edit-project-url.php
r2299029 r2411168 30 30 'templates' => '', 31 31 'translation_id' => '', 32 'calendar_ids' => '', 32 33 ), 33 34 $atts … … 36 37 $trans = mnumidesigner_get_translation_file( $atts['translation_id'] ); 37 38 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'] ); 38 45 39 46 $params = array_merge( … … 51 58 } 52 59 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 53 67 if ( $atts['ping_url'] ) { 54 68 $params['pingUrl'] = $atts['ping_url']; -
mnumidesigner/trunk/includes/woocommerce/class-mnumidesigner-wc-cart.php
r2299029 r2411168 210 210 $templates = implode( ',', MnumiDesigner_WC_Product::get_templates( $product_or_variation ) ); 211 211 212 $extra = ''; 212 213 $trans = MnumiDesigner_WC_Product::get_translation( $product_or_variation ); 213 214 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 ) ); 215 221 } 216 222 … … 225 231 wc_get_cart_url(), 226 232 $templates, 227 $ trans233 $extra 228 234 ) 229 235 ), … … 240 246 $trans = MnumiDesigner_WC_Product::get_translation( $product_or_variation ); 241 247 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 ) ); 243 254 } 244 255 … … 377 388 } 378 389 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 379 396 if ( MnumiDesigner_WC_Product::is_mnumidesigner_product( $product_or_variation ) ) { 380 397 $url = do_shortcode( -
mnumidesigner/trunk/includes/woocommerce/shortcodes/class-mnumidesigner-wc-shortcode-new-project-link.php
r2299029 r2411168 31 31 public static function output( $atts ) { 32 32 $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' => '', 40 42 ); 41 43 -
mnumidesigner/trunk/includes/woocommerce/shortcodes/class-mnumidesigner-wc-shortcode-new-project-url.php
r2299029 r2411168 37 37 'ping_url' => '', 38 38 'translation_id' => '', 39 'calendar_ids' => '', 39 40 ), 40 41 $atts … … 63 64 unset( $atts['translation_id'] ); 64 65 66 $calendars = array(); 67 if ( $atts['calendar_ids'] ) { 68 $calendars = explode( ',', $atts['calendar_ids'] ); 69 } 70 71 unset( $atts['calendar_ids'] ); 72 65 73 $params = array_merge( 66 74 $atts, … … 77 85 } 78 86 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 79 94 if ( $atts['ping_url'] ) { 80 95 $params['pingUrl'] = $atts['ping_url']; -
mnumidesigner/trunk/languages/mnumidesigner.pot
r2315791 r2411168 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "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" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.4.0\n" … … 17 17 #. Plugin Name of the plugin 18 18 #: admin/class-mnumidesigner-settings.php:355 19 #: admin/woocommerce/class-mnumidesigner-wc-product.php:2 0919 #: admin/woocommerce/class-mnumidesigner-wc-product.php:219 20 20 msgid "MnumiDesigner" 21 21 msgstr "" … … 33 33 msgstr "" 34 34 35 #: admin/class-mnumidesigner-calendars-list-table.php:48 36 msgid "Create new calendar" 37 msgstr "" 38 39 #: admin/class-mnumidesigner-calendars-list-table.php:51 40 msgid "Edit calendar" 41 msgstr "" 42 43 #: admin/class-mnumidesigner-calendars-list-table.php:102 44 #: admin/class-mnumidesigner-calendars-list-table.php:140 45 msgid "Calendars" 46 msgstr "" 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 51 msgid "Add New" 52 msgstr "" 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 58 msgid "Name" 59 msgstr "" 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 64 msgid "Type" 65 msgstr "" 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 70 msgid "Locale" 71 msgstr "" 72 73 #: admin/class-mnumidesigner-calendars-list-table.php:170 74 #: admin/class-mnumidesigner-translations-list-table.php:169 75 msgid "Last modified" 76 msgstr "" 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 84 msgid "Edit" 85 msgstr "" 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 92 msgid "Delete" 93 msgstr "" 94 35 95 #: admin/class-mnumidesigner-customer-projects-list-table.php:104 36 96 msgid "Projects" … … 42 102 43 103 #: admin/class-mnumidesigner-customer-projects-list-table.php:159 104 #: admin/class-mnumidesigner-templates-list-table.php:208 105 msgid "Thumb" 106 msgstr "" 107 108 #: admin/class-mnumidesigner-customer-projects-list-table.php:160 109 #: admin/class-mnumidesigner-templates-list-table.php:209 110 msgid "Project ID" 111 msgstr "" 112 113 #: admin/class-mnumidesigner-customer-projects-list-table.php:161 44 114 #: admin/class-mnumidesigner-templates-list-table.php:210 45 msgid " Thumb"46 msgstr "" 47 48 #: admin/class-mnumidesigner-customer-projects-list-table.php:16 0115 msgid "Linked to" 116 msgstr "" 117 118 #: admin/class-mnumidesigner-customer-projects-list-table.php:162 49 119 #: admin/class-mnumidesigner-templates-list-table.php:211 50 msgid " Project ID"51 msgstr "" 52 53 #: admin/class-mnumidesigner-customer-projects-list-table.php:16 1120 msgid "Created At" 121 msgstr "" 122 123 #: admin/class-mnumidesigner-customer-projects-list-table.php:163 54 124 #: admin/class-mnumidesigner-templates-list-table.php:212 55 msgid " Linked to"56 msgstr "" 57 58 #: admin/class-mnumidesigner-customer-projects-list-table.php:16 2125 msgid "Updated At" 126 msgstr "" 127 128 #: admin/class-mnumidesigner-customer-projects-list-table.php:164 59 129 #: 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 71 131 msgid "Remove At" 72 132 msgstr "" 73 133 74 #: admin/class-mnumidesigner-customer-projects-list-table.php:29275 #: admin/class-mnumidesigner-templates-list-table.php:40876 #: admin/class-mnumidesigner-translations-list-table.php:19577 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:15578 #: includes/admin/backbone/html-wc-product.php:3279 msgid "Edit"80 msgstr ""81 82 134 #: admin/class-mnumidesigner-customer-projects-list-table.php:299 83 #: admin/class-mnumidesigner-templates-list-table.php:41 7135 #: admin/class-mnumidesigner-templates-list-table.php:415 84 136 msgid "Duplicate" 85 137 msgstr "" 86 138 87 #: admin/class-mnumidesigner-customer-projects-list-table.php:30688 #: admin/class-mnumidesigner-templates-list-table.php:42489 #: admin/class-mnumidesigner-translations-list-table.php:20190 msgid "Delete"91 msgstr ""92 93 139 #: admin/class-mnumidesigner-customer-projects-list-table.php:310 94 #: admin/class-mnumidesigner-templates-list-table.php:42 8140 #: admin/class-mnumidesigner-templates-list-table.php:426 95 141 msgid "Restore" 96 142 msgstr "" … … 157 203 158 204 #: admin/class-mnumidesigner-templates-list-table.php:58 159 #: admin/woocommerce/class-mnumidesigner-wc-product.php:1 67160 #: admin/woocommerce/class-mnumidesigner-wc-product.php: 289205 #: admin/woocommerce/class-mnumidesigner-wc-product.php:177 206 #: admin/woocommerce/class-mnumidesigner-wc-product.php:331 161 207 msgid "Create new template" 162 208 msgstr "" … … 167 213 msgstr "" 168 214 169 #: admin/class-mnumidesigner-templates-list-table.php:162170 #: admin/class-mnumidesigner-translations-list-table.php:142171 msgid "Add New"172 msgstr ""173 174 215 #: admin/class-mnumidesigner-templates-list-table.php:167 175 216 msgid "Search Templates" … … 184 225 msgstr "" 185 226 186 #: admin/class-mnumidesigner-translations-list-table.php:10 2187 #: admin/class-mnumidesigner-translations-list-table.php:1 40188 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:5 16227 #: 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 189 230 msgid "Translations" 190 231 msgstr "" 191 232 192 #: admin/class-mnumidesigner-translations-list-table.php:167193 #: includes/admin/backbone/html-translations.php:18194 msgid "Name"195 msgstr ""196 197 233 #: 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 203 235 msgid "Translation domain" 204 236 msgstr "" 205 237 206 #: admin/class-mnumidesigner-translations-list-table.php:170207 msgid "Last modified"208 msgstr ""209 210 238 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:97 211 #: includes/woocommerce/class-mnumidesigner-wc-cart.php:2 18212 #: includes/woocommerce/class-mnumidesigner-wc-cart.php:2 47239 #: includes/woocommerce/class-mnumidesigner-wc-cart.php:224 240 #: includes/woocommerce/class-mnumidesigner-wc-cart.php:258 213 241 msgid "Project" 214 242 msgstr "" … … 218 246 msgstr "" 219 247 220 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:16 0248 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:167 221 249 msgid "Download PDF" 222 250 msgstr "" 223 251 224 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:16 2252 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:169 225 253 msgid "Download PDF Album" 226 254 msgstr "" 227 255 228 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:1 76229 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php: 194256 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:183 257 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:201 230 258 msgid "Download PDF Cover" 231 259 msgstr "" 232 260 233 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php: 198234 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:2 18261 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:205 262 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:225 235 263 msgid "Download PDF Book" 236 264 msgstr "" 237 265 238 #: admin/woocommerce/class-mnumidesigner-wc-product.php:1 78239 #: admin/woocommerce/class-mnumidesigner-wc-product.php: 292266 #: admin/woocommerce/class-mnumidesigner-wc-product.php:188 267 #: admin/woocommerce/class-mnumidesigner-wc-product.php:334 240 268 msgid "Attach existing template" 241 269 msgstr "" 242 270 243 #: admin/woocommerce/class-mnumidesigner-wc-product.php:2 32271 #: admin/woocommerce/class-mnumidesigner-wc-product.php:242 244 272 msgid "Number of pages in customer project" 245 273 msgstr "" 246 274 247 #: admin/woocommerce/class-mnumidesigner-wc-product.php:2 33275 #: admin/woocommerce/class-mnumidesigner-wc-product.php:243 248 276 msgid "Number of pages" 249 277 msgstr "" 250 278 251 #: admin/woocommerce/class-mnumidesigner-wc-product.php:2 35279 #: admin/woocommerce/class-mnumidesigner-wc-product.php:245 252 280 msgid "Enter number of pages customer projects should have." 253 281 msgstr "" 254 282 255 #: admin/woocommerce/class-mnumidesigner-wc-product.php:2 48283 #: admin/woocommerce/class-mnumidesigner-wc-product.php:258 256 284 msgid "Additional price per page" 257 285 msgstr "" 258 286 259 #: admin/woocommerce/class-mnumidesigner-wc-product.php:2 75287 #: admin/woocommerce/class-mnumidesigner-wc-product.php:285 260 288 msgid "Custom translation" 261 289 msgstr "" 262 290 263 #: admin/woocommerce/class-mnumidesigner-wc-product.php:339 291 #: admin/woocommerce/class-mnumidesigner-wc-product.php:314 292 msgid "Custom calendars" 293 msgstr "" 294 295 #: admin/woocommerce/class-mnumidesigner-wc-product.php:381 264 296 msgid "Click to toggle" 265 297 msgstr "" 266 298 267 #: class-mnumidesigner.php:2 42299 #: class-mnumidesigner.php:261 268 300 msgid "View MnumiDesigner documentation" 269 301 msgstr "" 270 302 271 #: class-mnumidesigner.php:2 43303 #: class-mnumidesigner.php:262 272 304 msgid "Docs" 273 305 msgstr "" 274 306 275 #: class-mnumidesigner.php:2 48307 #: class-mnumidesigner.php:267 276 308 msgid "Contact" 277 309 msgstr "" 278 310 279 #: class-mnumidesigner.php:3 12311 #: class-mnumidesigner.php:331 280 312 msgid "Your MnumiDesigner plugin needs to be configured to work properly" 281 313 msgstr "" 282 314 283 #: class-mnumidesigner.php:3 13315 #: class-mnumidesigner.php:332 284 316 msgid "Enter your MnumiDesigner Api access credentials" 285 317 msgstr "" 286 318 287 319 #. translators: %s api access expiration date 288 #: class-mnumidesigner.php:3 22320 #: class-mnumidesigner.php:341 289 321 msgid "You are using demo version of MnumiDesigner plugin which means that you can use it until: %s" 290 322 msgstr "" 291 323 292 #: class-mnumidesigner.php: 393324 #: class-mnumidesigner.php:414 293 325 msgid "All" 294 326 msgstr "" 295 327 296 #: class-mnumidesigner.php: 394328 #: class-mnumidesigner.php:415 297 329 msgid "Own" 298 330 msgstr "" 299 331 300 #: class-mnumidesigner.php: 395332 #: class-mnumidesigner.php:416 301 333 msgid "Global" 302 334 msgstr "" 303 335 304 #: class-mnumidesigner.php: 396336 #: class-mnumidesigner.php:417 305 337 msgid "Pending removal" 306 338 msgstr "" 307 339 308 #: class-mnumidesigner.php:4 07340 #: class-mnumidesigner.php:428 309 341 msgid "Filter by template type" 310 342 msgstr "" 311 343 312 #: class-mnumidesigner.php:4 08313 #: includes/admin/backbone/html-new-project-template-form.php:2 2344 #: class-mnumidesigner.php:429 345 #: includes/admin/backbone/html-new-project-template-form.php:23 314 346 msgid "Custom" 315 347 msgstr "" 316 348 317 #: class-mnumidesigner.php:4 09318 #: includes/admin/backbone/html-new-project-template-form.php:2 4349 #: class-mnumidesigner.php:430 350 #: includes/admin/backbone/html-new-project-template-form.php:25 319 351 msgid "Album" 320 352 msgstr "" 321 353 322 #: class-mnumidesigner.php:4 10323 #: includes/admin/backbone/html-new-project-template-form.php:2 6354 #: class-mnumidesigner.php:431 355 #: includes/admin/backbone/html-new-project-template-form.php:27 324 356 msgid "Calendar" 325 357 msgstr "" 326 358 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 360 msgid "Name days" 361 msgstr "" 362 363 #: includes/admin/backbone/html-calendars.php:26 364 msgid "National days" 365 msgstr "" 366 367 #: includes/admin/backbone/html-calendars.php:54 368 msgid "Date" 369 msgstr "" 370 371 #: includes/admin/backbone/html-calendars.php:55 372 msgid "Is cyclic?" 373 msgstr "" 374 375 #: includes/admin/backbone/html-calendars.php:56 376 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:546 377 msgid "Event name" 378 msgstr "" 379 380 #: includes/admin/backbone/html-calendars.php:58 381 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:557 382 msgid "Event type" 383 msgstr "" 384 385 #: includes/admin/backbone/html-calendars.php:60 386 msgid "Actions" 387 msgstr "" 388 389 #: includes/admin/backbone/html-calendars.php:72 390 #: includes/admin/backbone/html-calendars.php:95 391 msgid "Holiday" 392 msgstr "" 393 394 #: includes/admin/backbone/html-calendars.php:76 395 msgid "Add" 396 msgstr "" 397 398 #: includes/admin/backbone/html-new-project-template-form.php:29 332 399 msgid "Business card" 333 400 msgstr "" 334 401 335 #: includes/admin/backbone/html-new-project-template-form.php:3 6402 #: includes/admin/backbone/html-new-project-template-form.php:37 336 403 msgid "Width" 337 404 msgstr "" 338 405 339 #: includes/admin/backbone/html-new-project-template-form.php:4 0406 #: includes/admin/backbone/html-new-project-template-form.php:41 340 407 msgid "Height" 341 408 msgstr "" … … 371 438 #: includes/admin/backbone/html-translations.php:26 372 439 msgid "Polish" 440 msgstr "" 441 442 #: includes/admin/backbone/html-translations.php:37 443 msgid "Id" 444 msgstr "" 445 446 #: includes/admin/backbone/html-translations.php:38 447 msgid "Original" 448 msgstr "" 449 450 #: includes/admin/backbone/html-translations.php:39 451 msgid "Translation" 373 452 msgstr "" 374 453 … … 436 515 #: includes/class-mnumidesigner-backbone-list-table.php:757 437 516 msgid "Loading..." 517 msgstr "" 518 519 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:62 520 msgid "Unique identifier of the calendar." 521 msgstr "" 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 525 msgid "Filter collection by object name." 526 msgstr "" 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 531 msgid "Filter collection by object type." 532 msgstr "" 533 534 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:284 535 msgid "Calendar already exists." 536 msgstr "" 537 538 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:381 539 msgid "Calendar file is not a file." 540 msgstr "" 541 542 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:385 543 msgid "Insufficient file permissions for removing calendar." 544 msgstr "" 545 546 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:391 547 msgid "Calendar cannot be deleted." 548 msgstr "" 549 550 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:493 551 msgid "Unique id of calendar" 552 msgstr "" 553 554 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:499 555 msgid "Name for calendar." 556 msgstr "" 557 558 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:505 559 msgid "Calendar type" 560 msgstr "" 561 562 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:512 563 msgid "Locale of calendar." 564 msgstr "" 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 568 msgid "The date the object was last modified, in the site's timezone." 569 msgstr "" 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 573 msgid "URL to the object" 574 msgstr "" 575 576 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:532 577 msgid "Calendar events" 578 msgstr "" 579 580 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:540 581 msgid "Event date" 582 msgstr "" 583 584 #: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:552 585 msgid "Is event cyclic?" 438 586 msgstr "" 439 587 … … 474 622 msgstr "" 475 623 476 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:242477 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:394478 msgid "Filter collection by object type."479 msgstr ""480 481 624 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:299 482 625 msgid "Template does not exist." … … 509 652 510 653 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:691 511 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 04654 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1016 512 655 msgid "An alphanumeric identifier for the project." 513 656 msgstr "" 514 657 515 658 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:697 516 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 10659 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1022 517 660 msgid "Machine type of the project." 518 661 msgstr "" 519 662 520 663 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:703 521 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 16664 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1028 522 665 msgid "Localized type of the project." 523 666 msgstr "" 524 667 525 668 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:709 526 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 22669 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1034 527 670 msgid "Label of the project." 528 671 msgstr "" 529 672 530 673 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:715 531 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 28674 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1040 532 675 msgid "Creation date of the project." 533 676 msgstr "" 534 677 535 678 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:722 536 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 35679 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1047 537 680 msgid "Last modification date of the project." 538 681 msgstr "" 539 682 540 683 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:729 541 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 42684 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1054 542 685 msgid "Number of pages in the project." 543 686 msgstr "" 544 687 545 688 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:735 546 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 54689 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1066 547 690 msgid "Indicates if project is derived from template." 548 691 msgstr "" 549 692 550 693 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:741 551 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 60694 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1072 552 695 msgid "Template ID the derived project is based on." 553 696 msgstr "" 554 697 555 698 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:747 556 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 66699 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1078 557 700 msgid "Indicates if project is global." 558 701 msgstr "" 559 702 560 703 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:753 561 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 72704 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1084 562 705 msgid "Indicates if project will be removed" 563 706 msgstr "" … … 661 804 msgstr "" 662 805 663 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 48806 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1060 664 807 msgid "Number of priceable pages in the project" 665 808 msgstr "" 666 809 667 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 78810 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1090 668 811 msgid "Date when project will be removed" 669 812 msgstr "" 670 813 671 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:10 85814 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1097 672 815 msgid "Products to which this project is attached to" 673 816 msgstr "" 674 817 675 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:11 05818 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1117 676 819 msgid "WooCommerce Order Items to which this project is attached to" 677 820 msgstr "" … … 706 849 msgstr "" 707 850 708 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:105709 msgid "Filter collection by object name."710 msgstr ""711 712 851 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:110 713 852 msgid "Filter collection by object locale." … … 730 869 msgstr "" 731 870 732 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:47 1871 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:479 733 872 msgid "Unique id of translation" 734 873 msgstr "" 735 874 736 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:4 77875 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:485 737 876 msgid "Name for translation." 738 877 msgstr "" 739 878 740 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:49 0879 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:498 741 880 msgid "Locale of translation." 742 881 msgstr "" 743 882 744 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php: 496883 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:504 745 884 msgid "Translation fallback locale" 746 885 msgstr "" 747 886 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 757 888 msgid "ID of translation entry" 758 889 msgstr "" 759 890 760 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:53 0891 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:538 761 892 msgid "Translation value" 762 893 msgstr "" 763 894 764 #: includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php:3 6895 #: includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php:38 765 896 msgid "Edit project" 766 897 msgstr "" -
mnumidesigner/trunk/readme.txt
r2315791 r2411168 2 2 Contributors: ppakier2017, mnumi 3 3 Tags: product customiser, product designer, custom product, print, photo book, photo album, photo calendar, photo-book, woocommerce, web2print 4 Stable tag: 0. 64 Stable tag: 0.7 5 5 Requires at least: 4.6 6 Tested up to: 4.76 Tested up to: 5.4.4 7 7 Requires PHP: 5.6 8 8 License: GPLv2 or later … … 159 159 == Changelog == 160 160 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 161 166 = 0.6 - 2020-05-28 = 162 167
Note: See TracChangeset
for help on using the changeset viewer.