Media Library Assistant - Version 2.72

Version Description

  • Fix: Remove "Circular Reference" PHP Warnings in class-mla-mime-types.php.
Download this release

Release Info

Developer dglingren
Plugin Icon 128x128 Media Library Assistant
Version 2.72
Comparing to
See all releases

Code changes from version 2.70 to 2.72

Files changed (49) hide show
  1. css/mla-edit-media-style.css +73 -0
  2. examples/plugins/mla-custom-feed-example/admin-settings-page.tpl +27 -64
  3. examples/plugins/mla-insert-fixit.php +459 -58
  4. examples/plugins/mla-item-transfer-pretty-links.php +3 -3
  5. examples/plugins/mla-mapping-hooks-example.php +4 -5
  6. examples/plugins/mla-path-mapping-example/admin-settings-page.tpl +366 -0
  7. examples/plugins/mla-path-mapping-example/mla-path-mapping-example.php +739 -0
  8. examples/plugins/mla-uploaded-on-example.php +137 -0
  9. examples/plugins/smart-media-categories/admin/includes/class-smc-automatic-support.php +1 -1
  10. includes/class-mla-admin-columns-pro-support-40.php +307 -0
  11. includes/class-mla-admin-columns-pro-support-42.php +304 -0
  12. includes/class-mla-admin-columns-pro-support.php +1411 -0
  13. includes/class-mla-admin-columns-support.php +91 -383
  14. includes/class-mla-ajax.php +2 -0
  15. includes/class-mla-core-options.php +21 -1
  16. includes/class-mla-core.php +51 -22
  17. includes/class-mla-data-source.php +10 -19
  18. includes/class-mla-data.php +263 -45
  19. includes/class-mla-edit-media.php +118 -6
  20. includes/class-mla-list-table.php +17 -6
  21. includes/class-mla-main.php +216 -123
  22. includes/class-mla-mime-types.php +75 -35
  23. includes/class-mla-objects.php +8 -18
  24. includes/class-mla-options.php +104 -17
  25. includes/class-mla-settings-custom-fields-tab.php +4 -4
  26. includes/class-mla-settings-documentation-tab.php +11 -20
  27. includes/class-mla-settings-iptc-exif-tab.php +7 -8
  28. includes/class-mla-settings-shortcodes-tab.php +6 -6
  29. includes/class-mla-settings-upload-tab.php +5 -5
  30. includes/class-mla-settings-view-tab.php +3 -3
  31. includes/class-mla-settings.php +5 -4
  32. includes/class-mla-shortcode-support.php +5 -6
  33. includes/class-mla-thumbnail-generation.php +16 -4
  34. includes/class-mla-wpml-support.php +44 -27
  35. includes/mla-plugin-loader.php +3 -3
  36. index.php +3 -3
  37. js/mla-edit-media-scripts.js +108 -0
  38. js/mla-edit-media-scripts.min.js +1 -1
  39. languages/media-library-assistant-en_US - References.pot +1277 -1172
  40. languages/media-library-assistant-en_US.po +106 -47
  41. languages/media-library-assistant-en_US.pot +105 -46
  42. readme.txt +28 -3
  43. tpls/admin-inline-edit-form.tpl +9 -0
  44. tpls/documentation-settings-tab.tpl +347 -155
  45. tpls/help-for-media_page_mla-menu.tpl +3 -2
  46. tpls/help-for-settings_page_mla-settings-menu-custom_field.tpl +2 -2
  47. tpls/help-for-settings_page_mla-settings-menu-iptc_exif.tpl +1 -0
  48. tpls/mla-add-new-bulk-edit.tpl +6 -0
  49. tpls/mla-option-templates.tpl +7 -0
css/mla-edit-media-style.css CHANGED
@@ -13,6 +13,79 @@
13
  width: 100%;
14
  }
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  /*
17
  * Parent Info meta box
18
  */
13
  width: 100%;
14
  }
15
 
16
+ /*
17
+ * Submit meta box
18
+ */
19
+ .curtime span#timestamp {
20
+ display: none !important;
21
+ }
22
+
23
+ #uploadtimestampdiv select,
24
+ #modifytimestampdiv select {
25
+ height: 21px;
26
+ line-height: 14px;
27
+ padding: 0;
28
+ vertical-align: top;
29
+ font-size: 12px;
30
+ }
31
+
32
+ #aa, #jj, #hh, #mn {
33
+ padding: 1px;
34
+ font-size: 12px;
35
+ }
36
+
37
+ #jj, #hh, #mn {
38
+ width: 2em;
39
+ }
40
+
41
+ #aa {
42
+ width: 3.4em;
43
+ }
44
+
45
+ .uploadtime #upload-timestamp,
46
+ .modifytime #modify-timestamp {
47
+ padding: 2px 0 1px 0;
48
+ display: inline !important;
49
+ height: auto !important;
50
+ }
51
+
52
+ .uploadtime #upload-timestamp:before,
53
+ .modifytime #modify-timestamp:before {
54
+ color: #82878c;
55
+ font: normal 20px/1 dashicons;
56
+ speak: none;
57
+ display: inline-block;
58
+ margin-left: -1px;
59
+ padding-right: 3px;
60
+ vertical-align: top;
61
+ -webkit-font-smoothing: antialiased;
62
+ -moz-osx-font-smoothing: grayscale;
63
+ }
64
+
65
+ .uploadtime #upload-timestamp:before,
66
+ .modifytime #modify-timestamp:before {
67
+ content: "\f145";
68
+ position: relative;
69
+ top: -1px;
70
+ }
71
+
72
+ #uploadtimestampdiv,
73
+ #modifytimestampdiv {
74
+ padding-top: 5px;
75
+ line-height: 23px;
76
+ }
77
+
78
+ #uploadtimestampdiv p,
79
+ #modifytimestampdiv p {
80
+ margin: 8px 0 6px;
81
+ }
82
+
83
+ #uploadtimestampdiv input,
84
+ #modifytimestampdiv input {
85
+ border-width: 1px;
86
+ border-style: solid;
87
+ }
88
+
89
  /*
90
  * Parent Info meta box
91
  */
examples/plugins/mla-custom-feed-example/admin-settings-page.tpl CHANGED
@@ -25,7 +25,7 @@
25
 
26
  <!-- template="page-level-options" -->
27
  <tr valign="top"><td class="textright">
28
- <input name="mla_enable_custom_feeds" id="mla_enable_custom_feeds" type="checkbox" [+enable_custom_feeds_checked+] value="1">
29
  </td><td>
30
  &nbsp;<strong>Enable custom feed processing</strong>
31
  <div class="mla-settings-help">&nbsp;&nbsp;Check this option to add the (active) custom feeds to the WordPress feeds list.</div>
@@ -65,7 +65,7 @@
65
  <td><input name="mla_edit_custom_feed[title]" id="mla-custom-feed-title" type="text" value="" /></td>
66
  </tr>
67
  <tr class="form-field custom-feed-link-wrap">
68
- <th scope="row"> <label for="mla-custom-link-slug">Link</label>
69
  </th>
70
  <td><input name="mla_edit_custom_feed[link]" id="mla-custom-feed-link" type="text" value="" /></td>
71
  </tr>
@@ -144,7 +144,7 @@
144
  <p class="submit mla-settings-submit">
145
  <input name="mla-edit-custom-feed-cancel" class="button-secondary" id="mla-edit-custom-feed-cancel" type="submit" value="Cancel" />
146
  &nbsp;
147
- <input name="mla-edit-custom-feed-submit" class="button-primary" name="mla-edit-custom-feed-submit" type="submit" value="Update" />
148
  &nbsp; </p>
149
  </form>
150
 
@@ -197,13 +197,6 @@ span.submit.mla-settings-submit,
197
  p.submit.mla-settings-submit {
198
  padding-bottom: 0px
199
  }
200
- .
201
- mla-settings-enable-form {
202
- margin-left: 0px;
203
- margin-top: 10px;
204
- padding-bottom: 10px;
205
- border-bottom:thin solid #888888;
206
- }
207
 
208
  #mla-add-custom-feed-table {
209
  margin-bottom: 15px;
@@ -267,7 +260,7 @@ mla-settings-enable-form {
267
  <td><input name="mla_add_custom_feed[title]" id="mla-custom-feed-title" type="text" value="" /></td>
268
  </tr>
269
  <tr class="form-field custom-feed-link-wrap">
270
- <th scope="row"> <label for="mla-custom-link-slug">Link</label>
271
  </th>
272
  <td><input name="mla_add_custom_feed[link]" id="mla-custom-feed-link" type="text" value="" /></td>
273
  </tr>
@@ -357,41 +350,7 @@ mla-settings-enable-form {
357
  </div>
358
  <!-- /col-container -->
359
 
360
- <!-- template="debug-tab" -->
361
- <h2>[+Debug Options+]</h2>
362
- <form action="[+form_url+]" method="post" class="mla-display-settings-page" id="mla-display-settings-debug-tab">
363
- &nbsp;<br />
364
- <table class="optiontable">
365
- [+options_list+]
366
- </table>
367
- <h3>[+Debug Settings+]</h3>
368
- <table class="optiontable">
369
- [+settings_list+]
370
- </table>
371
- <h3>[+Error Log+]</h3>
372
- [+Error Log Name+] ( [+Error Log Size+] )
373
- <table>
374
- <tr>
375
- <td>
376
- <textarea name="" id="mla-error-log-display" rows="24" cols="100" readonly="readonly">[+error_log_text+]</textarea>
377
- </td>
378
- </tr>
379
- <tr>
380
- <td>
381
- [+download_link+]&nbsp;[+reset_link+]
382
- </td>
383
- </tr>
384
- </table>
385
- <p class="submit mla-settings-submit">
386
- <input name="mla-debug-options-save" class="button-primary" id="mla-debug-options-save" type="submit" value="[+Save Changes+]" />
387
- </p>
388
- <div class="mla-settings-help">[+Click Save Changes+]</div>
389
- [+_wpnonce+]
390
- [+_wp_http_referer+]
391
- </form>
392
-
393
  <!-- template="documentation-tab" -->
394
- <h2>Plugin Documentation. In this tab, jump to:</h2>
395
  <style type='text/css'>
396
  .mla-doc-toc-list {
397
  list-style-position:inside;
@@ -438,28 +397,29 @@ mla-settings-enable-form {
438
  font-weight:bold
439
  }
440
  </style>
 
441
  <div class="mla-display-settings-page" id="mla-display-settings-documentation-tab" style="width:700px">
442
  <ul class="mla-doc-toc-list">
443
  <li><a href="#introduction"><strong>Introduction</strong></a></li>
444
  <li><a href="#defining"><strong>Defining Your Feeds</strong></a></li>
445
- <ul class="mla-doc-toc-list">
446
  <li><a href="#elements">Feed Elements</a></li>
447
  <li><a href="#taxonomies">Taxonomies</a></li>
448
  <li><a href="#parameters">Data Selection Parameters</a></li>
449
- </ul>
450
  <li><a href="#managing"><strong>Managing Your Feeds</strong></a></li>
451
  <li><a href="#feed-templates"><strong>Feed Templates</strong></a></li>
452
- <ul class="mla-doc-toc-list">
453
  <li><a href="#default-template">Default Template</a></li>
454
  <li><a href="#theme-template">Theme-based Templates</a></li>
455
- </ul>
456
  <li><a href="#accessing"><strong>Accessing Your Feeds</strong></a></li>
457
- <ul class="mla-doc-toc-list">
458
  <li><a href="#url-slug">URL-based slugs</a></li>
459
  <li><a href="#query-slug">HTML Query Parameter slugs</a></li>
460
  <li><a href="#tax-arguments">Taxonomy Arguments</a></li>
461
  <li><a href="#query-parms">Other HTML Query Arguments</a></li>
462
- </ul>
463
  </ul>
464
  <a name="introduction"></a>
465
  <p>
@@ -481,7 +441,7 @@ You can find more general information in the <a href="https://codex.wordpress.or
481
  </ul>
482
  <p>
483
  The basic idea is quite simple. You define a feed and give it a name, or "feed slug", such as "mlafeed". You specify MLA data selection parameters that define which Media Library items are part of the feed. When a feed reader accesses the feed, the data selection parameters are executed and the items are returned in a format that the feed reader can process.
484
- <a name="#defining"></a>
485
  </p>
486
  <p>
487
  <a href="#backtotop">Go to Top</a>
@@ -489,7 +449,7 @@ The basic idea is quite simple. You define a feed and give it a name, or "feed s
489
  <h3><strong>Defining Your Feeds</strong></h3>
490
  <p>
491
  You can define a new feed, also known as an RSS "channel" using the "Add New Feed" area at the left of the Settings/MLA Feed admin screen. Simply fill in the field values you want and click "Add Feed" at the bottom of the area. The new feed will be added to the submenu table in the right-hand side of the screen. If you set the "Active" status the feed will be added to the WordPress feed list.
492
- <a name="#elements"></a>
493
  </p>
494
  <p>
495
  <a href="#backtotop">Go to Top</a>
@@ -562,7 +522,7 @@ Each RSS feed, or channel, is defined by an XML-based document that contains a n
562
  </table>
563
  <p>
564
  &nbsp;
565
- <a name="#taxonomies"></a>
566
  </p>
567
  <p>
568
  <a href="#backtotop">Go to Top</a>
@@ -570,7 +530,7 @@ Each RSS feed, or channel, is defined by an XML-based document that contains a n
570
  <h4>Taxonomies</h4>
571
  <p>
572
  Each item can be classified by one or more "Category" elements. You can name the taxonomies that these elements will be taken from, e.g., <code>attachment_category</code>. Multiple taxonomies can be named, separated by commas. When the item is added to a feed the plugin will retrieve all the terms assigned to the item, de-duplicate them and add them to the item in the feed.
573
- <a name="#parameters"></a>
574
  </p>
575
  <p>
576
  <a href="#backtotop">Go to Top</a>
@@ -595,7 +555,7 @@ With the above template you can access the feed in different ways:
595
  Of course, you could also code the taxonomy and term values explicitly in the Data Selection parameters, e.g.,<br />&nbsp;<br />
596
  <code>attachment_category=abc posts_per_page=6</code><br />&nbsp;<br />
597
  and then just use the feed name to access it.
598
- <a name="#managing"></a>
599
  </p>
600
  <p>
601
  <a href="#backtotop">Go to Top</a>
@@ -612,7 +572,9 @@ Managing your feeds is just like managing posts, pages and Media Library items:
612
  <li>You can delete several feeds at once by checking the box to the left of the slug, selecting the "Delete" Bulk Action and clicking "Apply"</li>
613
  <li>You can edit a feed or delete it by hovering over the feed Slug and clicking the rollover action that appears under the slug value</li>
614
  </ul>
615
- <a name="#feed-templates"></a>
 
 
616
  </p>
617
  <p>
618
  <a href="#backtotop">Go to Top</a>
@@ -620,7 +582,7 @@ Managing your feeds is just like managing posts, pages and Media Library items:
620
  <h3><strong>Feed Templates</strong></h3>
621
  <p>
622
  The example plugin uses a PHP feed template file to display its feeds, in much the same way as WordPress uses theme templates to display your content. The feed template is located in the plugin's root directory. It is possible to use custom feed templates to achieve a theme-based solution (see further information and links below) or change which template is used on a feed-by-feed basis.
623
- <a name="#default-template"></a>
624
  </p>
625
  <p>
626
  <a href="#backtotop">Go to Top</a>
@@ -632,7 +594,7 @@ The example plugin includes a default template file modeled on the WordPress <co
632
  The default file uses a number of fields defined in the Feed Elements section above. In the code you can see these as elements of the "active feed" array, such as <code>MLACustomFeedExample::$active_feed['title']</code>. The file also has a traditional WordPress "loop" to process the items selected by the data selection parameters:<br />&nbsp;<br />
633
  <code>while ( MLACustomFeedExample::$wp_query_object->have_posts() ) : MLACustomFeedExample::$wp_query_object->the_post();</code><br />&nbsp;<br />
634
  You can use all of the WordPress template tags to access item values within the "loop".
635
- <a name="#theme-template"></a>
636
  </p>
637
  <p>
638
  <a href="#backtotop">Go to Top</a>
@@ -648,7 +610,7 @@ You can access the template by entering:<br />&nbsp;<br />
648
  Tpl. Slug: mlafeed<br />
649
  Tpl. Name: authors<br />&nbsp;<br />
650
  in the Add New Feed area.
651
- <a name="#accessing"></a>
652
  </p>
653
  <p>
654
  <a href="#backtotop">Go to Top</a>
@@ -656,7 +618,7 @@ in the Add New Feed area.
656
  <h3><strong>Accessing Your Feeds</strong></h3>
657
  <p>
658
  Accessing your custom feeds follows several rules defined by WordPress. The "Slug" that you use to name your feed(s) is the most important element, but WordPress has some additional rules for formatting URLs that contain taxonomy arguments as well.
659
- <a name="#url-slug"></a>
660
  </p>
661
  <p>
662
  <a href="#backtotop">Go to Top</a>
@@ -666,7 +628,7 @@ Accessing your custom feeds follows several rules defined by WordPress. The "Slu
666
  If your site uses Custom/Pretty Permalinks you can use the feed slug as part of the URL. For example, the "mlafeed" feed can be accessed as:<br />&nbsp;<br />
667
  <code>http://www.example.com/mlafeed/</code><br />
668
  &nbsp;
669
- <a name="#query-slug"></a>
670
  </p>
671
  <p>
672
  <a href="#backtotop">Go to Top</a>
@@ -676,7 +638,7 @@ If your site uses Custom/Pretty Permalinks you can use the feed slug as part of
676
  No matter what permalink structure you use you can always specify a feed using a query argument, e.g.,<br />&nbsp;<br />
677
  <code>http://www.example.com/?feed=mlafeed</code><br />
678
  &nbsp;
679
- <a name="#tax-arguments"></a>
680
  </p>
681
  <p>
682
  <a href="#backtotop">Go to Top</a>
@@ -691,7 +653,7 @@ You can provide feeds for specific taxonomy terms as part of the URL or as an HT
691
  Passing the parameter values into your data selection parameters is different for each case. For the URL case WordPress parses the URL components into the database query parameters and you can access the value as <code>[+query:attachment_tag+]</code>. If you choose the HTML query argument format the value will be available in the "request:" area, i.e., <code>[+request:attachment_tag+]</code>. I regret the confusing prefix values but that's how it works.
692
  </p>
693
  <p>
694
- <a name="#query-parms"></a>
695
  </p>
696
  <p>
697
  <a href="#backtotop">Go to Top</a>
@@ -704,4 +666,5 @@ You can pass any other parameters you need as query arguments following the basi
704
  The above example would select all items "owned" by John Smith and assigned to the "abc" or "def" terms in the Att. Tags taxonomy. The corresponding data selection parameters in the "mlafeed" would be:<br />&nbsp;<br />
705
  <code>attachment_tag=[+query:attachment_tag+] author=[+request:author+]</code><br />
706
  &nbsp;<br />
 
707
  </div>
25
 
26
  <!-- template="page-level-options" -->
27
  <tr valign="top"><td class="textright">
28
+ <input name="mla_enable_custom_feeds" id="mla_enable_custom_feeds" type="checkbox" [+enable_custom_feeds_checked+] value="1" />
29
  </td><td>
30
  &nbsp;<strong>Enable custom feed processing</strong>
31
  <div class="mla-settings-help">&nbsp;&nbsp;Check this option to add the (active) custom feeds to the WordPress feeds list.</div>
65
  <td><input name="mla_edit_custom_feed[title]" id="mla-custom-feed-title" type="text" value="" /></td>
66
  </tr>
67
  <tr class="form-field custom-feed-link-wrap">
68
+ <th scope="row"> <label for="mla-custom-feed-link">Link</label>
69
  </th>
70
  <td><input name="mla_edit_custom_feed[link]" id="mla-custom-feed-link" type="text" value="" /></td>
71
  </tr>
144
  <p class="submit mla-settings-submit">
145
  <input name="mla-edit-custom-feed-cancel" class="button-secondary" id="mla-edit-custom-feed-cancel" type="submit" value="Cancel" />
146
  &nbsp;
147
+ <input name="mla-edit-custom-feed-submit" class="button-primary" id="mla-edit-custom-feed-submit" type="submit" value="Update" />
148
  &nbsp; </p>
149
  </form>
150
 
197
  p.submit.mla-settings-submit {
198
  padding-bottom: 0px
199
  }
 
 
 
 
 
 
 
200
 
201
  #mla-add-custom-feed-table {
202
  margin-bottom: 15px;
260
  <td><input name="mla_add_custom_feed[title]" id="mla-custom-feed-title" type="text" value="" /></td>
261
  </tr>
262
  <tr class="form-field custom-feed-link-wrap">
263
+ <th scope="row"> <label for="mla-custom-feed-link">Link</label>
264
  </th>
265
  <td><input name="mla_add_custom_feed[link]" id="mla-custom-feed-link" type="text" value="" /></td>
266
  </tr>
350
  </div>
351
  <!-- /col-container -->
352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
  <!-- template="documentation-tab" -->
 
354
  <style type='text/css'>
355
  .mla-doc-toc-list {
356
  list-style-position:inside;
397
  font-weight:bold
398
  }
399
  </style>
400
+ <h2>Plugin Documentation. In this tab, jump to:</h2>
401
  <div class="mla-display-settings-page" id="mla-display-settings-documentation-tab" style="width:700px">
402
  <ul class="mla-doc-toc-list">
403
  <li><a href="#introduction"><strong>Introduction</strong></a></li>
404
  <li><a href="#defining"><strong>Defining Your Feeds</strong></a></li>
405
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
406
  <li><a href="#elements">Feed Elements</a></li>
407
  <li><a href="#taxonomies">Taxonomies</a></li>
408
  <li><a href="#parameters">Data Selection Parameters</a></li>
409
+ </ul></li>
410
  <li><a href="#managing"><strong>Managing Your Feeds</strong></a></li>
411
  <li><a href="#feed-templates"><strong>Feed Templates</strong></a></li>
412
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
413
  <li><a href="#default-template">Default Template</a></li>
414
  <li><a href="#theme-template">Theme-based Templates</a></li>
415
+ </ul></li>
416
  <li><a href="#accessing"><strong>Accessing Your Feeds</strong></a></li>
417
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
418
  <li><a href="#url-slug">URL-based slugs</a></li>
419
  <li><a href="#query-slug">HTML Query Parameter slugs</a></li>
420
  <li><a href="#tax-arguments">Taxonomy Arguments</a></li>
421
  <li><a href="#query-parms">Other HTML Query Arguments</a></li>
422
+ </ul></li>
423
  </ul>
424
  <a name="introduction"></a>
425
  <p>
441
  </ul>
442
  <p>
443
  The basic idea is quite simple. You define a feed and give it a name, or "feed slug", such as "mlafeed". You specify MLA data selection parameters that define which Media Library items are part of the feed. When a feed reader accesses the feed, the data selection parameters are executed and the items are returned in a format that the feed reader can process.
444
+ <a name="defining"></a>
445
  </p>
446
  <p>
447
  <a href="#backtotop">Go to Top</a>
449
  <h3><strong>Defining Your Feeds</strong></h3>
450
  <p>
451
  You can define a new feed, also known as an RSS "channel" using the "Add New Feed" area at the left of the Settings/MLA Feed admin screen. Simply fill in the field values you want and click "Add Feed" at the bottom of the area. The new feed will be added to the submenu table in the right-hand side of the screen. If you set the "Active" status the feed will be added to the WordPress feed list.
452
+ <a name="elements"></a>
453
  </p>
454
  <p>
455
  <a href="#backtotop">Go to Top</a>
522
  </table>
523
  <p>
524
  &nbsp;
525
+ <a name="taxonomies"></a>
526
  </p>
527
  <p>
528
  <a href="#backtotop">Go to Top</a>
530
  <h4>Taxonomies</h4>
531
  <p>
532
  Each item can be classified by one or more "Category" elements. You can name the taxonomies that these elements will be taken from, e.g., <code>attachment_category</code>. Multiple taxonomies can be named, separated by commas. When the item is added to a feed the plugin will retrieve all the terms assigned to the item, de-duplicate them and add them to the item in the feed.
533
+ <a name="parameters"></a>
534
  </p>
535
  <p>
536
  <a href="#backtotop">Go to Top</a>
555
  Of course, you could also code the taxonomy and term values explicitly in the Data Selection parameters, e.g.,<br />&nbsp;<br />
556
  <code>attachment_category=abc posts_per_page=6</code><br />&nbsp;<br />
557
  and then just use the feed name to access it.
558
+ <a name="managing"></a>
559
  </p>
560
  <p>
561
  <a href="#backtotop">Go to Top</a>
572
  <li>You can delete several feeds at once by checking the box to the left of the slug, selecting the "Delete" Bulk Action and clicking "Apply"</li>
573
  <li>You can edit a feed or delete it by hovering over the feed Slug and clicking the rollover action that appears under the slug value</li>
574
  </ul>
575
+ <p>
576
+ <a name="feed-templates"></a>
577
+ &nbsp;
578
  </p>
579
  <p>
580
  <a href="#backtotop">Go to Top</a>
582
  <h3><strong>Feed Templates</strong></h3>
583
  <p>
584
  The example plugin uses a PHP feed template file to display its feeds, in much the same way as WordPress uses theme templates to display your content. The feed template is located in the plugin's root directory. It is possible to use custom feed templates to achieve a theme-based solution (see further information and links below) or change which template is used on a feed-by-feed basis.
585
+ <a name="default-template"></a>
586
  </p>
587
  <p>
588
  <a href="#backtotop">Go to Top</a>
594
  The default file uses a number of fields defined in the Feed Elements section above. In the code you can see these as elements of the "active feed" array, such as <code>MLACustomFeedExample::$active_feed['title']</code>. The file also has a traditional WordPress "loop" to process the items selected by the data selection parameters:<br />&nbsp;<br />
595
  <code>while ( MLACustomFeedExample::$wp_query_object->have_posts() ) : MLACustomFeedExample::$wp_query_object->the_post();</code><br />&nbsp;<br />
596
  You can use all of the WordPress template tags to access item values within the "loop".
597
+ <a name="theme-template"></a>
598
  </p>
599
  <p>
600
  <a href="#backtotop">Go to Top</a>
610
  Tpl. Slug: mlafeed<br />
611
  Tpl. Name: authors<br />&nbsp;<br />
612
  in the Add New Feed area.
613
+ <a name="accessing"></a>
614
  </p>
615
  <p>
616
  <a href="#backtotop">Go to Top</a>
618
  <h3><strong>Accessing Your Feeds</strong></h3>
619
  <p>
620
  Accessing your custom feeds follows several rules defined by WordPress. The "Slug" that you use to name your feed(s) is the most important element, but WordPress has some additional rules for formatting URLs that contain taxonomy arguments as well.
621
+ <a name="url-slug"></a>
622
  </p>
623
  <p>
624
  <a href="#backtotop">Go to Top</a>
628
  If your site uses Custom/Pretty Permalinks you can use the feed slug as part of the URL. For example, the "mlafeed" feed can be accessed as:<br />&nbsp;<br />
629
  <code>http://www.example.com/mlafeed/</code><br />
630
  &nbsp;
631
+ <a name="query-slug"></a>
632
  </p>
633
  <p>
634
  <a href="#backtotop">Go to Top</a>
638
  No matter what permalink structure you use you can always specify a feed using a query argument, e.g.,<br />&nbsp;<br />
639
  <code>http://www.example.com/?feed=mlafeed</code><br />
640
  &nbsp;
641
+ <a name="tax-arguments"></a>
642
  </p>
643
  <p>
644
  <a href="#backtotop">Go to Top</a>
653
  Passing the parameter values into your data selection parameters is different for each case. For the URL case WordPress parses the URL components into the database query parameters and you can access the value as <code>[+query:attachment_tag+]</code>. If you choose the HTML query argument format the value will be available in the "request:" area, i.e., <code>[+request:attachment_tag+]</code>. I regret the confusing prefix values but that's how it works.
654
  </p>
655
  <p>
656
+ <a name="query-parms"></a>
657
  </p>
658
  <p>
659
  <a href="#backtotop">Go to Top</a>
666
  The above example would select all items "owned" by John Smith and assigned to the "abc" or "def" terms in the Att. Tags taxonomy. The corresponding data selection parameters in the "mlafeed" would be:<br />&nbsp;<br />
667
  <code>attachment_tag=[+query:attachment_tag+] author=[+request:author+]</code><br />
668
  &nbsp;<br />
669
+ </p>
670
  </div>
examples/plugins/mla-insert-fixit.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Synchronizes Media Library values to and from post/page inserted and attached images
4
  *
5
  * Adds a Tools/Insert Fixit submenu with buttons to perform the operations.
6
  *
@@ -28,19 +28,23 @@
28
  * opened on 5/18/2017 by "optic"
29
  * https://wordpress.org/support/topic/can-you-bulk-update-titles-and-add-an-incrementing-number
30
  *
 
 
 
 
31
  * @package Insert Fixit
32
- * @version 1.05
33
  */
34
 
35
  /*
36
  Plugin Name: MLA Insert Fixit
37
  Plugin URI: http://fairtradejudaica.org/media-library-assistant-a-wordpress-plugin/
38
- Description: Synchronizes Media Library values to and from post/page inserted images
39
  Author: David Lingren
40
- Version: 1.05
41
  Author URI: http://fairtradejudaica.org/our-story/staff/
42
 
43
- Copyright 2015-2017 David Lingren
44
 
45
  This program is free software; you can redistribute it and/or modify
46
  it under the terms of the GNU General Public License as published by
@@ -70,7 +74,7 @@ class Insert_Fixit {
70
  *
71
  * @var string
72
  */
73
- const CURRENT_VERSION = '1.05';
74
 
75
  /**
76
  * Slug prefix for registering and enqueueing submenu pages, style sheets and scripts
@@ -81,6 +85,26 @@ class Insert_Fixit {
81
  */
82
  const SLUG_PREFIX = 'insertfixit-';
83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  /**
85
  * WordPress version test for $wpdb->esc_like() Vs esc_sql()
86
  *
@@ -149,9 +173,7 @@ class Insert_Fixit {
149
  wp_die( 'You do not have permission to manage plugin settings.' );
150
  }
151
 
152
- /*
153
- * Extract relevant query arguments
154
- */
155
  $old_post_lower = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_post_lower' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_post_lower' ] : '';
156
  $post_lower = isset( $_REQUEST[ self::SLUG_PREFIX . 'post_lower' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'post_lower' ] : '';
157
  $old_post_upper = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_post_upper' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_post_upper' ] : '';
@@ -161,15 +183,28 @@ class Insert_Fixit {
161
  $old_attachment_upper = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_attachment_upper' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_attachment_upper' ] : '';
162
  $attachment_upper = isset( $_REQUEST[ self::SLUG_PREFIX . 'attachment_upper' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'attachment_upper' ] : '';
163
 
 
164
  $old_data_source = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_data_source' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_data_source' ] : '';
165
  $data_source = isset( $_REQUEST[ self::SLUG_PREFIX . 'data_source' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'data_source' ] : '[+alt_text+]';
166
  $old_attribute_name = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_attribute_name' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_attribute_name' ] : '';
167
  $attribute_name = isset( $_REQUEST[ self::SLUG_PREFIX . 'attribute_name' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'attribute_name' ] : 'data-pin-description';
168
 
 
 
 
 
 
 
 
 
169
  $page_library_template = isset( $_REQUEST[ self::SLUG_PREFIX . 'page_library_template' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'page_library_template' ] : '([+page_terms:category,single+]: )([+page_title+] )[+index+]';
170
 
 
171
  $parent_library_template = isset( $_REQUEST[ self::SLUG_PREFIX . 'parent_library_template' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'parent_library_template' ] : '([+parent_terms:category,single+]: )([+parent_title+] )[+index+]';
 
 
172
 
 
173
  $item_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] : 'attachment_tag';
174
  $parent_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] : 'post_tag';
175
 
@@ -183,7 +218,7 @@ class Insert_Fixit {
183
  'ALT to Item' => array( 'handler' => '_copy_alt_to_media_library',
184
  'comment' => 'Copy ALT Text from Post/Page inserts to Media Library item' ),
185
  'c01' => array( 'handler' => '', 'comment' => '<hr>' ),
186
- 'c02' => array( 'handler' => '', 'comment' => '<h3>Post/Page insert Modification</h3>' ),
187
  'c03' => array( 'handler' => '', 'comment' => '<strong>NOTE:</strong> Tools in this section use the Data Source and Attribute values below.' ),
188
  't0101' => array( 'open' => '<table><tr>' ),
189
  't0102' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">Data Source</td>' ),
@@ -205,11 +240,29 @@ class Insert_Fixit {
205
  'comment' => 'Delete an HTML attribute, e.g., data-pin-description, from Post/Page inserts' ),
206
  'c04' => array( 'handler' => '', 'comment' => '<hr>' ),
207
  'c05' => array( 'handler' => '', 'comment' => '<h3>Attach Media Library items</h3>' ),
208
- 'c06' => array( 'handler' => '', 'comment' => '<strong>NOTE:</strong> Tools in this section operate only on <strong>unattached</strong> Media Library items.<br />&nbsp;' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  'Attach Inserted In' => array( 'handler' => '_attach_inserted_in',
210
  'comment' => 'Attach items to the first Post/Page they are inserted in' ),
211
  'Attach Featured In' => array( 'handler' => '_attach_featured_in',
212
  'comment' => 'Attach items to the first Post/Page for which they are the Featured Image' ),
 
 
213
  'c07' => array( 'handler' => '', 'comment' => '<hr>' ),
214
  'c08' => array( 'handler' => '', 'comment' => '<h3>Copy Post/Page values to inserted Media Library items</h3>' ),
215
  'c09' => array( 'handler' => '', 'comment' => 'This tool finds items inserted in the body of a Post or Page and composes a new Title for the items based on values in the Post/Page, adding a sequence number (<code>[+index+]</code>) to make the Title unique. The number of inserted items is available in <code>[+found_rows+]</code>.<br>&nbsp;<br><strong>NOTE:</strong> The Post to Item Title tool uses the Template value below.' ),
@@ -223,7 +276,7 @@ class Insert_Fixit {
223
  'comment' => 'Copy "Template" value from Post/Page inserts to Media Library item' ),
224
  'c13' => array( 'handler' => '', 'comment' => '<hr>' ),
225
  'c14' => array( 'handler' => '', 'comment' => '<h3>Copy Parent values to attached Media Library items</h3>' ),
226
- 'c15' => array( 'handler' => '', 'comment' => 'This tool finds items attached to a Post or Page and composes a new Title for the items based on values in the parent Post/Page, adding a sequence number (<code>[+index+]</code>) to make the Title unique. The number of attached items is available in <code>[+found_rows+]</code>.<br>&nbsp;<br><strong>NOTE:</strong> The Parent to Item Title tool uses the Template value below.' ),
227
  't0301' => array( 'open' => '<table><tr>' ),
228
  't0302' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">Template</td>' ),
229
  't0303' => array( 'continue' => ' <td style="text-align: left">' ),
@@ -232,13 +285,35 @@ class Insert_Fixit {
232
  't0307' => array( 'close' => '</tr></table>' ),
233
  'Parent to Item Title' => array( 'handler' => '_copy_parent_values_to_items',
234
  'comment' => 'Copy "Template" value from parent Post/Page to (attached) Media Library items' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  'c16' => array( 'handler' => '', 'comment' => '<br><strong>NOTE:</strong> The Item Terms to Parent tool uses the Taxonomy name/slug values below.' ),
236
  't0401' => array( 'open' => '<table><tr>' ),
237
- 't0402' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">Item Taxonomy</td>' ),
238
  't0403' => array( 'continue' => ' <td style="text-align: left; padding-right: 15px">' ),
239
  't0405' => array( 'continue' => ' <input name="' . self::SLUG_PREFIX . 'item_taxonomy" type="text" size="12" value="' . $item_taxonomy . '">' ),
240
  't0406' => array( 'continue' => ' </td>' ),
241
- 't0407' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">Parent Taxonomy</td>' ),
242
  't0408' => array( 'continue' => ' <td style="text-align: left; padding-right: 15px">' ),
243
  't0410' => array( 'continue' => ' <input name="' . self::SLUG_PREFIX . 'parent_taxonomy" type="text" size="12" value="' . $parent_taxonomy . '">' ),
244
  't0411' => array( 'continue' => ' </td>' ),
@@ -474,7 +549,7 @@ class Insert_Fixit {
474
 
475
  $image_inserts = array();
476
  foreach ( $results as $result ) {
477
- $match_count = preg_match_all( '/\<img.*(src="([^"]*)")[^\>]*\>/', $result->post_content, $matches, PREG_OFFSET_CAPTURE );
478
  //error_log( __LINE__ . " Insert_Fixit::_build_image_inserts_cache( {$result->ID} ) \$matches = " . var_export( $matches, true ), 0 );
479
  if ( $match_count ) {
480
  $image_inserts[ $result->ID ]['content'] = $result->post_content;
@@ -521,8 +596,8 @@ class Insert_Fixit {
521
  } // _build_image_inserts_cache
522
 
523
  /**
524
- * Array of attachment IDs giving Features Image post/page IDs:
525
- * attachment ID => array( post/page ID )
526
  *
527
  * @since 1.01
528
  *
@@ -537,10 +612,11 @@ class Insert_Fixit {
537
  *
538
  * @param boolean $use_cache True to use an existing cache, false to force rebuild
539
  * @param boolean $unattached_only True to index only unattached items, false to index all items
 
540
  *
541
  * @return string Cache or rebuild results
542
  */
543
- private static function _build_featured_objects_cache( $use_cache = false, $unattached_only = false ) {
544
  global $wpdb;
545
 
546
  if ( $use_cache ) {
@@ -569,7 +645,7 @@ class Insert_Fixit {
569
  }
570
 
571
  $query = array();
572
- $query[] = "SELECT p.ID, m.post_id FROM {$wpdb->postmeta} AS m INNER JOIN";
573
 
574
  $where = str_replace( '%', '%%', wp_post_mime_type_where( 'image', '' ) );
575
 
@@ -577,7 +653,7 @@ class Insert_Fixit {
577
  $where .= ' AND post_parent = 0';
578
  }
579
 
580
- $query[] = "( SELECT ID FROM {$wpdb->posts} WHERE ( ( post_type = 'attachment' ) {$where}";
581
  $query[] = "AND ( ID >= {$lower_bound} ) AND ( ID <= {$upper_bound} ) ) ORDER BY ID ) AS p ON m.meta_value = p.ID";
582
  $query[] = "WHERE m.meta_key = '_thumbnail_id'";
583
  $query = implode( ' ', $query );
@@ -588,7 +664,17 @@ class Insert_Fixit {
588
  $references = array();
589
  if ( is_array( $results ) ) {
590
  foreach ( $results as $result ) {
591
- $references[ $result->ID ][] = $result->post_id;
 
 
 
 
 
 
 
 
 
 
592
  }
593
  }
594
 
@@ -600,9 +686,91 @@ class Insert_Fixit {
600
  return 'Featured objects cache refreshed with ' . count( self::$featured_objects ) . ' attachment elements.';
601
  } // _build_featured_objects_cache
602
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  /**
604
  * Array of attachment IDs giving inserted image files:
605
- * attachment ID => array( post/page ID => array( URLs to inserted file ) )
606
  *
607
  * @since 1.00
608
  *
@@ -617,10 +785,12 @@ class Insert_Fixit {
617
  *
618
  * @param boolean $use_cache True to use an existing cache, false to force rebuild
619
  * @param boolean $unattached_only True to index only unattached items, false to index all items
 
 
620
  *
621
  * @return string Cache or rebuild results
622
  */
623
- private static function _build_image_objects_cache( $use_cache = false, $unattached_only = false ) {
624
  global $wpdb;
625
 
626
  if ( $use_cache ) {
@@ -654,13 +824,11 @@ class Insert_Fixit {
654
  $where .= ' AND post_parent = 0';
655
  }
656
 
657
- $query = sprintf( 'SELECT ID FROM %1$s WHERE ( ( post_type = \'attachment\' ) %2$s AND ( ID >= %3$d ) AND ( ID <= %4$d ) ) ORDER BY ID', $wpdb->posts, $where, $lower_bound, $upper_bound );
658
  $results = $wpdb->get_results( $query );
659
  //error_log( __LINE__ . ' Insert_Fixit::_build_image_objects_cache() $results = ' . var_export( $results, true ), 0 );
660
 
661
- /*
662
- * Load the image_inserts array
663
- */
664
  self::_build_image_inserts_cache( true );
665
 
666
  $references = array();
@@ -675,7 +843,8 @@ class Insert_Fixit {
675
 
676
  $pathinfo = pathinfo( $base_file );
677
  if ( ( ! isset( $pathinfo['dirname'] ) ) || '.' == $pathinfo['dirname'] ) {
678
- $path = '/';
 
679
  } else {
680
  $path = $pathinfo['dirname'] . '/';
681
  }
@@ -688,17 +857,20 @@ class Insert_Fixit {
688
  }
689
 
690
  $sizes = isset( $attachment_metadata['sizes'] ) ? $attachment_metadata['sizes'] : NULL;
 
691
  if ( ! empty( $sizes ) && is_array( $sizes ) ) {
692
- /* Using the path and name as the array key ensures each name is added only once */
693
  foreach ( $sizes as $size => $size_info ) {
694
  $files[ $path . $size_info['file'] ] = $path . $size_info['file'];
695
  }
696
  }
697
 
698
  if ( ! empty( $base_file ) ) {
 
699
  $files[ $base_file ] = $base_file;
700
  }
701
  //error_log( __LINE__ . " Insert_Fixit::_array_image_inserts_references( {$result->ID} ) files = " . var_export( $files, true ), 0 );
 
702
  /*
703
  * inserts Array of specific files (i.e., sizes) found in one or more posts/pages
704
  * as an image (<img>). The array key is the path and file name.
@@ -715,6 +887,16 @@ class Insert_Fixit {
715
  } // foreach file
716
 
717
  if ( ! empty( $inserts ) ) {
 
 
 
 
 
 
 
 
 
 
718
  $references[ $result->ID ] = $inserts;
719
  }
720
  } // each result
@@ -1076,7 +1258,7 @@ class Insert_Fixit {
1076
  delete_transient( self::SLUG_PREFIX . 'image_objects' );
1077
  }
1078
 
1079
- return "<br>ALT to Item matched {$image_inserts} posts/pages to {$image_objects} attachments and updated {$updated_attachments} Media Library items. There were {$errors} error(s).\n";
1080
  } // _copy_alt_to_media_library
1081
 
1082
  /**
@@ -1117,15 +1299,11 @@ class Insert_Fixit {
1117
  * @return string HTML markup for results/messages
1118
  */
1119
  private static function _attach_inserted_in() {
1120
- /*
1121
- * Load the image_inserts array
1122
- */
1123
  self::_build_image_inserts_cache( true );
1124
 
1125
- /*
1126
- * Load the image_objects array
1127
- */
1128
- self::_build_image_objects_cache( false, true );
1129
 
1130
  // Initialize statistics
1131
  $image_inserts = count( self::$image_inserts );
@@ -1135,19 +1313,27 @@ class Insert_Fixit {
1135
  $errors = 0;
1136
 
1137
  foreach ( self::$image_objects as $attachment => $posts ) {
1138
- $inserted_in += count( $posts );
1139
  //error_log( __LINE__ . " _attach_inserted_in( {$attachment} ) posts = " . var_export( $posts, true ), 0 );
 
 
 
 
1140
  $keys = array_keys( $posts );
1141
- $args = array( 'ID' => $attachment, 'post_parent' => $keys[0] );
 
 
 
1142
  //error_log( __LINE__ . " _attach_inserted_in( {$attachment} ) args = " . var_export( $args, true ), 0 );
1143
- if ( wp_update_post( $args ) ) {
1144
- $updated_attachments++;
1145
- } else {
1146
- $errors++;
 
1147
  }
1148
  }
1149
 
1150
- return "<br>Attach Inserted In matched {$image_inserts} posts/pages with {$inserted_in} inserts to {$image_objects} unattached items and updated {$updated_attachments} Media Library items. There were {$errors} error(s).\n";
 
1151
  } // _attach_inserted_in
1152
 
1153
  /**
@@ -1158,10 +1344,8 @@ class Insert_Fixit {
1158
  * @return string HTML markup for results/messages
1159
  */
1160
  private static function _attach_featured_in() {
1161
- /*
1162
- * Load the featured_objects array
1163
- */
1164
- self::_build_featured_objects_cache( false, true );
1165
 
1166
  // Initialize statistics
1167
  $featured_objects = count( self::$featured_objects );
@@ -1170,19 +1354,86 @@ class Insert_Fixit {
1170
  $errors = 0;
1171
 
1172
  foreach ( self::$featured_objects as $attachment => $posts ) {
 
 
 
1173
  $featured_in += count( $posts );
1174
 
1175
- $args = array( 'ID' => $attachment, 'post_parent' => reset( $posts ) );
1176
- if ( wp_update_post( $args ) ) {
1177
- $updates++;
1178
- } else {
1179
- $errors++;
 
 
1180
  }
1181
  }
1182
 
1183
- return "<br>Attach Featured In found {$featured_objects} unattached items featured in {$featured_in} posts/pages and made {$updates} attachments. There were {$errors} error(s).\n";
 
1184
  } // _attach_featured_in
1185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1186
  /**
1187
  * Copy Post/Page values from inserts to Media Library item
1188
  *
@@ -1253,7 +1504,7 @@ class Insert_Fixit {
1253
  delete_transient( self::SLUG_PREFIX . 'image_objects' );
1254
  }
1255
 
1256
- return "<br>Post to Item Title matched {$image_inserts} posts/pages to {$image_objects} attachments and updated {$updated_attachments} Media Library items. There were {$errors} error(s).\n";
1257
  } // _copy_post_values_to_items
1258
 
1259
  /**
@@ -1307,9 +1558,158 @@ class Insert_Fixit {
1307
  } // foreach reference
1308
  } // foreach attachment
1309
 
1310
- return "<br>Parent to Item Title matched {$attached_parents} posts/pages to {$attached_items} attachments and updated {$updated_attachments} Media Library items. There were {$errors} error(s).\n";
1311
  } // _copy_parent_values_to_items
1312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1313
  /**
1314
  * Copy assigned terms from attached items to the parent post/page
1315
  *
@@ -1323,7 +1723,7 @@ class Insert_Fixit {
1323
  $item_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] : 'attachment_tag';
1324
  $parent_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] : 'post_tag';
1325
  $append = 'add' === ( isset( $_REQUEST[ self::SLUG_PREFIX . 'add_replace' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'add_replace' ] : 'add' );
1326
-
1327
  $attached_parents = count( self::$attached_items );
1328
  $attached_items = 0;
1329
  $updated_parents = 0;
@@ -1387,7 +1787,7 @@ class Insert_Fixit {
1387
  }
1388
  } // foreach post
1389
 
1390
- return "<br>Item Terms to Parent matched {$attached_parents} posts/pages to {$attached_items} attachments and updated {$updated_parents} parent posts/pages. There were {$skipped} skipped parents and {$errors} error(s).\n";
1391
  } // _copy_item_terms_to_parent
1392
 
1393
  /**
@@ -1399,6 +1799,7 @@ class Insert_Fixit {
1399
  */
1400
  private static function _refresh_caches() {
1401
  $results = '<br>' . self::_build_image_inserts_cache();
 
1402
  return $results . '<br>' . self::_build_image_objects_cache() . "\n";
1403
  } // _refresh_caches
1404
  } //Insert_Fixit
1
  <?php
2
  /**
3
+ * Synchronizes Media Library values to and from post/page inserted/featured/attached images
4
  *
5
  * Adds a Tools/Insert Fixit submenu with buttons to perform the operations.
6
  *
28
  * opened on 5/18/2017 by "optic"
29
  * https://wordpress.org/support/topic/can-you-bulk-update-titles-and-add-an-incrementing-number
30
  *
31
+ * Enhanced for support topic "mla shortcode to show images of all posts of a WP category"
32
+ * opened on 3/01/2018 by "diesel33"
33
+ * https://wordpress.org/support/topic/mla-shortcode-to-show-images-of-all-posts-of-a-wp-category
34
+ *
35
  * @package Insert Fixit
36
+ * @version 1.09
37
  */
38
 
39
  /*
40
  Plugin Name: MLA Insert Fixit
41
  Plugin URI: http://fairtradejudaica.org/media-library-assistant-a-wordpress-plugin/
42
+ Description: Synchronizes Media Library values to and from post/page inserted/featured/attached images
43
  Author: David Lingren
44
+ Version: 1.09
45
  Author URI: http://fairtradejudaica.org/our-story/staff/
46
 
47
+ Copyright 2015-2018 David Lingren
48
 
49
  This program is free software; you can redistribute it and/or modify
50
  it under the terms of the GNU General Public License as published by
74
  *
75
  * @var string
76
  */
77
+ const CURRENT_VERSION = '1.09';
78
 
79
  /**
80
  * Slug prefix for registering and enqueueing submenu pages, style sheets and scripts
85
  */
86
  const SLUG_PREFIX = 'insertfixit-';
87
 
88
+ /**
89
+ * Make "Attach" tools unconditional, i.e., overwrite existing parent values
90
+ *
91
+ * @since 1.06
92
+ *
93
+ * @var boolean
94
+ */
95
+ private static $attach_all = false;
96
+ const INPUT_ATTACH_ALL = 'attach-all';
97
+
98
+ /**
99
+ * Make "Attach" tools unconditional, i.e., overwrite existing parent values
100
+ *
101
+ * @since 1.06
102
+ *
103
+ * @var boolean
104
+ */
105
+ private static $reverse_sort = false;
106
+ const INPUT_REVERSE_SORT = 'reverse-sort';
107
+
108
  /**
109
  * WordPress version test for $wpdb->esc_like() Vs esc_sql()
110
  *
173
  wp_die( 'You do not have permission to manage plugin settings.' );
174
  }
175
 
176
+ // Extract relevant query arguments - post/page and item restrictions
 
 
177
  $old_post_lower = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_post_lower' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_post_lower' ] : '';
178
  $post_lower = isset( $_REQUEST[ self::SLUG_PREFIX . 'post_lower' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'post_lower' ] : '';
179
  $old_post_upper = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_post_upper' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_post_upper' ] : '';
183
  $old_attachment_upper = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_attachment_upper' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_attachment_upper' ] : '';
184
  $attachment_upper = isset( $_REQUEST[ self::SLUG_PREFIX . 'attachment_upper' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'attachment_upper' ] : '';
185
 
186
+ // Post/Page Insert Image Tag Attribute Modification
187
  $old_data_source = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_data_source' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_data_source' ] : '';
188
  $data_source = isset( $_REQUEST[ self::SLUG_PREFIX . 'data_source' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'data_source' ] : '[+alt_text+]';
189
  $old_attribute_name = isset( $_REQUEST[ self::SLUG_PREFIX . 'old_attribute_name' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'old_attribute_name' ] : '';
190
  $attribute_name = isset( $_REQUEST[ self::SLUG_PREFIX . 'attribute_name' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'attribute_name' ] : 'data-pin-description';
191
 
192
+ // Attach Media Library items
193
+ self::$attach_all = isset( $_REQUEST[ self::SLUG_PREFIX . self::INPUT_ATTACH_ALL ] ) ? true : false;
194
+ $attach_all_attr = self::$attach_all ? ' checked="checked" ' : ' ';
195
+ self::$reverse_sort = isset( $_REQUEST[ self::SLUG_PREFIX . 'first_item' ] ) ? 'highest' === $_REQUEST[ self::SLUG_PREFIX . 'first_item' ] : self::$reverse_sort;
196
+ $lowest_attr = self::$reverse_sort ? ' ' : ' selected="selected" ';
197
+ $highest_attr = self::$reverse_sort ? ' selected="selected" ' : ' ';
198
+
199
+ // Copy Post/Page values to inserted Media Library items
200
  $page_library_template = isset( $_REQUEST[ self::SLUG_PREFIX . 'page_library_template' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'page_library_template' ] : '([+page_terms:category,single+]: )([+page_title+] )[+index+]';
201
 
202
+ // Copy Parent values to attached Media Library items
203
  $parent_library_template = isset( $_REQUEST[ self::SLUG_PREFIX . 'parent_library_template' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'parent_library_template' ] : '([+parent_terms:category,single+]: )([+parent_title+] )[+index+]';
204
+ $from_parent_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'from_parent_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'from_parent_taxonomy' ] : 'category';
205
+ $to_item_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'to_item_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'to_item_taxonomy' ] : 'attachment_category';
206
 
207
+ // Copy attached Media Library item values to Parent Post/Page
208
  $item_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] : 'attachment_tag';
209
  $parent_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] : 'post_tag';
210
 
218
  'ALT to Item' => array( 'handler' => '_copy_alt_to_media_library',
219
  'comment' => 'Copy ALT Text from Post/Page inserts to Media Library item' ),
220
  'c01' => array( 'handler' => '', 'comment' => '<hr>' ),
221
+ 'c02' => array( 'handler' => '', 'comment' => '<h3>Post/Page Insert Image Tag Attribute Modification</h3>' ),
222
  'c03' => array( 'handler' => '', 'comment' => '<strong>NOTE:</strong> Tools in this section use the Data Source and Attribute values below.' ),
223
  't0101' => array( 'open' => '<table><tr>' ),
224
  't0102' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">Data Source</td>' ),
240
  'comment' => 'Delete an HTML attribute, e.g., data-pin-description, from Post/Page inserts' ),
241
  'c04' => array( 'handler' => '', 'comment' => '<hr>' ),
242
  'c05' => array( 'handler' => '', 'comment' => '<h3>Attach Media Library items</h3>' ),
243
+ 'c06' => array( 'handler' => '', 'comment' => '<strong>NOTE:</strong> By default, tools in this section operate only on <strong>unattached</strong> Media Library items.<br />&nbsp;' ),
244
+ 't1201' => array( 'open' => '<table><tr>' ),
245
+ 't1202' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle"><input name="' . self::SLUG_PREFIX . self::INPUT_ATTACH_ALL . '" type="checkbox"' . $attach_all_attr . 'value="' . self::INPUT_ATTACH_ALL . '"></td>' ),
246
+ 't1203' => array( 'continue' => ' <td style="text-align: left; padding-right: 5px" valign="middle">Replace existing parent</td>' ),
247
+ 't1204' => array( 'continue' => '</tr><tr>' ),
248
+ 't1205' => array( 'continue' => ' <td>&nbsp;</td><td >Check the box above to assign/reassign ALL items, not just <strong>unattached</strong> items.<br />&nbsp;</td>' ),
249
+ 't1206' => array( 'continue' => '</tr><tr>' ),
250
+ 't1207' => array( 'continue' => ' <td>&nbsp;</td>' ),
251
+ 't1208' => array( 'continue' => ' <td>' ),
252
+ 't1209' => array( 'continue' => ' <select name="' . self::SLUG_PREFIX . 'first_item">' ),
253
+ 't1210' => array( 'continue' => ' <option' . $lowest_attr . 'value="lowest">Oldest (lowest ID)</option>' ),
254
+ 't1211' => array( 'continue' => ' <option' . $highest_attr . 'value="highest">Newest (highest ID)</option>' ),
255
+ 't1212' => array( 'continue' => ' </select>' ),
256
+ 't1213' => array( 'continue' => ' </td>' ),
257
+ 't1214' => array( 'continue' => '</tr><tr>' ),
258
+ 't1215' => array( 'continue' => ' <td>&nbsp;</td><td >Select the definition of "first" item from the dropdown above.</td>' ),
259
+ 't1216' => array( 'close' => '</tr></table>&nbsp;<br>' ),
260
  'Attach Inserted In' => array( 'handler' => '_attach_inserted_in',
261
  'comment' => 'Attach items to the first Post/Page they are inserted in' ),
262
  'Attach Featured In' => array( 'handler' => '_attach_featured_in',
263
  'comment' => 'Attach items to the first Post/Page for which they are the Featured Image' ),
264
+ 'Attach Referenced In' => array( 'handler' => '_attach_referenced_in',
265
+ 'comment' => 'Attach items to the first Post/Page where they appear in a "class wp-image-" or "ids=" element' ),
266
  'c07' => array( 'handler' => '', 'comment' => '<hr>' ),
267
  'c08' => array( 'handler' => '', 'comment' => '<h3>Copy Post/Page values to inserted Media Library items</h3>' ),
268
  'c09' => array( 'handler' => '', 'comment' => 'This tool finds items inserted in the body of a Post or Page and composes a new Title for the items based on values in the Post/Page, adding a sequence number (<code>[+index+]</code>) to make the Title unique. The number of inserted items is available in <code>[+found_rows+]</code>.<br>&nbsp;<br><strong>NOTE:</strong> The Post to Item Title tool uses the Template value below.' ),
276
  'comment' => 'Copy "Template" value from Post/Page inserts to Media Library item' ),
277
  'c13' => array( 'handler' => '', 'comment' => '<hr>' ),
278
  'c14' => array( 'handler' => '', 'comment' => '<h3>Copy Parent values to attached Media Library items</h3>' ),
279
+ 'c15' => array( 'handler' => '', 'comment' => 'The "Parent to Item Title" tool finds items attached to a Post or Page and composes a new Title for the items based on values in the parent Post/Page, adding a sequence number (<code>[+index+]</code>) to make the Title unique. The number of attached items is available in <code>[+found_rows+]</code>.<br>&nbsp;<br><strong>NOTE:</strong> The Parent to Item Title tool uses the Template value below.' ),
280
  't0301' => array( 'open' => '<table><tr>' ),
281
  't0302' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">Template</td>' ),
282
  't0303' => array( 'continue' => ' <td style="text-align: left">' ),
285
  't0307' => array( 'close' => '</tr></table>' ),
286
  'Parent to Item Title' => array( 'handler' => '_copy_parent_values_to_items',
287
  'comment' => 'Copy "Template" value from parent Post/Page to (attached) Media Library items' ),
288
+ 'c39' => array( 'handler' => '', 'comment' => '&nbsp;<br />The "Parent Terms to Item" tool finds items attached to a Post or Page and copies terms assigned to the parent to the items.<br><strong>NOTE:</strong> The Parent Terms to Item tool uses the Taxonomy name/slug values below.' ),
289
+ 't1401' => array( 'open' => '<table><tr>' ),
290
+ 't1407' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">from Parent Taxonomy</td>' ),
291
+ 't1408' => array( 'continue' => ' <td style="text-align: left; padding-right: 15px">' ),
292
+ 't1410' => array( 'continue' => ' <input name="' . self::SLUG_PREFIX . 'from_parent_taxonomy" type="text" size="12" value="' . $from_parent_taxonomy . '">' ),
293
+ 't1411' => array( 'continue' => ' </td>' ),
294
+ 't1402' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">to Item Taxonomy</td>' ),
295
+ 't1403' => array( 'continue' => ' <td style="text-align: left; padding-right: 15px">' ),
296
+ 't1405' => array( 'continue' => ' <input name="' . self::SLUG_PREFIX . 'to_item_taxonomy" type="text" size="12" value="' . $to_item_taxonomy . '">' ),
297
+ 't1406' => array( 'continue' => ' </td>' ),
298
+ 't1412' => array( 'continue' => ' <td style="text-align: left;">' ),
299
+ 't1413' => array( 'continue' => ' <select name="' . self::SLUG_PREFIX . 'item_add_replace">' ),
300
+ 't1414' => array( 'continue' => ' <option selected="selected" value="add">Add</option>' ),
301
+ 't1415' => array( 'continue' => ' <option value="replace">Replace</option>' ),
302
+ 't1416' => array( 'continue' => ' </select>' ),
303
+ 't1417' => array( 'continue' => ' </td>' ),
304
+ 't1418' => array( 'close' => '</tr></table>' ),
305
+ 'Parent Terms to Item' => array( 'handler' => '_copy_parent_terms_to_items',
306
+ 'comment' => 'Copy assigned terms from the parent Post/Page to attached items' ),
307
+ 'c17' => array( 'handler' => '', 'comment' => '<hr>' ),
308
+ 'c18' => array( 'handler' => '', 'comment' => '<h3>Copy attached Media Library item values to Parent Post/Page</h3>' ),
309
+ 'c19' => array( 'handler' => '', 'comment' => 'This tool finds items attached to a Post or Page and copies terms assigned to the items to the parent.' ),
310
  'c16' => array( 'handler' => '', 'comment' => '<br><strong>NOTE:</strong> The Item Terms to Parent tool uses the Taxonomy name/slug values below.' ),
311
  't0401' => array( 'open' => '<table><tr>' ),
312
+ 't0402' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">from Item Taxonomy</td>' ),
313
  't0403' => array( 'continue' => ' <td style="text-align: left; padding-right: 15px">' ),
314
  't0405' => array( 'continue' => ' <input name="' . self::SLUG_PREFIX . 'item_taxonomy" type="text" size="12" value="' . $item_taxonomy . '">' ),
315
  't0406' => array( 'continue' => ' </td>' ),
316
+ 't0407' => array( 'continue' => ' <td style="text-align: right; padding-right: 5px" valign="middle">to Parent Taxonomy</td>' ),
317
  't0408' => array( 'continue' => ' <td style="text-align: left; padding-right: 15px">' ),
318
  't0410' => array( 'continue' => ' <input name="' . self::SLUG_PREFIX . 'parent_taxonomy" type="text" size="12" value="' . $parent_taxonomy . '">' ),
319
  't0411' => array( 'continue' => ' </td>' ),
549
 
550
  $image_inserts = array();
551
  foreach ( $results as $result ) {
552
+ $match_count = preg_match_all( '/\<img[^src]*(src="([^"]*)")[^\>]*\>/', $result->post_content, $matches, PREG_OFFSET_CAPTURE );
553
  //error_log( __LINE__ . " Insert_Fixit::_build_image_inserts_cache( {$result->ID} ) \$matches = " . var_export( $matches, true ), 0 );
554
  if ( $match_count ) {
555
  $image_inserts[ $result->ID ]['content'] = $result->post_content;
596
  } // _build_image_inserts_cache
597
 
598
  /**
599
+ * Array of attachment IDs giving post_parent and Featured Image post/page IDs:
600
+ * attachment ID => array( 'parent' => post_parent, post/page IDs => post/page IDs )
601
  *
602
  * @since 1.01
603
  *
612
  *
613
  * @param boolean $use_cache True to use an existing cache, false to force rebuild
614
  * @param boolean $unattached_only True to index only unattached items, false to index all items
615
+ * @param boolean $reverse_sort True to sort from highest to lowest value, false to sort lowest to highest
616
  *
617
  * @return string Cache or rebuild results
618
  */
619
+ private static function _build_featured_objects_cache( $use_cache = false, $unattached_only = false, $reverse_sort ) {
620
  global $wpdb;
621
 
622
  if ( $use_cache ) {
645
  }
646
 
647
  $query = array();
648
+ $query[] = "SELECT p.ID, p.post_parent, m.post_id FROM {$wpdb->postmeta} AS m INNER JOIN";
649
 
650
  $where = str_replace( '%', '%%', wp_post_mime_type_where( 'image', '' ) );
651
 
653
  $where .= ' AND post_parent = 0';
654
  }
655
 
656
+ $query[] = "( SELECT ID, post_parent FROM {$wpdb->posts} WHERE ( ( post_type = 'attachment' ) {$where}";
657
  $query[] = "AND ( ID >= {$lower_bound} ) AND ( ID <= {$upper_bound} ) ) ORDER BY ID ) AS p ON m.meta_value = p.ID";
658
  $query[] = "WHERE m.meta_key = '_thumbnail_id'";
659
  $query = implode( ' ', $query );
664
  $references = array();
665
  if ( is_array( $results ) ) {
666
  foreach ( $results as $result ) {
667
+ $references[ $result->ID ]['parent'] = $result->post_parent;
668
+ $id = absint( $result->post_id );
669
+ $references[ $result->ID ][ $id ] = $id;
670
+ }
671
+
672
+ foreach( $references as $id => $result ) {
673
+ if ( $reverse_sort ) {
674
+ krsort( $references[ $id ] );
675
+ } else {
676
+ ksort( $references[ $id ] );
677
+ }
678
  }
679
  }
680
 
686
  return 'Featured objects cache refreshed with ' . count( self::$featured_objects ) . ' attachment elements.';
687
  } // _build_featured_objects_cache
688
 
689
+ /**
690
+ * Array of attachment IDs giving posts/pages their ID appears in
691
+ * attachment ID => array( 'parent' => post_parent, post/page IDs => post/page IDs )
692
+ *
693
+ * @since 1.08
694
+ *
695
+ * @var array
696
+ */
697
+ private static $item_references = array();
698
+
699
+ /**
700
+ * Compile array of item IDs referenced in posts/pages by "wp-image-" or "ids="
701
+ *
702
+ * @since 1.00
703
+ *
704
+ * @param boolean $use_cache True to use an existing cache, false to force rebuild
705
+ *
706
+ * @return string Cache or rebuild results
707
+ */
708
+ private static function _build_item_references_cache( $use_cache = false ) {
709
+ global $wpdb;
710
+
711
+ if ( $use_cache ) {
712
+ self::$item_references = get_transient( self::SLUG_PREFIX . 'item_references' );
713
+ if ( is_array( self::$item_references ) ) {
714
+ //error_log( __LINE__ . " Insert_Fixit::_build_item_references_cache using cached self::\$item_references " . var_export( self::$item_references, true ), 0 );
715
+ return 'Using cached item references with ' . count( self::$item_references ) . ' attachment elements.';
716
+ }
717
+ }
718
+
719
+ $return = delete_transient( self::SLUG_PREFIX . 'item_references' );
720
+ //error_log( __LINE__ . " Insert_Fixit::_build_item_references_cache delete_transient return = " . var_export( $return, true ), 0 );
721
+
722
+ if ( ! empty( $_REQUEST[ self::SLUG_PREFIX . 'post_lower' ] ) ) {
723
+ $lower_bound = (integer) $_REQUEST[ self::SLUG_PREFIX . 'post_lower' ];
724
+ } else {
725
+ $lower_bound = 0;
726
+ }
727
+
728
+ if ( ! empty( $_REQUEST[ self::SLUG_PREFIX . 'post_upper' ] ) ) {
729
+ $upper_bound = (integer) $_REQUEST[ self::SLUG_PREFIX . 'post_upper' ];
730
+ } elseif ( $lower_bound ) {
731
+ $upper_bound = $lower_bound;
732
+ } else {
733
+ $upper_bound = 0x7FFFFFFF;
734
+ }
735
+
736
+ $query = sprintf( 'SELECT ID, post_content FROM %1$s WHERE ( post_type IN ( \'post\', \'page\' ) AND ( post_status = \'publish\' ) AND ( ID >= %2$d ) AND ( ID <= %3$d ) AND ( ( post_content LIKE \'%4$s\' ) OR ( post_content LIKE \'%5$s\' ) ) ) ORDER BY ID', $wpdb->posts, $lower_bound, $upper_bound, '%wp-image-%', '%ids=%' );
737
+ $results = $wpdb->get_results( $query );
738
+ //error_log( __LINE__ . ' Insert_Fixit::_build_item_references_cache() $results = ' . var_export( $results, true ), 0 );
739
+
740
+ self::$item_references = array();
741
+ foreach ( $results as $result ) {
742
+ // Find the class="wp-image-" references
743
+ $match_count = preg_match_all( '/wp-image-([0-9]{1,6})/', $result->post_content, $matches );
744
+ //error_log( __LINE__ . " Insert_Fixit::_build_item_references_cache( {$result->ID} ) \$matches = " . var_export( $matches, true ), 0 );
745
+ if ( $match_count ) {
746
+ foreach ( $matches[1] as $match ) {
747
+ self::$item_references[ absint( $match ) ][ absint( $result->ID ) ] = absint( $result->ID );
748
+ }
749
+ }
750
+
751
+ // Find the ids= references
752
+ $match_count = preg_match_all( '/(\[gallery|\[mla_gallery)[^\]]*ids=([0-9,\\\'\"]*)/', $result->post_content, $matches );
753
+ //error_log( __LINE__ . " Insert_Fixit::_build_item_references_cache( {$result->ID} ) \$matches = " . var_export( $matches, true ), 0 );
754
+ if ( $match_count ) {
755
+ foreach ( $matches[2] as $match ) {
756
+ $items = explode( ',', trim( $match, '\'"' ) );
757
+ foreach ( $items as $item ) {
758
+ self::$item_references[ absint( $item ) ][ absint( $result->ID ) ] = absint( $result->ID );
759
+ }
760
+ }
761
+ }
762
+ }
763
+
764
+ $return = set_transient( self::SLUG_PREFIX . 'item_references', self::$item_references, 900 ); // fifteen minutes
765
+ //error_log( __LINE__ . " Insert_Fixit::_build_item_references_cache set_transient return = " . var_export( $return, true ), 0 );
766
+ //error_log( __LINE__ . " Insert_Fixit::_build_item_references_cache item_references " . var_export( self::$item_references, true ), 0 );
767
+
768
+ return 'Item references cache refreshed with ' . count( self::$item_references ) . ' items referenced in ' . count( $results ) . ' post/page elements.';
769
+ } // _build_item_references_cache
770
+
771
  /**
772
  * Array of attachment IDs giving inserted image files:
773
+ * attachment ID => array( 'parent' => post_parent, post/page IDs => array( URLs to inserted file ) )
774
  *
775
  * @since 1.00
776
  *
785
  *
786
  * @param boolean $use_cache True to use an existing cache, false to force rebuild
787
  * @param boolean $unattached_only True to index only unattached items, false to index all items
788
+ * @param boolean $reverse_sort True to sort from highest to lowest value, false to sort lowest to highest
789
+ * @param boolean $add_parent True to add post_parent to inserts array, false to omit
790
  *
791
  * @return string Cache or rebuild results
792
  */
793
+ private static function _build_image_objects_cache( $use_cache = false, $unattached_only = false, $reverse_sort = false, $add_parent = false ) {
794
  global $wpdb;
795
 
796
  if ( $use_cache ) {
824
  $where .= ' AND post_parent = 0';
825
  }
826
 
827
+ $query = sprintf( 'SELECT ID, post_parent FROM %1$s WHERE ( ( post_type = \'attachment\' ) %2$s AND ( ID >= %3$d ) AND ( ID <= %4$d ) ) ORDER BY ID', $wpdb->posts, $where, $lower_bound, $upper_bound );
828
  $results = $wpdb->get_results( $query );
829
  //error_log( __LINE__ . ' Insert_Fixit::_build_image_objects_cache() $results = ' . var_export( $results, true ), 0 );
830
 
831
+ // Load the image_inserts array
 
 
832
  self::_build_image_inserts_cache( true );
833
 
834
  $references = array();
843
 
844
  $pathinfo = pathinfo( $base_file );
845
  if ( ( ! isset( $pathinfo['dirname'] ) ) || '.' == $pathinfo['dirname'] ) {
846
+ // $path = '/';
847
+ $path = '';
848
  } else {
849
  $path = $pathinfo['dirname'] . '/';
850
  }
857
  }
858
 
859
  $sizes = isset( $attachment_metadata['sizes'] ) ? $attachment_metadata['sizes'] : NULL;
860
+ //error_log( __LINE__ . " Insert_Fixit::_array_image_inserts_references( {$result->ID} ) sizes = " . var_export( $sizes, true ), 0 );
861
  if ( ! empty( $sizes ) && is_array( $sizes ) ) {
862
+ // Using the path and name as the array key ensures each name is added only once
863
  foreach ( $sizes as $size => $size_info ) {
864
  $files[ $path . $size_info['file'] ] = $path . $size_info['file'];
865
  }
866
  }
867
 
868
  if ( ! empty( $base_file ) ) {
869
+ //$files[ $path . $base_file ] = $path . $base_file;
870
  $files[ $base_file ] = $base_file;
871
  }
872
  //error_log( __LINE__ . " Insert_Fixit::_array_image_inserts_references( {$result->ID} ) files = " . var_export( $files, true ), 0 );
873
+
874
  /*
875
  * inserts Array of specific files (i.e., sizes) found in one or more posts/pages
876
  * as an image (<img>). The array key is the path and file name.
887
  } // foreach file
888
 
889
  if ( ! empty( $inserts ) ) {
890
+ if ( $reverse_sort ) {
891
+ krsort( $inserts );
892
+ } else {
893
+ ksort( $inserts );
894
+ }
895
+
896
+ if ( $add_parent ) {
897
+ $inserts['parent'] = $result->post_parent;
898
+ }
899
+
900
  $references[ $result->ID ] = $inserts;
901
  }
902
  } // each result
1258
  delete_transient( self::SLUG_PREFIX . 'image_objects' );
1259
  }
1260
 
1261
+ return "<br>ALT to Item matched {$image_inserts} posts/pages to {$image_objects} items and updated {$updated_attachments} items. There were {$errors} error(s).\n";
1262
  } // _copy_alt_to_media_library
1263
 
1264
  /**
1299
  * @return string HTML markup for results/messages
1300
  */
1301
  private static function _attach_inserted_in() {
1302
+ // Load the image_inserts array
 
 
1303
  self::_build_image_inserts_cache( true );
1304
 
1305
+ // Load the image_objects array
1306
+ self::_build_image_objects_cache( false, !self::$attach_all, self::$reverse_sort, true );
 
 
1307
 
1308
  // Initialize statistics
1309
  $image_inserts = count( self::$image_inserts );
1313
  $errors = 0;
1314
 
1315
  foreach ( self::$image_objects as $attachment => $posts ) {
 
1316
  //error_log( __LINE__ . " _attach_inserted_in( {$attachment} ) posts = " . var_export( $posts, true ), 0 );
1317
+ $post_parent = $posts['parent'];
1318
+ unset( $posts['parent'] );
1319
+ $inserted_in += count( $posts );
1320
+
1321
  $keys = array_keys( $posts );
1322
+ //error_log( __LINE__ . " _attach_inserted_in( {$attachment} ) keys = " . var_export( $keys, true ), 0 );
1323
+ $candidate = $keys[0];
1324
+ if ( $candidate != $post_parent ) {
1325
+ $args = array( 'ID' => $attachment, 'post_parent' => $keys[0] );
1326
  //error_log( __LINE__ . " _attach_inserted_in( {$attachment} ) args = " . var_export( $args, true ), 0 );
1327
+ if ( wp_update_post( $args ) ) {
1328
+ $updated_attachments++;
1329
+ } else {
1330
+ $errors++;
1331
+ }
1332
  }
1333
  }
1334
 
1335
+ $unattached = self::$attach_all ? '' : 'unattached';
1336
+ return "<br>Attach Inserted In matched {$image_inserts} posts/pages with {$inserted_in} inserts to {$image_objects} {$unattached} items and updated {$updated_attachments} items. There were {$errors} error(s).\n";
1337
  } // _attach_inserted_in
1338
 
1339
  /**
1344
  * @return string HTML markup for results/messages
1345
  */
1346
  private static function _attach_featured_in() {
1347
+ // Load the featured_objects array
1348
+ self::_build_featured_objects_cache( false, !self::$attach_all, self::$reverse_sort );
 
 
1349
 
1350
  // Initialize statistics
1351
  $featured_objects = count( self::$featured_objects );
1354
  $errors = 0;
1355
 
1356
  foreach ( self::$featured_objects as $attachment => $posts ) {
1357
+ $post_parent = $posts['parent'];
1358
+ unset( $posts['parent'] );
1359
+ $candidate = reset( $posts );
1360
  $featured_in += count( $posts );
1361
 
1362
+ if ( $candidate != $post_parent ) {
1363
+ $args = array( 'ID' => $attachment, 'post_parent' => reset( $posts ) );
1364
+ if ( wp_update_post( $args ) ) {
1365
+ $updates++;
1366
+ } else {
1367
+ $errors++;
1368
+ }
1369
  }
1370
  }
1371
 
1372
+ $unattached = self::$attach_all ? '' : 'unattached';
1373
+ return "<br>Attach Featured In found {$featured_objects} {$unattached} items featured in {$featured_in} posts/pages and made {$updates} assignments. There were {$errors} error(s).\n";
1374
  } // _attach_featured_in
1375
 
1376
+ /**
1377
+ * Attach items to the first Post/Page where they appear in a "class wp-image-" or "ids=" element
1378
+ *
1379
+ * @since 1.08
1380
+ *
1381
+ * @return string HTML markup for results/messages
1382
+ */
1383
+ private static function _attach_referenced_in() {
1384
+ // Load the self::$item_references array
1385
+ self::_build_item_references_cache( true );
1386
+
1387
+ // Initialize statistics
1388
+ $reference_count = 0;
1389
+ $referenced_items = 0;
1390
+ $updated_attachments = 0;
1391
+ $skipped = 0;
1392
+ $errors = 0;
1393
+
1394
+ foreach ( self::$item_references as $attachment_id => $references ) {
1395
+ $attachment = get_post( $attachment_id );
1396
+ //error_log( __LINE__ . " _attach_referenced_in( {$attachment_id} ) attachment = " . var_export( $attachment, true ), 0 );
1397
+
1398
+ // Ignore references to non-existant items
1399
+ if ( NULL === $attachment ) {
1400
+ continue;
1401
+ }
1402
+
1403
+ if ( !self::$attach_all && $attachment->post_parent ) {
1404
+ $skipped++;
1405
+ continue;
1406
+ }
1407
+
1408
+ $reference_count += count( $references );
1409
+ $referenced_items++;
1410
+
1411
+ // Define "first"; oldest = ksort, newest = krsort
1412
+ if ( $reverse_sort ) {
1413
+ krsort( $references, SORT_NUMERIC );
1414
+ } else {
1415
+ ksort( $references, SORT_NUMERIC );
1416
+ }
1417
+
1418
+ // extract the "first" element
1419
+ $candidate = reset( $references );
1420
+ //error_log( __LINE__ . " _attach_referenced_in( {$attachment_id} ) candidate = " . var_export( $candidate, true ), 0 );
1421
+ if ( $candidate != $attachment->post_parent ) {
1422
+ $args = array( 'ID' => $attachment_id, 'post_parent' => $candidate );
1423
+ //error_log( __LINE__ . " _attach_referenced_in( {$attachment_id} ) args = " . var_export( $args, true ), 0 );
1424
+ if ( wp_update_post( $args ) ) {
1425
+ $updated_attachments++;
1426
+ } else {
1427
+ $errors++;
1428
+ }
1429
+ }
1430
+ }
1431
+
1432
+ $skipped = $skipped ? "skipped {$skipped} attached items, " : '';
1433
+ $unattached = self::$attach_all ? '' : 'unattached ';
1434
+ return "<br>Attach Referenced Items {$skipped}processed {$reference_count} posts/page references to {$referenced_items} {$unattached}items and updated {$updated_attachments} items. There were {$errors} error(s).\n";
1435
+ } // _attach_referenced_in
1436
+
1437
  /**
1438
  * Copy Post/Page values from inserts to Media Library item
1439
  *
1504
  delete_transient( self::SLUG_PREFIX . 'image_objects' );
1505
  }
1506
 
1507
+ return "<br>Post to Item Title matched {$image_inserts} posts/pages to {$image_objects} items and updated {$updated_attachments} items. There were {$errors} error(s).\n";
1508
  } // _copy_post_values_to_items
1509
 
1510
  /**
1558
  } // foreach reference
1559
  } // foreach attachment
1560
 
1561
+ return "<br>Parent to Item Title matched {$attached_parents} posts/pages to {$attached_items} items and updated {$updated_attachments} items. There were {$errors} error(s).\n";
1562
  } // _copy_parent_values_to_items
1563
 
1564
+ /**
1565
+ * Copy assigned terms from parent post/page to the attached items
1566
+ *
1567
+ * @since 1.06
1568
+ *
1569
+ * @return string HTML markup for results/messages
1570
+ */
1571
+ private static function _copy_parent_terms_to_items() {
1572
+ self::_build_attached_items_cache();
1573
+
1574
+ $item_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'to_item_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'to_item_taxonomy' ] : 'attachment_category';
1575
+ $parent_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'from_parent_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'from_parent_taxonomy' ] : 'category';
1576
+ $append = 'add' === ( isset( $_REQUEST[ self::SLUG_PREFIX . 'item_add_replace' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'item_add_replace' ] : 'add' );
1577
+
1578
+ $attached_parents = count( self::$attached_items );
1579
+ $attached_items = 0;
1580
+ $updated_parents = 0;
1581
+ $skipped = 0;
1582
+ $errors = 0;
1583
+
1584
+ $taxonomies = get_object_taxonomies( 'attachment', 'objects' );
1585
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items attachment taxonomies = " . var_export( $taxonomies, true ), 0 );
1586
+
1587
+ if ( ! isset( $taxonomies[ $item_taxonomy ] ) ) {
1588
+ return "ERROR - Item Taxonomy \"$item_taxonomy\" not valid for post_type \"attachment\".";
1589
+ }
1590
+
1591
+ $item_is_hierarchical = $taxonomies[ $item_taxonomy ]->hierarchical;
1592
+
1593
+ $skipped_messages = array();
1594
+ $parent_taxonomies = array();
1595
+ foreach ( self::$attached_items as $post_id => $attachments ) {
1596
+ // get the post/page object
1597
+ $post = get_post( $post_id );
1598
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items attachment post = " . var_export( $post, true ), 0 );
1599
+
1600
+ // Exclude post_type "attachment", which is used in MLA to give thumbnails to non-image items
1601
+ if ( 'attachment' === $post->post_type ) {
1602
+ $attached_parents--;
1603
+ continue;
1604
+ }
1605
+
1606
+ if ( isset( $parent_taxonomies[ $post->post_type ] ) ) {
1607
+ $taxonomies = $parent_taxonomies[ $post->post_type ];
1608
+ } else {
1609
+ $taxonomies = $parent_taxonomies[ $post->post_type ] = get_object_taxonomies( $post, 'objects' );
1610
+ }
1611
+
1612
+ if ( ! isset( $taxonomies[ $parent_taxonomy ] ) ) {
1613
+ $skipped_messages[ $parent_taxonomy . $post->post_type ] = array( 'taxonomy' => $parent_taxonomy, 'post_type' => $post->post_type );
1614
+ $skipped++;
1615
+ continue;
1616
+ }
1617
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items taxonomies = " . var_export( $taxonomies, true ), 0 );
1618
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items parent_taxonomies = " . var_export( $parent_taxonomies, true ), 0 );
1619
+
1620
+ $parent_terms = wp_get_object_terms( $post_id, $parent_taxonomy );
1621
+ $term_map = array();
1622
+ $item_terms = array();
1623
+
1624
+ // If both taxonomies are hiearchical we must add parent term(s) before adding item terms
1625
+ if ( $item_is_hierarchical && $taxonomies[ $parent_taxonomy ]->hierarchical ) {
1626
+ $ancestors = array();
1627
+ foreach ( $parent_terms as $term ) {
1628
+ $level = 0;
1629
+ while ( $term->parent ) {
1630
+ $term = get_term( $term->parent, $parent_taxonomy );
1631
+ $ancestors[ $level++ ][ $term->term_id ] = $term;
1632
+ }
1633
+ }
1634
+
1635
+ krsort( $ancestors, SORT_NUMERIC );
1636
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items ancestors = " . var_export( $ancestors, true ), 0 );
1637
+
1638
+ foreach ( $ancestors as $level => $terms ) {
1639
+ foreach ( $terms as $term_id => $term ) {
1640
+ $ancestor = get_term_by( 'name', $term->name, $item_taxonomy );
1641
+ if ( false !== $ancestor ) {
1642
+ $term_map[ $term->term_id ] = $ancestor->term_id;
1643
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items( $level, $term->term_id ) found ancestor = " . var_export( $ancestor, true ), 0 );
1644
+ } else {
1645
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items( $level, $term->term_id ) inserting = " . var_export( $term, true ), 0 );
1646
+ if ( $term->parent && !empty( $term_map[ $term->parent ] ) ) {
1647
+ $ancestor = wp_insert_term( $term->name, $item_taxonomy, array( 'parent' => $term_map[ $term->parent ] ) );
1648
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items child ancestor = " . var_export( $ancestor, true ), 0 );
1649
+ } else {
1650
+ $ancestor = wp_insert_term( $term->name, $item_taxonomy );
1651
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items root ancestor = " . var_export( $ancestor, true ), 0 );
1652
+ }
1653
+ if ( ( ! is_wp_error( $ancestor ) ) && isset( $ancestor['term_id'] ) ) {
1654
+ $term_map[ $term->term_id ] = (integer) $ancestor['term_id'];
1655
+ }
1656
+ }
1657
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items updated term_map = " . var_export( $term_map, true ), 0 );
1658
+ } // foreach term
1659
+ } // foreach level
1660
+ }
1661
+
1662
+ foreach ( $parent_terms as $term ) {
1663
+ if ( $item_is_hierarchical ) {
1664
+ $item_term = term_exists( $term->name, $item_taxonomy );
1665
+
1666
+ if ( $item_term !== 0 && $item_term !== NULL ) {
1667
+ $item_terms[ $item_term['term_id'] ] = (integer) $item_term['term_id'];
1668
+ } else {
1669
+ if ( $term->parent && !empty( $term_map[ $term->parent ] ) ) {
1670
+ $item_term = wp_insert_term( $term->name, $item_taxonomy, array( 'parent' => $term_map[ $term->parent ] ) );
1671
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items child item_term = " . var_export( $item_term, true ), 0 );
1672
+ } else {
1673
+ $item_term = wp_insert_term( $term->name, $item_taxonomy );
1674
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items root item_term = " . var_export( $item_term, true ), 0 );
1675
+ }
1676
+
1677
+ if ( ( ! is_wp_error( $item_term ) ) && isset( $item_term['term_id'] ) ) {
1678
+ $item_terms[ $item_term['term_id'] ] = (integer) $item_term['term_id'];
1679
+ }
1680
+ }
1681
+ } else {
1682
+ $item_terms[ $term->term_taxonomy_id ] = $term->name;
1683
+ }
1684
+ }
1685
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items( {$post_id} ) item_terms = " . var_export( $item_terms, true ), 0 );
1686
+
1687
+ foreach ( $attachments as $sequence => $attachment_id ) {
1688
+ $attached_items++;
1689
+
1690
+ $result = wp_set_object_terms( $attachment_id, $item_terms, $item_taxonomy, $append );
1691
+ if ( is_array( $result) ) {
1692
+ $updated_parents++;
1693
+ } else {
1694
+ $errors++;
1695
+ }
1696
+ //error_log( __LINE__ . " Insert_Fixit::_copy_parent_terms_to_items( {$post_id}, {$attachment_id}, {$append} ) result = " . var_export( $result, true ), 0 );
1697
+ } // foreach attachment
1698
+ } // foreach post
1699
+
1700
+ $messages = '';
1701
+ if ( !empty( $skipped_messages ) ) {
1702
+ foreach ( $skipped_messages as $skipped_message ) {
1703
+ $messages .= sprintf( '<br>Skipped taxonomy "%1$s" for post type "%2$s".', $skipped_message['taxonomy'], $skipped_message['post_type'] );
1704
+ }
1705
+ }
1706
+
1707
+ // Flush the Media/Edit Taxonomy Attachments column cache; see MLAObjects in class-mla-objects.php
1708
+ delete_transient( MLA_OPTION_PREFIX . 't_term_counts_' . $item_taxonomy, $terms );
1709
+
1710
+ return $messages . "<br>Item Terms to Parent matched {$attached_parents} posts/pages to {$attached_items} items and updated {$updated_parents} parent posts/pages. There were {$skipped} skipped parents and {$errors} error(s).\n";
1711
+ } // _copy_parent_terms_to_items
1712
+
1713
  /**
1714
  * Copy assigned terms from attached items to the parent post/page
1715
  *
1723
  $item_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'item_taxonomy' ] : 'attachment_tag';
1724
  $parent_taxonomy = isset( $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'parent_taxonomy' ] : 'post_tag';
1725
  $append = 'add' === ( isset( $_REQUEST[ self::SLUG_PREFIX . 'add_replace' ] ) ? $_REQUEST[ self::SLUG_PREFIX . 'add_replace' ] : 'add' );
1726
+
1727
  $attached_parents = count( self::$attached_items );
1728
  $attached_items = 0;
1729
  $updated_parents = 0;
1787
  }
1788
  } // foreach post
1789
 
1790
+ return "<br>Item Terms to Parent matched {$attached_parents} posts/pages to {$attached_items} items and updated {$updated_parents} parent posts/pages. There were {$skipped} skipped parents and {$errors} error(s).\n";
1791
  } // _copy_item_terms_to_parent
1792
 
1793
  /**
1799
  */
1800
  private static function _refresh_caches() {
1801
  $results = '<br>' . self::_build_image_inserts_cache();
1802
+ $results .= '<br>' . self::_build_item_references_cache();
1803
  return $results . '<br>' . self::_build_image_objects_cache() . "\n";
1804
  } // _refresh_caches
1805
  } //Insert_Fixit
examples/plugins/mla-item-transfer-pretty-links.php CHANGED
@@ -145,7 +145,7 @@ class MLAItemTransferPrettyLinks {
145
  }
146
 
147
  /**
148
- * Add the "Tools" link to the Plugins section entry
149
  *
150
  * @since 1.00
151
  *
@@ -207,7 +207,7 @@ class MLAItemTransferPrettyLinks {
207
  }
208
 
209
  /**
210
- * Render (echo) the "MLA jhdean" submenu in the Settings section
211
  *
212
  * @since 1.00
213
  *
@@ -217,7 +217,7 @@ class MLAItemTransferPrettyLinks {
217
  MLACore::mla_debug_add( __LINE__ . " MLAItemTransferPrettyLinks:add_submenu_page() \$_REQUEST = " . var_export( $_REQUEST, true ), MLACore::MLA_DEBUG_CATEGORY_ANY );
218
 
219
  if ( !current_user_can( 'manage_options' ) ) {
220
- echo "MLA Item Transfer Pretty Links - Error</h2>\n";
221
  wp_die( 'You do not have permission to manage plugin settings.' );
222
  }
223
 
145
  }
146
 
147
  /**
148
+ * Add the "Settings" link to the Plugins section entry
149
  *
150
  * @since 1.00
151
  *
207
  }
208
 
209
  /**
210
+ * Render (echo) the "MLA pretty links" submenu in the Settings section
211
  *
212
  * @since 1.00
213
  *
217
  MLACore::mla_debug_add( __LINE__ . " MLAItemTransferPrettyLinks:add_submenu_page() \$_REQUEST = " . var_export( $_REQUEST, true ), MLACore::MLA_DEBUG_CATEGORY_ANY );
218
 
219
  if ( !current_user_can( 'manage_options' ) ) {
220
+ echo "<h2>MLA Item Transfer Pretty Links - Error</h2>\n";
221
  wp_die( 'You do not have permission to manage plugin settings.' );
222
  }
223
 
examples/plugins/mla-mapping-hooks-example.php CHANGED
@@ -525,17 +525,16 @@ class MLAMappingHooksExample {
525
  * @since 1.02
526
  *
527
  * @param mixed string or array value returned by the rule
528
- * @param array custom_field_mapping rule
529
  * @param integer post ID to be evaluated
530
  * @param string category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping
531
  * @param array attachment_metadata, default NULL
532
  *
533
  * @return array updated rule EXIF/Template value
534
  */
535
- public static function mla_mapping_new_text( $new_text, $setting_value, $post_id, $category, $attachment_metadata ) {
536
- //error_log( __LINE__ . " MLAMappingHooksExample::mla_mapping_new_text_filter( {$post_id}, {$category} ) new_text = " . var_export( $new_text, true ), 0 );
537
- //error_log( __LINE__ . " MLAMappingHooksExample::mla_mapping_new_text_filter( {$post_id}, {$category} ) setting_value = " . var_export( $setting_value, true ), 0 );
538
- //error_log( __LINE__ . " MLAMappingHooksExample::mla_mapping_new_text_filter( {$post_id}, {$category} ) attachment_metadata = " . var_export( $attachment_metadata, true ), 0 );
539
 
540
  return $new_text;
541
  } // mla_mapping_new_text_filter
525
  * @since 1.02
526
  *
527
  * @param mixed string or array value returned by the rule
528
+ * @param string rule key - standard field slug, taxonomy slug or custom field name
529
  * @param integer post ID to be evaluated
530
  * @param string category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping
531
  * @param array attachment_metadata, default NULL
532
  *
533
  * @return array updated rule EXIF/Template value
534
  */
535
+ public static function mla_mapping_new_text( $new_text, $setting_key, $post_id, $category, $attachment_metadata ) {
536
+ //error_log( __LINE__ . " MLAMappingHooksExample::mla_mapping_new_text_filter( {$setting_key}, {$post_id}, {$category} ) new_text = " . var_export( $new_text, true ), 0 );
537
+ //error_log( __LINE__ . " MLAMappingHooksExample::mla_mapping_new_text_filter( {$setting_key}, {$post_id}, {$category} ) attachment_metadata = " . var_export( $attachment_metadata, true ), 0 );
 
538
 
539
  return $new_text;
540
  } // mla_mapping_new_text_filter
examples/plugins/mla-path-mapping-example/admin-settings-page.tpl ADDED
@@ -0,0 +1,366 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- template="page" -->
2
+ <a name="backtotop"></a>
3
+ &nbsp;
4
+ <div class="wrap">
5
+ <h1 class="wp-heading-inline">MLA Path Mapping Example [+version+] Settings</h1>
6
+ [+messages+]
7
+ [+tablist+]
8
+ [+tab_content+]
9
+ </div><!-- wrap -->
10
+
11
+ <!-- template="tablist" -->
12
+ <h2 class="nav-tab-wrapper">
13
+ [+tablist+]
14
+ </h2>
15
+ <!-- template="tablist-item" -->
16
+ <a data-tab-id="[+data-tab-id+]" class="nav-tab [+nav-tab-active+]" href="?page=[+settings-page+]&amp;mla_tab=[+data-tab-id+]">[+title+]</a>
17
+
18
+ <!-- template="messages" -->
19
+ <div class="[+mla_messages_class+]">
20
+ <p>
21
+ [+messages+]
22
+ </p>
23
+ [+dismiss_button+]
24
+ </div>
25
+
26
+ <!-- template="page-level-options" -->
27
+ <tr valign="top">
28
+ <td class="textright">
29
+ <input name="mla_path_mapping_options[assign_parents]" id="mla_path_mapping_assign_parents" type="checkbox" [+assign_parents_checked+] value="1" />
30
+ </td>
31
+ <td>
32
+ &nbsp;<strong>Assign parent terms</strong>
33
+ <div class="mla-settings-help">&nbsp;&nbsp;Check this option to assign all terms in path, not just the last (leaf) term.</div>
34
+ </td>
35
+ </tr>
36
+ <tr valign="top">
37
+ <td class="textright">
38
+ <input name="mla_path_mapping_options[assign_rule_parent]" id="mla_path_mapping_assign_rule_parent" type="checkbox" [+assign_rule_parent_checked+] value="1" />
39
+ </td>
40
+ <td>
41
+ &nbsp;<strong>Assign Rule Parent term</strong>
42
+ <div class="mla-settings-help">&nbsp;&nbsp;Check this option to assign the Rule Parent (if any) in addition to terms in path.</div>
43
+ </td>
44
+ </tr>
45
+ <tr valign="top">
46
+ <td class="textright">
47
+ <strong>Path Delimiter</strong>
48
+ </td>
49
+ <td>
50
+ <input name="mla_path_mapping_options[path_delimiter]" id="mla_path_mapping_path_delimiter" type="text" size="1" maxlength="1"value="[+path_delimiter+]" />
51
+ <div class="mla-settings-help">&nbsp;&nbsp;Enter the delimiter that separates path components.</div>
52
+ </td>
53
+ </tr>
54
+
55
+
56
+ <!-- template="general-tab" -->
57
+ <style type='text/css'>
58
+ .mla-settings-help {
59
+ font-size: 8pt;
60
+ padding-bottom: 5px
61
+ }
62
+
63
+ .mla-page-level-options-form {
64
+ margin-left: 0px;
65
+ margin-top: 10px;
66
+ padding-bottom: 10px;
67
+ border-bottom:thin solid #888888;
68
+ }
69
+
70
+ span.submit.mla-settings-submit,
71
+ p.submit.mla-settings-submit {
72
+ padding-bottom: 0px
73
+ }
74
+ </style>
75
+ <h2>Plugin Options</h2>
76
+ <p>In this tab you can define the path delimiter and parent-term handling options for mapping terms in hierarchical taxonomies.</p>
77
+ <p>You can find more information about using the features of this plugin in the Documentation tab on this screen.</p>
78
+ <div class="mla-page-level-options-form">
79
+ <form action="[+form_url+]" method="post" class="mla-display-settings-page" id="mla-display-settings-path-mapping-tab">
80
+ <table class="optiontable">
81
+ <tbody>
82
+ [+options_list+]
83
+ </tbody>
84
+ </table>
85
+ <span class="submit mla-settings-submit">
86
+ <input name="mla-path-mapping-options-save" class="button-primary" id="mla-path-mapping-options-save" type="submit" value="Save Changes" />
87
+ </span>
88
+ [+_wpnonce+]
89
+ </form>
90
+ </div>
91
+
92
+ <!-- template="documentation-tab" -->
93
+ <style type='text/css'>
94
+ .mla-doc-toc-list {
95
+ list-style-position:inside;
96
+ list-style:disc;
97
+ line-height: 15px;
98
+ padding-left: 20px
99
+ }
100
+
101
+ .mla-doc-hook-label {
102
+ text-align: right;
103
+ padding: 0 1em 2em 0;
104
+ vertical-align: top;
105
+ font-weight:bold
106
+ }
107
+
108
+ .mla-doc-hook-definition {
109
+ vertical-align: top;
110
+ }
111
+
112
+ .mla-doc-table-label {
113
+ text-align: right;
114
+ padding-right: 10px;
115
+ vertical-align: top;
116
+ font-weight:bold
117
+ }
118
+
119
+ .mla-doc-table-sublabel {
120
+ padding-right: 10px;
121
+ vertical-align: top
122
+ }
123
+
124
+ .mla-doc-table-reverse {
125
+ text-align: right;
126
+ padding-right: 10px;
127
+ vertical-align:top
128
+ }
129
+
130
+ .mla-doc-table-definition {
131
+ vertical-align: top;
132
+ }
133
+
134
+ .mla-doc-bold-link {
135
+ font-size:14px;
136
+ font-weight:bold
137
+ }
138
+ </style>
139
+ <h2>Plugin Documentation. In this tab, jump to:</h2>
140
+ <div class="mla-display-settings-page" id="mla-display-settings-documentation-tab" style="width:700px">
141
+ <ul class="mla-doc-toc-list">
142
+ <li><a href="#introduction"><strong>Introduction</strong></a></li>
143
+ <li><a href="#assigning-ids"><strong>Assigning Term ID Values</strong></a></li>
144
+ <li><a href="#names-vs-slugs"><strong>Term Names Vs Slugs</strong></a></li>
145
+ <li><a href="#flat-taxonomies"><strong>Path Specifications for Flat Taxonomies</strong></a></li>
146
+ <li><a href="#matching"><strong>Matching on Term Name</strong></a></li>
147
+ <li><a href="#creating"><strong>Creating New Terms</strong></a></li>
148
+ <li><a href="#multi-level"><strong>Assigning Multi-level Terms</strong></a></li>
149
+ <li><a href="#mapping-multiple"><strong>Mapping Multiple Items</strong></a></li>
150
+ </ul>
151
+ <p>
152
+ &nbsp;
153
+ <a name="introduction"></a>
154
+ </p>
155
+ <p>
156
+ <a href="#backtotop">Go to Top</a>
157
+ </p>
158
+ <h3>Introduction</h3>
159
+ <p>
160
+ The current MLA version provides mapping rules to assign taxonomy terms to Media Library items from IPTC, EXIF and XMP metadata values embedded in the image files. For hierarchical taxonomies, the current version allows new terms to be added under a specified &ldquo;Parent&rdquo; term, but does not support more general mapping of terms within multiple levels.
161
+ </p>
162
+ <p>
163
+ The current version allows the specification of &ldquo;Delimiters&rdquo; (including a space character) to separate multiple terms within a metadata value. This example plugin adds a &ldquo;Path Delimiter&rdquo; that allows term parent and higher-level ancestor values to be specified, more precisely placing a term in the hierarchy. For example, a value such as &ldquo;/grand parent/parent/child&rdquo; denotes a specific term within a three-level hierarchy. In this example the delimiter at the start of the value means that &ldquo;grand parent&rdquo; must be a root term, i.e., it appears at the highest level and has no ancestors. This is an absolute path specification. A path such as &ldquo;parent/child&rdquo; is a relative path specification, starting wherever &ldquo;parent&rdquo; appears in the hierarchy.
164
+ <a name="assigning-ids"></a>
165
+ </p>
166
+ <p>
167
+ <a href="#backtotop">Go to Top</a>
168
+ </p>
169
+ <h3>Assigning Term ID Values</h3>
170
+ <p>
171
+ Because a given Term Name can exist in multiple taxonomies and in more than one place in a given hierarchical taxonomy, Term ID is an important part of organizing and finding terms within a taxonomy. Early versions of WordPress supported &ldquo;shared terms&rdquo;, which required a separate Term-taxonomy ID to uniquely distinguish among multiple occurrences of the same Term Name; see the Appendix for more information. Shared terms no longer occur in more recent WordPress versions (4.3+) so Term ID is now unique.
172
+ </p>
173
+ <p>
174
+ Term ID values start at 1 (assigned to the WordPress &ldquo;Uncategorized&rdquo; category) and are incremented each time a new term is created. They are never reused, so if terms are deleted there will be gaps in the remaining ID values.
175
+ </p>
176
+ <p>
177
+ If the same Term Name is used more than once, how do you decide which term is specified by an unqualified Term Name? WordPress matches an unqualified Term Name to the term with the lowest Term ID, i.e., the &ldquo;oldest&rdquo; term defined with that name. See the &ldquo;Matching on Term Name&rdquo; section for more information.
178
+ <a name="names-vs-slugs"></a>
179
+ </p>
180
+ <p>
181
+ <a href="#backtotop">Go to Top</a>
182
+ </p>
183
+ <h3>Term Names Vs Slugs</h3>
184
+ <p>
185
+ When terms are added to a taxonomy WordPress accepts a term Name, an optional Slug, an optional Parent and an optional Description. WordPress will generate a Slug from the Name and will always add whatever is needed to make the slug unique within the taxonomy. For example, consider these terms:
186
+ <table cellpadding="5">
187
+ <tr>
188
+ <td><strong>Name</strong></td>
189
+ <td><strong>Slug</strong></td>
190
+ <td><strong>Name</strong></td>
191
+ <td><strong>Slug</strong></td>
192
+ <tr>
193
+ <td>Grand Parent One (08)</td>
194
+ <td>grand-parent-one</td>
195
+ <td>Grand Parent Two (02)</td>
196
+ <td>grand-parent-two</td>
197
+ </tr>
198
+ <tr>
199
+ <td>&mdash; Parent Two (10)</td>
200
+ <td>parent-two-grand-parent-one</td>
201
+ <td>&mdash; Parent Three (05)</td>
202
+ <td>parent-three</td>
203
+ </tr>
204
+ <tr>
205
+ <td>&mdash; &mdash; Child Three (13)</td>
206
+ <td>child-three-parent-two-grand-parent-one</td>
207
+ <td>&mdash; &mdash; Child Five (07)</td>
208
+ <td></td>
209
+ </tr>
210
+ <tr>
211
+ <td>&mdash; &mdash; Child Two (12)</td>
212
+ <td>child-two</td>
213
+ <td>&mdash; &mdash; Child Three (06)</td>
214
+ <td>child-three</td>
215
+ </tr>
216
+ <tr>
217
+ <td>&mdash; Parent One (09)</td>
218
+ <td>parent-one</td>
219
+ <td>&mdash; Parent Two (03)</td>
220
+ <td>parent-two</td>
221
+ </tr>
222
+ <tr>
223
+ <td>&mdash; &mdash; Child One (11)</td>
224
+ <td>child-one</td>
225
+ <td>&mdash; &mdash; Child Four (04)</td>
226
+ <td>child-four</td>
227
+ </tr>
228
+ </table>
229
+ In this example, the &ldquo;Grand Parent Two&rdquo; hierarchy was added first and the slugs in those terms are obvious. The &ldquo;Parent Two&rdquo; and &ldquo;Child Three&rdquo; terms under &ldquo;Grand Parent One&rdquo; have modified slugs to avoid duplication with the terms added earlier.
230
+ There is no prohibition against the same slug appearing in two different taxonomies.
231
+ <a name="flat-taxonomies"></a>
232
+ </p>
233
+ <p>
234
+ <a href="#backtotop">Go to Top</a>
235
+ </p>
236
+ <h3>Path Specifications for Flat Taxonomies</h3>
237
+ <p>
238
+ The plugin ignores mapping rules for non-hierarchical, or &ldquo;flat&rdquo;, taxonomies such as Att. Tags. Any path specifications found will be processed as a simple term name, e.g., &ldquo;/parent/child&rdquo; will become a simple root-level term, not separate &ldquo;parent&rdquo; and &ldquo;child&rdquo; terms.
239
+ <a name="matching"></a>
240
+ </p>
241
+ <p>
242
+ <a href="#backtotop">Go to Top</a>
243
+ </p>
244
+ <h3>Matching on Term Name</h3>
245
+ <p>
246
+ Because the term Slug cannot be known in advance, MLA mapping rules match term values in item metadata against the term Name. When duplicate term Names exist in a taxonomy MLA will match the term defined earliest, i.e., with the lowest term_id value. In the above example &ldquo;Child Three&rdquo; will match term_id &ldquo;6&rdquo;, under &ldquo;Grand Parent Two/Parent Three&rdquo;. Several examples of WordPress &ldquo;search by term Name&rdquo; functions and their results are in the Appendix.
247
+ </p>
248
+ <p>
249
+ When duplicate term Names exist in a taxonomy they can always be disambiguated by specifying the complete, absolute path to the desired term. Starting a relative path with a unique ancestor name will also work.</p>
250
+ <p>
251
+ Finally, the &ldquo;Parent&rdquo; value <strong>in the mapping rule</strong> (a rule Parent) can restrict the search to a subset of the term tree and change the handling of relative paths. For example:
252
+ </p>
253
+ <ul class="mla_settings">
254
+ <li>if the <strong>rule</strong> Parent is &ldquo;Grand Parent One&rdquo;, then a <strong>relative path</strong> such as &ldquo;Child Three&rdquo; will be matched as &ldquo;/Grand Parent One/Child Three&rdquo;. It will not match any other &ldquo;Child One&rdquo; values lower down in the subtree.</li>
255
+ <li>if the <strong>rule</strong> Parent is &ldquo;Grand Parent One/Parent Two&rdquo;, then a <strong>relative path</strong> such as &ldquo;Child Three&rdquo; will be matched as &ldquo;/Grand Parent One/Parent Two/Child Three&rdquo;.</li>
256
+ </ul>
257
+ <p>
258
+ An absolute path will ignore the rule Parent and start from the root level of the term hierarchy.
259
+ For more examples, here is a hierarchical taxonomy sorted by the order in which the terms were created (Term ID order):
260
+ </p>
261
+ <code>
262
+ Grand Parent Two (02)<br />
263
+ Grand Parent Two/Parent Two (03)<br />
264
+ Grand Parent Two/Parent Two/Child Four (04)<br />
265
+ Grand Parent Two/Parent Three (05)<br />
266
+ Grand Parent Two/Parent Three/Child Three (06)<br />
267
+ Grand Parent Two/Parent Three/Child Five (07)<br />
268
+ Grand Parent One (08)<br />
269
+ Grand Parent One/Parent One (09)<br />
270
+ Grand Parent One/Parent Two (10)<br />
271
+ Grand Parent One/Parent One/Child One (11)<br />
272
+ Grand Parent One/Parent Two/Child Two (12)<br />
273
+ Grand Parent One/Parent Two/Child Three (13)
274
+ </code>
275
+ <p>
276
+ Here&rsquo;s the way the taxonomy appears in the Edit Taxonomy admin submenu:
277
+ </p>
278
+ <code>
279
+ Grand Parent One (08)<br />
280
+ — Parent One (09)<br />
281
+ — — Child One (11)<br />
282
+ — Parent Two (10)<br />
283
+ — — Child Three (13)<br />
284
+ — — Child Two (12)<br />
285
+ Grand Parent Two (02)<br />
286
+ — Parent Three (05)<br />
287
+ — — Child Five (07)<br />
288
+ — — Child Three (06)<br />
289
+ — Parent Two (03)<br />
290
+ — — Child Four (04)
291
+ </code>
292
+ <p>
293
+ Here are the results of matching ambiguous unqualified names to taxonomy terms (assuming no rule Parent):
294
+ </p>
295
+ <ul>
296
+ <li>&ldquo;<strong>Child Three</strong>&rdquo; => Grand Parent Two/Parent Three/<strong>Child Three</strong> (06)</li>
297
+ <li>&ldquo;<strong>Parent Two</strong>&rdquo; => Grand Parent Two/<strong>Parent Two</strong> (03)</li>
298
+ </ul>
299
+ <p>
300
+ You can&rsquo;t read down the displayed list and easily predict how the match will come out!
301
+ </p>
302
+ <p>
303
+ Here are the unexpected results of matching relative paths with ambiguous initial names (assuming no rule Parent):
304
+ </p>
305
+ <ul>
306
+ <li>&ldquo;<strong>Parent Two/Child Four</strong>&rdquo; => Grand Parent Two/<strong>Parent Two/Child Four</strong> (04)</li>
307
+ <li>&ldquo;<strong>Parent Two/Child Three</strong>&rdquo; => <strong>NO MATCH</strong> - creates Grand Parent Two/<strong>Parent Two/Child Three</strong> (14)
308
+ </li>
309
+ </ul>
310
+ <p>
311
+ In the second case, to match the existing &ldquo;Parent Two/Child Three&rdquo; the ambiguous &ldquo;Parent Two&rdquo; must be made unique by adding &ldquo;Grand Parent One&rdquo;. To avoid this issue always start a relative path with a unique name.
312
+ <a name="creating"></a>
313
+ </p>
314
+ <p>
315
+ <a href="#backtotop">Go to Top</a>
316
+ </p>
317
+ <h3><strong>Creating New Terms</strong></h3>
318
+ <p>
319
+ When a term embedded in the metadata in an item&rsquo;s file is not found in the taxonomy it must be added to the taxonomy&rsquo;s terms in the proper location.
320
+ </p>
321
+ <p>
322
+ Single-level terms are straightforward. If a rule Parent is specified they will be added just under the Parent. If the rule Parent is not specified they will be added a new root-level terms.
323
+ </p>
324
+ <p>
325
+ Multi-level terms are more challenging, since any of the path elements might be new to the taxonomy. Consider these additions to the above example taxonomy:
326
+ </p>
327
+ <ol>
328
+ <li>&ldquo;<strong>Parent Three/Child Six</strong>&rdquo; – a new &ldquo;Child Six&rdquo; term will be added just under the existing &ldquo;Parent Three&rdquo;.</li>
329
+ <li>&ldquo;<strong>Parent Four/Child One</strong>&rdquo; – both of the path elements are new to the taxonomy. &ldquo;Parent Four&rdquo; will be added as a new root-level term (no rule Parent) or just under the rule Parent. Then, &ldquo;Child One&rdquo; will be added just under the new &ldquo;Parent Four&rdquo;.</li>
330
+ <li>&ldquo;<strong>Grand Parent Two/Parent Four/Child One</strong>&rdquo; – &ldquo;Parent Four&rdquo; will be added as a new term just under the existing &ldquo;Grand Parent Two&rdquo;. Then, &ldquo;Child One&rdquo; will be added just under the new &ldquo;Parent Four&rdquo;.</li>
331
+ <li>&ldquo;<strong>/Parent Four/Child Six</strong>&rdquo; – &ldquo;Parent Four&rdquo; will be added as a new root-level term. Then, a new &ldquo;Child Six&rdquo; term will be added just under the new &ldquo;/Parent Four&rdquo;.</li>
332
+ </ol>
333
+ <p>
334
+ In general, multi-level terms are processed one level at a time from left to right. Relative paths take the rule Parent into account, absolute paths always start form the root level.
335
+ <a name="multi-level"></a>
336
+ &nbsp;
337
+ </p>
338
+ <p>
339
+ <a href="#backtotop">Go to Top</a>
340
+ </p>
341
+ <h3><strong>Assigning Multi-level Terms</strong></h3>
342
+ <p>
343
+ WordPress allows you to assign terms at any level in any combination. In other words, given the absolute path &ldquo;/Grand Parent One/Parent Two/Child Three&rdquo; you can assign one, two or all three of the path elements to the item. If you choose to assign only lowest-level &ldquo;Child Three&rdquo; you can still associate the item with &ldquo;Grand Parent One&rdquo; by including &ldquo;children&rdquo; in a term query.
344
+ </p>
345
+ <p>
346
+ The two common choices seem to be &ldquo;assign all levels&rdquo; or &ldquo;assign lowest level&rdquo;. Adding syntax to assign or skip individual path elements seems overly complicated. For this reason, a simple checkbox option will select one of the two common choices on a rule-by-rule basis.
347
+ </p>
348
+ <p>
349
+ When a Rule Parent is specified, a second checkbox option will select whether the Rule Parent term is also assigned to the item. The Rule Parent term is only assigned when one or more other terms are assigned as well, so items with no explicit term assignments do not get assigned to the Rule Parent.
350
+ <a name="mapping-multiple"></a>
351
+ </p>
352
+ <p>
353
+ <a href="#backtotop">Go to Top</a>
354
+ </p>
355
+ <h3>Mapping Multiple Items</h3>
356
+ <p>
357
+ All of MLA&rsquo;s mapping operations are performed on each item in isolation. If you are mapping two or more items in an upload, a batch edit or a &ldquo;map all items&rdquo; operation be aware that the order in which the items are processed can affect the placement of new terms within the hierarchy. For example, consider these two items and their terms:
358
+ </p>
359
+ <ol>
360
+ <li>Item A, terms &ldquo;/Grand Parent One/Parent Two/Child Three&rdquo;</li>
361
+ <li>Item B, terms &ldquo;Parent Two/Child Three&rdquo;</li>
362
+ </ol>
363
+ <p>
364
+ If these items are processed in order there will be a single &ldquo;Parent Two&rdquo; term under &ldquo;Grand Parent One&rdquo;. If, however, Item B is processed before Item A there will be a root-level &ldquo;Parent Two&rdquo; term from Item B and a separate &ldquo;/Grand Parent One/Parent Two&rdquo; term from Item A. The best defense is unique names for every term!
365
+ </p>
366
+ </div>
examples/plugins/mla-path-mapping-example/mla-path-mapping-example.php ADDED
@@ -0,0 +1,739 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Adds hierarchical path specification to the IPTC/EXIF taxonomy mapping features
4
+ *
5
+ * For example, "/Root/Parent/Child" creates or locates:
6
+ * - A root term named "Root"
7
+ * - A child term named "Parent" under "Root"
8
+ * - A child term named "Child" under "Parent"
9
+ *
10
+ * Much more information is in the Settings/MLA Path Mapping Documentation tab.
11
+ *
12
+ * Inspired by support topic "Help with Custom Taxonomy"
13
+ * opened on 11/25/2017 by "wesm".
14
+ * https://wordpress.org/support/topic/help-with-custom-taxonomy/
15
+ *
16
+ * @package MLA Path Mapping Example
17
+ * @version 1.00
18
+ */
19
+
20
+ /*
21
+ Plugin Name: MLA Path Mapping Example
22
+ Plugin URI: http://fairtradejudaica.org/media-library-assistant-a-wordpress-plugin/
23
+ Description: Adds hierarchical path specification to the IPTC/EXIF taxonomy mapping features
24
+ Author: David Lingren
25
+ Version: 1.00
26
+ Author URI: http://fairtradejudaica.org/our-story/staff/
27
+
28
+ Copyright 2018 David Lingren
29
+
30
+ This program is free software; you can redistribute it and/or modify
31
+ it under the terms of the GNU General Public License as published by
32
+ the Free Software Foundation; either version 2 of the License, or
33
+ (at your option) any later version.
34
+
35
+ This program is distributed in the hope that it will be useful,
36
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
37
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38
+ GNU General Public License for more details.
39
+
40
+ You can get a copy of the GNU General Public License by writing to the
41
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
42
+ */
43
+
44
+ /**
45
+ * Class MLA Path Mapping Example hooks one of the filters provided by the IPTC/EXIF and Custom Field mapping features
46
+ *
47
+ * Call it anything you want, but give it an unlikely and hopefully unique name. Hiding everything
48
+ * else inside a class means this is the only name you have to worry about.
49
+ *
50
+ * @package MLA Path Mapping Example
51
+ * @since 1.00
52
+ */
53
+ class MLAPathMappingExample {
54
+ /**
55
+ * Current version number
56
+ *
57
+ * @since 1.00
58
+ *
59
+ * @var string
60
+ */
61
+ const CURRENT_VERSION = '1.00';
62
+
63
+ /**
64
+ * Slug prefix for registering and enqueueing submenu pages, style sheets, scripts and settings
65
+ *
66
+ * @since 1.00
67
+ *
68
+ * @var string
69
+ */
70
+ const SLUG_PREFIX = 'mlapathmap';
71
+
72
+ /**
73
+ * Initialization function, similar to __construct()
74
+ *
75
+ * Installs filters and actions that handle the MLA hooks for uploading and mapping.
76
+ *
77
+ * @since 1.00
78
+ *
79
+ * @return void
80
+ */
81
+ public static function initialize() {
82
+ /*
83
+ * The filters are only useful in the admin section; exit if in the "front-end" posts/pages.
84
+ */
85
+ if ( ! is_admin() )
86
+ return;
87
+
88
+ // Add submenu page in the "Settings" section
89
+ add_action( 'admin_menu', 'MLAPathMappingExample::admin_menu' );
90
+
91
+ // add filters for IPTC/EXIF mapping rule execution
92
+ add_filter( 'mla_mapping_rule', 'MLAPathMappingExample::mla_mapping_rule', 10, 4 );
93
+ add_filter( 'mla_mapping_new_text', 'MLAPathMappingExample::mla_mapping_new_text', 10, 5 );
94
+ add_filter( 'mla_mapping_updates', 'MLAPathMappingExample::mla_mapping_updates', 10, 5 );
95
+ }
96
+
97
+ /**
98
+ * Add submenu page in the "Settings" section
99
+ *
100
+ * @since 1.00
101
+ */
102
+ public static function admin_menu( ) {
103
+ /*
104
+ * We need a tab-specific page ID to manage the screen options on the General tab.
105
+ * Use the URL suffix, if present. If the URL doesn't have a tab suffix, use '-general'.
106
+ * This hack is required to pass the WordPress "referer" validation.
107
+ */
108
+ if ( isset( $_REQUEST['page'] ) && is_string( $_REQUEST['page'] ) && ( self::SLUG_PREFIX . '-settings-' == substr( $_REQUEST['page'], 0, strlen( self::SLUG_PREFIX . '-settings-' ) ) ) ) {
109
+ $tab = substr( $_REQUEST['page'], strlen( self::SLUG_PREFIX . '-settings-' ) );
110
+ } else {
111
+ $tab = 'general';
112
+ }
113
+
114
+ $tab = self::_get_options_tablist( $tab ) ? '-' . $tab : '-general';
115
+ add_submenu_page( 'options-general.php', 'MLA Path Mapping Example', 'MLA Path Mapping', 'manage_options', self::SLUG_PREFIX . '-settings' . $tab, 'MLAPathMappingExample::add_submenu_page' );
116
+ add_filter( 'plugin_action_links', 'MLAPathMappingExample::plugin_action_links', 10, 2 );
117
+ }
118
+
119
+ /**
120
+ * Add the "Settings" and "Guide" links to the Plugins section entry
121
+ *
122
+ * @since 1.00
123
+ *
124
+ * @param array array of links for the Plugin, e.g., "Activate"
125
+ * @param string Directory and name of the plugin Index file
126
+ *
127
+ * @return array Updated array of links for the Plugin
128
+ */
129
+ public static function plugin_action_links( $links, $file ) {
130
+ if ( $file == 'mla-path-mapping-example/mla-path-mapping-example.php' ) {
131
+ $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . self::SLUG_PREFIX . '-settings-documentation&mla_tab=documentation' ), 'Guide' );
132
+ array_unshift( $links, $settings_link );
133
+ $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . self::SLUG_PREFIX . '-settings-general' ), 'Settings' );
134
+ array_unshift( $links, $settings_link );
135
+ }
136
+
137
+ return $links;
138
+ }
139
+
140
+ /**
141
+ * Render (echo) the "MLA Path Mapping" submenu in the Settings section
142
+ *
143
+ * @since 1.00
144
+ *
145
+ * @return void Echoes HTML markup for the submenu page
146
+ */
147
+ public static function add_submenu_page() {
148
+ //error_log( __LINE__ . " MLAPathMappingExample:add_submenu_page _REQUEST = " . var_export( $_REQUEST, true ), 0 );
149
+
150
+ if ( !current_user_can( 'manage_options' ) ) {
151
+ echo "<h2>MLA Path Mapping Example - Error</h2>\n";
152
+ wp_die( 'You do not have permission to manage plugin settings.' );
153
+ }
154
+
155
+ // Load template array and initialize page-level values.
156
+ self::$page_template_array = MLACore::mla_load_template( dirname( __FILE__ ) . '/admin-settings-page.tpl', 'path' );
157
+ $current_tab_slug = isset( $_REQUEST['mla_tab'] ) ? $_REQUEST['mla_tab']: 'general';
158
+ $current_tab = self::_get_options_tablist( $current_tab_slug );
159
+ $page_values = array(
160
+ 'version' => 'v' . self::CURRENT_VERSION,
161
+ 'messages' => '',
162
+ 'tablist' => self::_compose_settings_tabs( $current_tab_slug ),
163
+ 'tab_content' => '',
164
+ );
165
+
166
+ // Compose tab content
167
+ if ( $current_tab ) {
168
+ if ( isset( $current_tab['render'] ) ) {
169
+ $handler = $current_tab['render'];
170
+ $page_content = call_user_func( $handler );
171
+ } else {
172
+ $page_content = array( 'message' => 'ERROR: Cannot render content tab', 'body' => '' );
173
+ }
174
+ } else {
175
+ $page_content = array( 'message' => 'ERROR: Unknown content tab', 'body' => '' );
176
+ }
177
+
178
+ if ( ! empty( $page_content['message'] ) ) {
179
+ if ( false !== strpos( $page_content['message'], 'ERROR' ) ) {
180
+ $messages_class = 'updated error';
181
+ $dismiss_button = '';
182
+ } else {
183
+ $messages_class = 'updated notice is-dismissible';
184
+ $dismiss_button = " <button class=\"notice-dismiss\" type=\"button\"><span class=\"screen-reader-text\">[+dismiss_text+].</span></button>\n";
185
+ }
186
+
187
+ $page_values['messages'] = MLAData::mla_parse_template( self::$page_template_array['messages'], array(
188
+ 'mla_messages_class' => $messages_class ,
189
+ 'messages' => $page_content['message'],
190
+ 'dismiss_button' => $dismiss_button,
191
+ 'dismiss_text' => 'Dismiss this notice',
192
+ ) );
193
+ }
194
+
195
+ $page_values['tab_content'] = $page_content['body'];
196
+ echo MLAData::mla_parse_template( self::$page_template_array['page'], $page_values );
197
+ }
198
+
199
+ /**
200
+ * Template file for the Settings page(s) and parts
201
+ *
202
+ * This array contains all of the template parts for the Settings page(s). The array is built once
203
+ * each page load and cached for subsequent use.
204
+ *
205
+ * @since 1.00
206
+ *
207
+ * @var array
208
+ */
209
+ public static $page_template_array = NULL;
210
+
211
+ /**
212
+ * Definitions for Settings page tab ids, titles and handlers
213
+ * Each tab is defined by an array with the following elements:
214
+ *
215
+ * array key => HTML id/name attribute and option database key (OMIT MLA_OPTION_PREFIX)
216
+ *
217
+ * title => tab label / heading text
218
+ * render => rendering function for tab messages and content. Usage:
219
+ * $tab_content = ['render']( );
220
+ *
221
+ * @since 1.00
222
+ *
223
+ * @var array
224
+ */
225
+ private static $mla_tablist = array(
226
+ 'general' => array( 'title' => 'General', 'render' => array( 'MLAPathMappingExample', '_compose_general_tab' ) ),
227
+ 'documentation' => array( 'title' => 'Documentation', 'render' => array( 'MLAPathMappingExample', '_compose_documentation_tab' ) ),
228
+ );
229
+
230
+ /**
231
+ * Retrieve the list of options tabs or a specific tab value
232
+ *
233
+ * @since 1.00
234
+ *
235
+ * @param string Tab slug, to retrieve a single entry
236
+ *
237
+ * @return array|false The entire tablist ( $tab = NULL ), a single tab entry or false if not found/not allowed
238
+ */
239
+ private static function _get_options_tablist( $tab = NULL ) {
240
+ if ( is_string( $tab ) ) {
241
+ if ( isset( self::$mla_tablist[ $tab ] ) ) {
242
+ $results = self::$mla_tablist[ $tab ];
243
+ } else {
244
+ $results = false;
245
+ }
246
+ } else {
247
+ $results = self::$mla_tablist;
248
+ }
249
+
250
+ return $results;
251
+ }
252
+
253
+ /**
254
+ * Compose the navigation tabs for the Settings subpage
255
+ *
256
+ * @since 1.00
257
+ * @uses $page_template_array contains tablist and tablist-item templates
258
+ *
259
+ * @param string Optional data-tab-id value for the active tab, default 'general'
260
+ *
261
+ * @return string HTML markup for the Settings subpage navigation tabs
262
+ */
263
+ private static function _compose_settings_tabs( $active_tab = 'general' ) {
264
+ $tablist_item = self::$page_template_array['tablist-item'];
265
+ $tabs = '';
266
+ foreach ( self::_get_options_tablist() as $key => $item ) {
267
+ $item_values = array(
268
+ 'data-tab-id' => $key,
269
+ 'nav-tab-active' => ( $active_tab == $key ) ? 'nav-tab-active' : '',
270
+ 'settings-page' => self::SLUG_PREFIX . '-settings-' . $key,
271
+ 'title' => $item['title']
272
+ );
273
+
274
+ $tabs .= MLAData::mla_parse_template( $tablist_item, $item_values );
275
+ } // foreach $item
276
+
277
+ $tablist_values = array( 'tablist' => $tabs );
278
+ return MLAData::mla_parse_template( self::$page_template_array['tablist'], $tablist_values );
279
+ }
280
+
281
+ /**
282
+ * Compose the General tab content for the Settings subpage
283
+ *
284
+ * @since 1.00
285
+ * @uses $page_template_array contains tab content template(s)
286
+ *
287
+ * @return array 'message' => status/error messages, 'body' => tab content
288
+ */
289
+ private static function _compose_general_tab( ) {
290
+ $page_content = array( 'message' => '', 'body' => '' );
291
+
292
+ // Initialize page messages and content, check for page-level Save Changes
293
+ if ( !empty( $_REQUEST['mla-path-mapping-options-save'] ) ) {
294
+ check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
295
+ $page_content = self::_save_setting_changes( );
296
+ }
297
+
298
+ if ( !empty( $page_content['body'] ) ) {
299
+ return $page_content;
300
+ }
301
+
302
+ // Display the General tab
303
+ $_SERVER['REQUEST_URI'] = remove_query_arg( array(
304
+ 'mla_path_mapping_options',
305
+ '_wpnonce',
306
+ '_wp_http_referer',
307
+ 'mla-path-mapping-options-save',
308
+ ), $_SERVER['REQUEST_URI'] );
309
+
310
+ // Compose page-level options
311
+ $page_values = array(
312
+ 'assign_parents_checked' => self::_get_plugin_option('assign_parents') ? 'checked="checked" ' : '',
313
+ 'assign_rule_parent_checked' => self::_get_plugin_option('assign_rule_parent') ? 'checked="checked" ' : '',
314
+ 'path_delimiter' => self::_get_plugin_option('path_delimiter'),
315
+ );
316
+ $options_list = MLAData::mla_parse_template( self::$page_template_array['page-level-options'], $page_values );
317
+
318
+ $form_arguments = '?page=' . self::SLUG_PREFIX . '-settings-general&mla_tab=general';
319
+
320
+ $page_values = array(
321
+ 'form_url' => admin_url( 'options-general.php' ) . $form_arguments,
322
+ '_wpnonce' => wp_nonce_field( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME, true, false ),
323
+ 'options_list' => $options_list,
324
+ );
325
+
326
+ $page_content['body'] .= MLAData::mla_parse_template( self::$page_template_array['general-tab'], $page_values );
327
+
328
+ return $page_content;
329
+ }
330
+
331
+ /**
332
+ * Compose the General tab content for the Settings subpage
333
+ *
334
+ * @since 1.00
335
+ * @uses $page_template_array contains tab content template(s)
336
+ *
337
+ * @return array 'message' => status/error messages, 'body' => tab content
338
+ */
339
+ private static function _compose_documentation_tab( ) {
340
+ $page_content = array( 'message' => '', 'body' => '' );
341
+ $page_values = array(
342
+ );
343
+
344
+ $page_content['body'] = MLAData::mla_parse_template( self::$page_template_array['documentation-tab'], $page_values );
345
+ return $page_content;
346
+ }
347
+
348
+ /**
349
+ * Save settings as a WordPress wp_options entry
350
+ *
351
+ * @since 1.00
352
+ *
353
+ * @return array 'message' => status/error messages, 'body' => tab content
354
+ */
355
+ private static function _save_setting_changes() {
356
+ $page_content = array( 'message' => 'Settings unchanged.', 'body' => '' );
357
+
358
+ $changed = self::_update_plugin_option( 'assign_parents', isset( $_REQUEST[ 'mla_path_mapping_options' ]['assign_parents'] ) );
359
+ $changed |= self::_update_plugin_option( 'assign_rule_parent', isset( $_REQUEST[ 'mla_path_mapping_options' ]['assign_rule_parent'] ) );
360
+ $changed |= self::_update_plugin_option( 'path_delimiter', stripslashes( $_REQUEST[ 'mla_path_mapping_options' ]['path_delimiter'] ) );
361
+
362
+ if ( $changed ) {
363
+ // No reason to save defaults in the database
364
+ if ( self::$_settings === self::$_default_settings ) {
365
+ delete_option( self::SLUG_PREFIX . '-settings' );
366
+ } else {
367
+ $changed = update_option( self::SLUG_PREFIX . '-settings', self::$_settings, false );
368
+ }
369
+
370
+ if ( $changed ) {
371
+ $page_content['message'] = "Settings have been updated.";
372
+ } else {
373
+ $page_content['message'] = "Settings updated failed.";
374
+ }
375
+ }
376
+
377
+ return $page_content;
378
+ } // _save_setting_changes
379
+
380
+ /**
381
+ * Assemble the in-memory representation of the custom feed settings
382
+ *
383
+ * @since 1.00
384
+ *
385
+ * @param boolean $force_refresh Optional. Force a reload of rules. Default false.
386
+ * @return boolean Success (true) or failure (false) of the operation
387
+ */
388
+ private static function _get_custom_feed_settings( $force_refresh = false ) {
389
+ if ( false == $force_refresh && NULL != self::$_settings ) {
390
+ return true;
391
+ }
392
+
393
+ // Update the plugin options from the wp_options table or set defaults
394
+ self::$_settings = get_option( self::SLUG_PREFIX . '-settings' );
395
+ if ( !is_array( self::$_settings ) ) {
396
+ self::$_settings = self::$_default_settings;
397
+ }
398
+
399
+ return true;
400
+ }
401
+
402
+ /**
403
+ * In-memory representation of the option settings
404
+ *
405
+ * @since 1.00
406
+ *
407
+ * @var array $_settings {
408
+ * @type boolean $assign_parents Assign all terms in path, not just the last (leaf) term
409
+ * @type boolean $assign_rule_parent Assign the Rule Parent (if any) in addition to terms in path
410
+ * @type string $path_delimiter The delimiter that separates path components
411
+ * }
412
+ */
413
+ private static $_settings = NULL;
414
+
415
+ /**
416
+ * Default processing options
417
+ *
418
+ * @since 1.00
419
+ *
420
+ * @var array
421
+ */
422
+ private static $_default_settings = array (
423
+ 'assign_parents' => false,
424
+ 'assign_rule_parent' => false,
425
+ 'path_delimiter' => '/',
426
+ );
427
+
428
+ /**
429
+ * Get a custom feed option setting
430
+ *
431
+ * @since 1.00
432
+ *
433
+ * @param string $name Option name
434
+ *
435
+ * @return mixed Option value, if it exists else NULL
436
+ */
437
+ private static function _get_plugin_option( $name ) {
438
+ if ( !self::_get_custom_feed_settings() ) {
439
+ return NULL;
440
+ }
441
+
442
+ if ( !isset( self::$_settings[ $name ] ) ) {
443
+ return NULL;
444
+ }
445
+
446
+ return self::$_settings[ $name ];
447
+ }
448
+
449
+ /**
450
+ * Update a custom feed option setting
451
+ *
452
+ * @since 1.00
453
+ *
454
+ * @param string $name Option name
455
+ * @param mixed $new_value Option value
456
+ *
457
+ * @return mixed True if option value changed, false if value unchanged, NULL if failure
458
+ */
459
+ private static function _update_plugin_option( $name, $new_value ) {
460
+ if ( !self::_get_custom_feed_settings() ) {
461
+ return NULL;
462
+ }
463
+
464
+ $old_value = isset( self::$_settings[ $name ] ) ? self::$_settings[ $name ] : NULL;
465
+
466
+ if ( $new_value === $old_value ) {
467
+ return false;
468
+ }
469
+
470
+ self::$_settings[ $name ] = $new_value;
471
+ return true;
472
+ }
473
+
474
+ /**
475
+ * MLA Mapping Rule Filter
476
+ *
477
+ * This filter is called once for each mapping rule, before the rule
478
+ * is evaluated. You can change the rule parameters, or prevent rule
479
+ * evaluation by returning $setting_value['data_source'] = 'none';
480
+ *
481
+ * @since 1.00
482
+ *
483
+ * @param array custom_field_mapping rule
484
+ * @param integer post ID to be evaluated
485
+ * @param string category/scope to evaluate against: custom_field_mapping or single_attachment_mapping
486
+ * @param array attachment_metadata, default NULL
487
+ *
488
+ * @return array updated custom_field_mapping rule
489
+ */
490
+ public static function mla_mapping_rule( $setting_value, $post_id, $category, $attachment_metadata ) {
491
+ if ( $setting_value['active'] ) {
492
+ //error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_rule_filter( {$post_id}, {$category} ) setting_value = " . var_export( $setting_value, true ), 0 );
493
+ //error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_rule_filter( {$post_id}, {$category} ) attachment_metadata = " . var_export( $attachment_metadata, true ), 0 );
494
+
495
+ self::$current_rule = $setting_value;
496
+ }
497
+
498
+ return $setting_value;
499
+ } // mla_mapping_rule_filter
500
+
501
+ /**
502
+ * Save the mapping rule so mla_mapping_new_text can use, e.g., parent
503
+ *
504
+ * @since 1.00
505
+ *
506
+ * @var array
507
+ */
508
+ private static $current_rule = array();
509
+
510
+ /**
511
+ * MLA Mapping New Text Filter
512
+ *
513
+ * This filter is called once for each IPTC/EXIF mapping rule, after the selection
514
+ * between the IPTC and EXIF values has been made. You can change the new value
515
+ * produced by the rule.
516
+ *
517
+ * @since 1.00
518
+ *
519
+ * @param mixed string or array value returned by the rule
520
+ * @param string rule key - standard field slug, taxonomy slug or custom field name
521
+ * @param integer post ID to be evaluated
522
+ * @param string category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping
523
+ * @param array attachment_metadata, default NULL
524
+ *
525
+ * @return array updated rule EXIF/Template value
526
+ */
527
+ public static function mla_mapping_new_text( $new_text, $setting_key, $post_id, $category, $attachment_metadata ) {
528
+ // $term_cache = array( [ taxonomy/setting_key ][ parent term_id ][ term name ] => array( term_id, term_taxonomy_id )
529
+ // $unqualified_cache = array( [ taxonomy/setting_key ][ term name ] => array( term_id, term_taxonomy_id )
530
+ // $rule_parent = array( [ taxonomy/setting_key ] => WP_Term object )
531
+ static $term_cache = array(), $unqualified_cache = array(), $rule_parent = array();
532
+
533
+ // We only care about taxonomies
534
+ if ( 'iptc_exif_taxonomy_mapping' !== $category ) {
535
+ return $new_text;
536
+ }
537
+
538
+ // We only care about hierarchical taxonomies
539
+ if ( !is_taxonomy_hierarchical( $setting_key ) ) {
540
+ return $new_text;
541
+ }
542
+
543
+ //error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_new_text_filter( {$setting_key}, {$post_id}, {$category} ) new_text = " . var_export( $new_text, true ), 0 );
544
+ //error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_new_text_filter( {$setting_key}, {$post_id}, {$category} ) attachment_metadata = " . var_export( $attachment_metadata, true ), 0 );
545
+
546
+ // Make sure $new_text is an array, even if it's empty
547
+ if ( empty( $new_text ) ) {
548
+ $new_text = array();
549
+ } elseif ( is_string( $new_text ) ) {
550
+ $new_text = array( $new_text );
551
+ }
552
+
553
+ $term_parent = !empty( self::$current_rule['parent'] ) ? absint( self::$current_rule['parent'] ) : 0;
554
+ $assign_rule_parent = $term_parent ? self::_get_plugin_option('assign_rule_parent') : false;
555
+ $assign_parents = self::_get_plugin_option('assign_parents');
556
+ $path_delimiter = self::_get_plugin_option('path_delimiter');
557
+
558
+ // Check for and validate Rule Parent
559
+ if ( $assign_rule_parent && empty( $rule_parent[ $setting_key ] ) ) {
560
+ $term = get_term( $term_parent, $setting_key );
561
+ if ( !empty( $term ) && !is_wp_error( $term ) ) {
562
+ $rule_parent[ $setting_key ] = $term;
563
+ } else {
564
+ $term_parent = 0;
565
+ }
566
+ }
567
+
568
+ // We must build the "public" cache from scratch for each item
569
+ MLAOptions::$mla_term_cache[ $setting_key ][ $term_parent ] = array();
570
+
571
+ // Initialize the higher-level cache elements to simplify the code
572
+ if ( !isset( $unqualified_cache[ $setting_key ] ) ) {
573
+ $unqualified_cache[ $setting_key ] = array();
574
+ }
575
+
576
+ if ( !isset( $term_cache[ $setting_key ] ) ) {
577
+ $term_cache[ $setting_key ] = array();
578
+ }
579
+
580
+ if ( !isset( $term_cache[ $setting_key ][ $term_parent ] ) ) {
581
+ $term_cache[ $setting_key ][ $term_parent ] = array();
582
+ }
583
+
584
+ /*
585
+ * Every element in $new_text must be added, as entered, to the $mla_term_cache
586
+ * so it is matched in MLAOptions::_get_term_id.
587
+ * An internal $term_cache holds each "path component" with the actual parent location.
588
+ * The $unqualified_cache holds each "path component" when the parent is unknown.
589
+ */
590
+ foreach ( $new_text as $term_name ) {
591
+ // WordPress encodes special characters, e.g., "&" as HTML entities in term names
592
+ $term_name = _wp_specialchars( $term_name );
593
+
594
+ // Is this a simple, unqualified term already in the cache?
595
+ if ( isset( $unqualified_cache[ $setting_key ][ $term_name ] ) ) {
596
+ error_log( __LINE__ . " mla_mapping_new_text found $term_name in unqualified_cache", 0 );
597
+ MLAOptions::$mla_term_cache[ $setting_key ][ $term_parent ][ $term_name ] = $unqualified_cache[ $setting_key ][ $term_name ]['term_id'];
598
+ continue;
599
+ }
600
+
601
+ // Break the path, if present, into its component parts
602
+ $path = explode( $path_delimiter, $term_name );
603
+
604
+ // Check for an absolute path, initialize $current_id
605
+ $unqualified_name = false;
606
+ if ( empty( $path[0] ) ) {
607
+ $current_parent = 0; // Root-level "parent"
608
+ } elseif ( 0 === $term_parent ) {
609
+ // Unqualified name - no parent restriction
610
+ $unqualified_name = true;
611
+ $current_parent = 'unqualified';
612
+ } else {
613
+ $current_parent = $term_parent;
614
+ }
615
+ error_log( __LINE__ . " mla_mapping_new_text parent = " . var_export( $current_parent, true ) . ", path = " . var_export( $path, true ), 0 );
616
+
617
+ // Holder for the $assign_parents entries
618
+ $assign_parents_entry = 0;
619
+
620
+ // Find or create all the path components and add them to the cache
621
+ foreach ( $path as $path_name ) {
622
+ // Check for a parent assignment
623
+ if ( 0 < $assign_parents_entry ) {
624
+ // Generate an unlikely name, create a new entry
625
+ $name = "assign_parent-term-{$assign_parents_entry}";
626
+ MLAOptions::$mla_term_cache[ $setting_key ][ $term_parent ][ $name ] = $assign_parents_entry;
627
+ $new_text[] = $name;
628
+ $assign_parents_entry = 0;
629
+ }
630
+
631
+ // Ignore initial or duplicate delimiters
632
+ if ( empty( $path_name ) ) {
633
+ error_log( __LINE__ . " mla_mapping_new_text ignoring empty path_name", 0 );
634
+ continue;
635
+ }
636
+
637
+ // Is this component in the cache?
638
+ if ( isset( $term_cache[ $setting_key ][ $current_parent ][ $path_name ] ) ) {
639
+ error_log( __LINE__ . " mla_mapping_new_text found $path_name under $current_parent in cache", 0 );
640
+ $current_parent = $term_cache[ $setting_key ][ $current_parent ][ $path_name ]['term_id'];
641
+
642
+ if ( $assign_parents ) {
643
+ $assign_parents_entry = $current_parent;
644
+ }
645
+
646
+ continue;
647
+ }
648
+
649
+ // Does this component exist?
650
+ if ( $unqualified_name ) {
651
+ // Is this component in the cache?
652
+ if ( isset( $unqualified_cache[ $setting_key ][ $path_name ] ) ) {
653
+ error_log( __LINE__ . " mla_mapping_new_text found $path_name in unqualified cache", 0 );
654
+ $path_term = $unqualified_cache[ $setting_key ][ $path_name ];
655
+ } else {
656
+ $path_term = term_exists( $path_name, $setting_key );
657
+
658
+ if ( $path_term !== 0 && $path_term !== NULL ) {
659
+ error_log( __LINE__ . " mla_mapping_new_text adding $path_name to unqualified cache", 0 );
660
+ $unqualified_cache[ $setting_key ][ $path_name ] = $path_term;
661
+ }
662
+ }
663
+
664
+ $unqualified_name = false;
665
+ } else {
666
+ $path_term = term_exists( $path_name, $setting_key, $current_parent );
667
+ }
668
+
669
+ if ( $path_term !== 0 && $path_term !== NULL ) {
670
+ error_log( __LINE__ . " mla_mapping_new_text found $path_name under $current_parent in database = " . var_export( $path_term, true ), 0 );
671
+ $term_cache[ $setting_key ][ $path_term['parent'] ][ $path_name ] = $path_term;
672
+ $current_parent = absint( $path_term['term_id'] );
673
+
674
+ if ( $assign_parents ) {
675
+ $assign_parents_entry = $current_parent;
676
+ }
677
+
678
+ continue;
679
+ }
680
+
681
+ // Create the term
682
+ $path_term = wp_insert_term( $path_name, $setting_key, array( 'parent' => $current_parent ) );
683
+ if ( ( ! is_wp_error( $path_term ) ) && isset( $path_term['term_id'] ) ) {
684
+ error_log( __LINE__ . " mla_mapping_new_text created $path_name under $current_parent = " . var_export( $path_term, true ), 0 );
685
+ $term_cache[ $setting_key ][ $current_parent ][ $path_name ] = $path_term;
686
+ $current_parent = absint( $path_term['term_id'] );
687
+
688
+ if ( $assign_parents ) {
689
+ $assign_parents_entry = $current_parent;
690
+ }
691
+ }
692
+ } // foreach path component
693
+
694
+ // Finally, create a public entry based on the (path and) name as entered
695
+ MLAOptions::$mla_term_cache[ $setting_key ][ $term_parent ][ $term_name ] = $current_parent;
696
+ } // foreach term name
697
+
698
+ // Create an entry with an unlikely name for the Rule Parent, if selected
699
+ if ( $assign_rule_parent && isset( $rule_parent[ $setting_key ] ) ) {
700
+ MLAOptions::$mla_term_cache[ $setting_key ][ $term_parent ]['rule_parent-term'] = $rule_parent[ $setting_key ]->term_id;
701
+ $new_text[] = 'rule_parent-term';
702
+ }
703
+
704
+ error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_new_text_filter( {$setting_key}, {$post_id}, {$category} ) mla term cache = " . var_export( MLAOptions::$mla_term_cache, true ), 0 );
705
+ return $new_text;
706
+ } // mla_mapping_new_text_filter
707
+
708
+ /**
709
+ * MLA Mapping Updates Filter
710
+ *
711
+ * This filter is called AFTER all mapping rules are applied.
712
+ * You can add, change or remove updates for the attachment's
713
+ * standard fields, taxonomies and/or custom fields.
714
+ *
715
+ * @since 1.00
716
+ *
717
+ * @param array updates for the attachment's standard fields, taxonomies and/or custom fields
718
+ * @param integer post ID to be evaluated
719
+ * @param string category/scope to evaluate against: custom_field_mapping or single_attachment_mapping
720
+ * @param array mapping rules
721
+ * @param array attachment_metadata, default NULL
722
+ *
723
+ * @return array updated attachment's updates
724
+ */
725
+ public static function mla_mapping_updates( $updates, $post_id, $category, $settings, $attachment_metadata ) {
726
+ error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_updates_filter( {$post_id}, {$category} ) updates = " . var_export( $updates, true ), 0 );
727
+ error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_updates_filter( {$post_id}, {$category} ) settings = " . var_export( $settings, true ), 0 );
728
+ //error_log( __LINE__ . " MLAPathMappingExample::mla_mapping_updates_filter( {$post_id}, {$category} ) attachment_metadata = " . var_export( $attachment_metadata, true ), 0 );
729
+
730
+ // To stop this rule's updates, return an empty array, i.e., return array();
731
+ return $updates;
732
+ } // mla_mapping_updates_filter
733
+ } //MLAPathMappingExample
734
+
735
+ /*
736
+ * Install the filters at an early opportunity
737
+ */
738
+ add_action('init', 'MLAPathMappingExample::initialize');
739
+ ?>
examples/plugins/mla-uploaded-on-example.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Reformats Media/Assistant column display for Uploaded on and Modified dates
4
+ *
5
+ * In this example the MLA_List_Table class is extended to replace the default content for two
6
+ * of the columns in the Media/Assistant submenu table.
7
+ *
8
+ * The example plugin uses one of the many filters available in the Media/Assistant Submenu
9
+ * and illustrates one of the techniques you can use to customize the submenu table display.
10
+ *
11
+ * Created for support topic "Sorting a gallery, once again"
12
+ * opened on 1/14/2018 by "dima-stefantsov)".
13
+ * https://wordpress.org/support/topic/sorting-a-gallery-once-again/
14
+ *
15
+ * @package MLA Uploaded on Example
16
+ * @version 1.00
17
+ */
18
+
19
+ /*
20
+ Plugin Name: MLA Uploaded on Example
21
+ Plugin URI: http://fairtradejudaica.org/media-library-assistant-a-wordpress-plugin/
22
+ Description: Reformats Media/Assistant column display for Uploaded on and Modified dates
23
+ Author: David Lingren
24
+ Version: 1.00
25
+ Author URI: http://fairtradejudaica.org/our-story/staff/
26
+
27
+ Copyright 2018 David Lingren
28
+
29
+ This program is free software; you can redistribute it and/or modify
30
+ it under the terms of the GNU General Public License as published by
31
+ the Free Software Foundation; either version 2 of the License, or
32
+ (at your option) any later version.
33
+
34
+ This program is distributed in the hope that it will be useful,
35
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
36
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37
+ GNU General Public License for more details.
38
+
39
+ You can get a copy of the GNU General Public License by writing to the
40
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
41
+ */
42
+
43
+ /**
44
+ * Class MLA Custom Field Search Example extends the Media/Assistant "Search Media" box
45
+ * to custom field values
46
+ *
47
+ * @package MLA Custom Field Search Example
48
+ * @since 1.00
49
+ */
50
+ class MLAUploadedOnExample {
51
+ /**
52
+ * Initialization function, similar to __construct()
53
+ *
54
+ * @since 1.00
55
+ *
56
+ * @return void
57
+ */
58
+ public static function initialize() {
59
+ // The filters are only useful for the admin section; exit in the front-end posts/pages
60
+ if ( ! is_admin() )
61
+ return;
62
+
63
+ // Defined in /media-library-assistant/includes/class-mla-main.php
64
+ add_filter( 'mla_list_table_new_instance', 'MLAUploadedOnExample::mla_list_table_new_instance', 10, 1 );
65
+ }
66
+
67
+ /**
68
+ * Extend the MLA_List_Table class
69
+ *
70
+ * This filter gives you an opportunity to extend the MLA_List_Table class.
71
+ * You can also use this filter to inspect or modify any of the $_REQUEST arguments.
72
+ *
73
+ * @since 1.00
74
+ *
75
+ * @param object $mla_list_table NULL, to indicate no extension/use the base class.
76
+ *
77
+ * @return object updated mla_list_table object.
78
+ */
79
+ public static function mla_list_table_new_instance( $mla_list_table ) {
80
+ return new Uploaded_On_MLA_List_Table;
81
+ } // mla_list_table_new_instance
82
+ } // Class MLAUploadedOnExample
83
+
84
+ // This code only works if MLA is installed and active!
85
+ if ( defined( 'MLA_PLUGIN_PATH' ) ) {
86
+ // The MLA_List_Table class isn't automatically available to plugins
87
+ if ( !class_exists( 'MLA_List_Table' ) ) {
88
+ require_once( MLA_PLUGIN_PATH . 'includes/class-mla-list-table.php' );
89
+ }
90
+
91
+ /**
92
+ * Class MLA (Media Library Assistant) List Table implements the "Assistant" admin submenu
93
+ *
94
+ * Extends the core WP_List_Table class.
95
+ *
96
+ * @package Media Library Assistant
97
+ * @since 0.1
98
+ */
99
+ class Uploaded_On_MLA_List_Table extends MLA_List_Table {
100
+ /**
101
+ * Supply a fixed-format Uploaded on date/time
102
+ *
103
+ * @since 1.00
104
+ *
105
+ * @param array A singular attachment (post) object
106
+ * @return string HTML markup to be placed inside the column
107
+ */
108
+ function column_date( $item ) {
109
+ global $post;
110
+
111
+ $post = $item; // Resolve issue with "The Events Calendar"
112
+ $date = mysql2date( 'Y-m-d', $item->post_date );
113
+ $time = mysql2date( 'H:i:s', $item->post_date );
114
+
115
+ return $date . '<br />&nbsp;&nbsp;' . $time;
116
+ } // column_date
117
+
118
+ /**
119
+ * Supply the content for a custom column
120
+ *
121
+ * @since 1.00
122
+ *
123
+ * @param array A singular attachment (post) object
124
+ * @return string HTML markup to be placed inside the column
125
+ */
126
+ function column_modified( $item ) {
127
+ $date = mysql2date( 'Y-m-d', $item->post_date );
128
+ $time = mysql2date( 'H:i:s', $item->post_date );
129
+
130
+ return $date . '<br />&nbsp;&nbsp;' . $time;
131
+ } // column_modified
132
+ } // Uploaded_On_MLA_List_Table
133
+
134
+ // Install the filters at an early opportunity
135
+ add_action('init', 'MLAUploadedOnExample::initialize');
136
+ } // defined( 'MLA_PLUGIN_PATH' ) )
137
+ ?>
examples/plugins/smart-media-categories/admin/includes/class-smc-automatic-support.php CHANGED
@@ -875,7 +875,7 @@ class SMC_Automatic_Support {
875
  // Find old Post assignments
876
  $old_assignments = implode( ',', $old_assignments );
877
  $sql = "SELECT ID FROM {$wpdb->posts}
878
- WHERE ID IN ( {$old_assignments} ) AND post_type = {$parent->post_type}";
879
  $old_ids = $wpdb->get_col( $sql );
880
  //error_log( __LINE__ . ' SMC_Automatic_Support::rule_remove_feature $old_ids = ' . var_export( $old_ids, true), 0 );
881
  }
875
  // Find old Post assignments
876
  $old_assignments = implode( ',', $old_assignments );
877
  $sql = "SELECT ID FROM {$wpdb->posts}
878
+ WHERE ID IN ( {$old_assignments} ) AND post_type = '{$parent->post_type}'";
879
  $old_ids = $wpdb->get_col( $sql );
880
  //error_log( __LINE__ . ' SMC_Automatic_Support::rule_remove_feature $old_ids = ' . var_export( $old_ids, true), 0 );
881
  }
includes/class-mla-admin-columns-pro-support-40.php ADDED
@@ -0,0 +1,307 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Media Library Assistant Admin Columns Pro (plugin) Support
4
+ *
5
+ * @package Media Library Assistant
6
+ * @since 2.50
7
+ */
8
+ defined( 'ABSPATH' ) or die();
9
+
10
+ /**
11
+ * Class Admin Columns Addon MLA (Media Library Assistant) List Screen supports the Admin Columns plugin
12
+ *
13
+ * @package Media Library Assistant
14
+ * @since 2.50
15
+ */
16
+ class ACP_Addon_MLA_ListScreen extends AC_Addon_MLA_ListScreen {
17
+
18
+ /**
19
+ * Initializes some properties, installs filters and then
20
+ * calls the parent constructor to set some default configs.
21
+ *
22
+ * @since 2.50
23
+ */
24
+ public function __construct() {
25
+ parent::__construct();
26
+
27
+ add_action( 'acp/column_types', 'ACP_Addon_MLA_ListScreen::inline_column_types', 10, 1 );
28
+ add_action( 'ac/column_types', 'ACP_Addon_MLA_ListScreen::inline_column_types', 10, 1 );
29
+ add_filter( 'acp/editing/model', 'ACP_Addon_MLA_ListScreen::add_editing_strategy', 10, 2 );
30
+ }
31
+
32
+ /**
33
+ * Add inline editing columns to Media/Assistant submenu table
34
+ *
35
+ * @since 2.52
36
+ *
37
+ * @param AC_ListScreen $listscreen
38
+ */
39
+ public static function inline_column_types( $listscreen ) {
40
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Title() );
41
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Parent() );
42
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_MenuOrder() );
43
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_AltText() );
44
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Caption() );
45
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Description() );
46
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_MimeType() );
47
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Date() );
48
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Author() );
49
+ }
50
+
51
+ /**
52
+ * Set MLA-specific inline editing strategy for Admin Columns Pro
53
+ *
54
+ * @since 2.50
55
+ *
56
+ * @param ACP_Editing_Model $model
57
+ * @param AC_Column $column
58
+ */
59
+ public static function add_editing_strategy( $model, $column ) {
60
+ $model->set_strategy( new ACP_Addon_MLA_Editing_Strategy( $model ) );
61
+ return $model;
62
+ }
63
+ } // class ACP_Addon_MLA_ListScreen
64
+
65
+ /**
66
+ * Class Admin Columns Addon MLA (Media Library Assistant) Editing Strategy supports the Admin Columns plugin
67
+ *
68
+ * @package Media Library Assistant
69
+ * @since 2.50
70
+ */
71
+ class ACP_Addon_MLA_Editing_Strategy extends ACP_Editing_Strategy_Post {
72
+
73
+ /**
74
+ * Get the available items on the current page for passing them to JS
75
+ *
76
+ * @since 2.50
77
+ *
78
+ * @return array Items on the current page ([entry_id] => (array) [entry_data])
79
+ */
80
+ public function get_rows() {
81
+ $table = $this->column->get_list_screen()->get_list_table();
82
+ $table->prepare_items();
83
+
84
+ return $this->get_editable_rows( $table->items );
85
+ }
86
+ } // class ACP_Addon_MLA_Editing_Strategy
87
+
88
+ /**
89
+ * Provides view_settings for MLA's post_title
90
+ *
91
+ * @package Media Library Assistant
92
+ * @since 2.52
93
+ */
94
+ class ACP_Addon_MLA_Editing_Model_Media_Title extends ACP_Editing_Model_Media_Title {
95
+
96
+ /**
97
+ * Remove JavaScript selector settings
98
+ */
99
+ public function get_view_settings() {
100
+ return array(
101
+ 'type' => 'text',
102
+ 'display_ajax' => false,
103
+ );
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Provides inline-editing for post_title
109
+ *
110
+ * @package Media Library Assistant
111
+ * @since 2.52
112
+ */
113
+ class ACP_Addon_MLA_Column_Title extends AC_Column_Media_Title
114
+ implements ACP_Column_EditingInterface {
115
+
116
+ /**
117
+ * Define column properties
118
+ */
119
+ public function __construct() {
120
+
121
+ // Mark as an existing column
122
+ $this->set_original( true );
123
+
124
+ // Type of column
125
+ $this->set_type( 'post_title' );
126
+ }
127
+
128
+ /**
129
+ * Add inline editing support
130
+ *
131
+ * @return ACP_Editing_Model_Media_Title
132
+ */
133
+ public function editing() {
134
+ return new ACP_Addon_MLA_Editing_Model_Media_Title( $this );
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Removes ACP defaults for parent
140
+ *
141
+ * @package Media Library Assistant
142
+ * @since 2.52
143
+ */
144
+ class ACP_Addon_MLA_Column_Parent extends AC_Column_Media_Parent {
145
+ /**
146
+ * Remove default column width
147
+ */
148
+ public function register_settings() {
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Provides inline-editing for menu_order
154
+ *
155
+ * @package Media Library Assistant
156
+ * @since 2.52
157
+ */
158
+ class ACP_Addon_MLA_Column_MenuOrder extends AC_Column
159
+ implements ACP_Column_EditingInterface {
160
+
161
+ /**
162
+ * Define column properties
163
+ */
164
+ public function __construct() {
165
+ $this->set_original( true );
166
+ $this->set_type( 'menu_order' );
167
+ }
168
+
169
+ /**
170
+ * Add inline editing support
171
+ *
172
+ * @return ACP_Editing_Model_Post_Order
173
+ */
174
+ public function editing() {
175
+ return new ACP_Editing_Model_Post_Order( $this );
176
+ }
177
+
178
+ }
179
+
180
+ /**
181
+ * Provides inline-editing for alt_text
182
+ *
183
+ * @package Media Library Assistant
184
+ * @since 2.52
185
+ */
186
+ class ACP_Addon_MLA_Column_AltText extends ACP_Column_Media_AlternateText
187
+ implements ACP_Column_EditingInterface {
188
+
189
+ /**
190
+ * Define column properties
191
+ */
192
+ public function __construct() {
193
+ $this->set_original( true );
194
+ $this->set_type( 'alt_text' );
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Provides inline-editing for caption
200
+ *
201
+ * @package Media Library Assistant
202
+ * @since 2.52
203
+ */
204
+ class ACP_Addon_MLA_Column_Caption extends ACP_Column_Media_Caption
205
+ implements ACP_Column_EditingInterface {
206
+
207
+ /**
208
+ * Define column properties
209
+ */
210
+ public function __construct() {
211
+ $this->set_original( true );
212
+ $this->set_type( 'caption' );
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Provides inline-editing for caption
218
+ *
219
+ * @package Media Library Assistant
220
+ * @since 2.52
221
+ */
222
+ class ACP_Addon_MLA_Column_Description extends AC_Column_Media_Description
223
+ implements ACP_Column_EditingInterface {
224
+
225
+ /**
226
+ * Define column properties
227
+ */
228
+ public function __construct() {
229
+ $this->set_original( true );
230
+ $this->set_type( 'description' );
231
+ }
232
+
233
+ /**
234
+ * Add inline editing support
235
+ *
236
+ * @return ACP_Editing_Model_Post_Content
237
+ */
238
+ public function editing() {
239
+ return new ACP_Editing_Model_Post_Content( $this );
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Provides inline-editing for caption
245
+ *
246
+ * @package Media Library Assistant
247
+ * @since 2.52
248
+ */
249
+ class ACP_Addon_MLA_Column_MimeType extends AC_Column_Media_MimeType
250
+ implements ACP_Column_EditingInterface {
251
+
252
+ /**
253
+ * Define column properties
254
+ */
255
+ public function __construct() {
256
+ $this->set_original( true );
257
+ $this->set_type( 'post_mime_type' );
258
+ }
259
+
260
+ /**
261
+ * Add inline editing support
262
+ *
263
+ * @return ACP_Editing_Model_Post_Content
264
+ */
265
+ public function editing() {
266
+ return new ACP_Editing_Model_Media_MimeType( $this );
267
+ }
268
+ }
269
+
270
+ /**
271
+ * Removes ACP defaults for date
272
+ *
273
+ * @package Media Library Assistant
274
+ * @since 2.52
275
+ */
276
+ class ACP_Addon_MLA_Column_Date extends ACP_Column_Media_Date {
277
+ /**
278
+ * Remove default column width
279
+ */
280
+ public function register_settings() {
281
+ }
282
+ }
283
+
284
+ /**
285
+ * Removes ACP defaults & provides inline-editing for caption
286
+ *
287
+ * @package Media Library Assistant
288
+ * @since 2.52
289
+ */
290
+ class ACP_Addon_MLA_Column_Author extends AC_Column_Media_Author
291
+ implements ACP_Column_EditingInterface {
292
+
293
+ /**
294
+ * Remove default column width
295
+ */
296
+ public function register_settings() {
297
+ }
298
+
299
+ /**
300
+ * Add inline editing support
301
+ *
302
+ * @return ACP_Editing_Model_Post_Content
303
+ */
304
+ public function editing() {
305
+ return new ACP_Editing_Model_Post_Author( $this );
306
+ }
307
+ }
includes/class-mla-admin-columns-pro-support-42.php ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Media Library Assistant Admin Columns Pro (plugin) Support
4
+ *
5
+ * @package Media Library Assistant
6
+ * @since 2.50
7
+ */
8
+ defined( 'ABSPATH' ) or die();
9
+
10
+ /**
11
+ * Class Admin Columns Addon MLA (Media Library Assistant) List Screen supports the Admin Columns plugin
12
+ *
13
+ * @package Media Library Assistant
14
+ * @since 2.50
15
+ */
16
+ class ACP_Addon_MLA_ListScreen extends AC_Addon_MLA_ListScreen
17
+ implements ACP_Editing_ListScreen {
18
+
19
+ /**
20
+ * Initializes some properties, installs filters and then
21
+ * calls the parent constructor to set some default configs.
22
+ *
23
+ * @since 2.50
24
+ */
25
+ public function __construct() {
26
+ parent::__construct();
27
+
28
+ add_action( 'ac/column_types', 'ACP_Addon_MLA_ListScreen::inline_column_types', 10, 1 );
29
+ }
30
+
31
+ /**
32
+ * Add inline editing columns to Media/Assistant submenu table
33
+ *
34
+ * @since 2.52
35
+ *
36
+ * @param AC_ListScreen $listscreen
37
+ */
38
+ public static function inline_column_types( $listscreen ) {
39
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Title() );
40
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Parent() );
41
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_MenuOrder() );
42
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_AltText() );
43
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Caption() );
44
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Description() );
45
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_MimeType() );
46
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Date() );
47
+ $listscreen->register_column_type( new ACP_Addon_MLA_Column_Author() );
48
+ }
49
+
50
+ /**
51
+ * Set MLA-specific inline editing strategy for Admin Columns Pro
52
+ *
53
+ * @since 2.71
54
+ *
55
+ * @param ACP_Editing_Model $model
56
+ */
57
+ public function editing( $model ) {
58
+ return new ACP_Addon_MLA_Editing_Strategy( $model );
59
+ }
60
+ } // class ACP_Addon_MLA_ListScreen
61
+
62
+ /**
63
+ * Class Admin Columns Addon MLA (Media Library Assistant) Editing Strategy supports the Admin Columns plugin
64
+ *
65
+ * @package Media Library Assistant
66
+ * @since 2.50
67
+ */
68
+ class ACP_Addon_MLA_Editing_Strategy extends ACP_Editing_Strategy_Post {
69
+
70
+ /**
71
+ * Get the available items on the current page for passing them to JS
72
+ *
73
+ * @since 2.50
74
+ *
75
+ * @return array Items on the current page ([entry_id] => (array) [entry_data])
76
+ */
77
+ public function get_rows() {
78
+ $table = $this->get_column()->get_list_screen()->get_list_table();
79
+ $table->prepare_items();
80
+
81
+ return $this->get_editable_rows( $table->items );
82
+ }
83
+ } // class ACP_Addon_MLA_Editing_Strategy
84
+
85
+ /**
86
+ * Provides view_settings for MLA's post_title
87
+ *
88
+ * @package Media Library Assistant
89
+ * @since 2.52
90
+ */
91
+ class ACP_Addon_MLA_Editing_Model_Media_Title extends ACP_Editing_Model_Media_Title {
92
+
93
+ /**
94
+ * Remove JavaScript selector settings
95
+ */
96
+ public function get_view_settings() {
97
+ return array(
98
+ 'type' => 'text',
99
+ 'display_ajax' => false,
100
+ );
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Provides inline-editing for post_title
106
+ *
107
+ * @package Media Library Assistant
108
+ * @since 2.52
109
+ */
110
+ class ACP_Addon_MLA_Column_Title extends AC_Column_Media_Title
111
+ implements ACP_Column_EditingInterface {
112
+
113
+ /**
114
+ * Define column properties
115
+ */
116
+ public function __construct() {
117
+
118
+ // Mark as an existing column
119
+ $this->set_original( true );
120
+
121
+ // Type of column
122
+ $this->set_type( 'post_title' );
123
+ }
124
+
125
+ /**
126
+ * Add inline editing support
127
+ *
128
+ * @return ACP_Editing_Model_Media_Title
129
+ */
130
+ public function editing() {
131
+ return new ACP_Addon_MLA_Editing_Model_Media_Title( $this );
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Removes ACP defaults for parent
137
+ *
138
+ * @package Media Library Assistant
139
+ * @since 2.52
140
+ */
141
+ class ACP_Addon_MLA_Column_Parent extends AC_Column_Media_Parent {
142
+ /**
143
+ * Remove default column width
144
+ */
145
+ public function register_settings() {
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Provides inline-editing for menu_order
151
+ *
152
+ * @package Media Library Assistant
153
+ * @since 2.52
154
+ */
155
+ class ACP_Addon_MLA_Column_MenuOrder extends AC_Column
156
+ implements ACP_Column_EditingInterface {
157
+
158
+ /**
159
+ * Define column properties
160
+ */
161
+ public function __construct() {
162
+ $this->set_original( true );
163
+ $this->set_type( 'menu_order' );
164
+ }
165
+
166
+ /**
167
+ * Add inline editing support
168
+ *
169
+ * @return ACP_Editing_Model_Post_Order
170
+ */
171
+ public function editing() {
172
+ return new ACP_Editing_Model_Post_Order( $this );
173
+ }
174
+
175
+ }
176
+
177
+ /**
178
+ * Provides inline-editing for alt_text
179
+ *
180
+ * @package Media Library Assistant
181
+ * @since 2.52
182
+ */
183
+ class ACP_Addon_MLA_Column_AltText extends ACP_Column_Media_AlternateText
184
+ implements ACP_Column_EditingInterface {
185
+
186
+ /**
187
+ * Define column properties
188
+ */
189
+ public function __construct() {
190
+ $this->set_original( true );
191
+ $this->set_type( 'alt_text' );
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Provides inline-editing for caption
197
+ *
198
+ * @package Media Library Assistant
199
+ * @since 2.52
200
+ */
201
+ class ACP_Addon_MLA_Column_Caption extends ACP_Column_Media_Caption
202
+ implements ACP_Column_EditingInterface {
203
+
204
+ /**
205
+ * Define column properties
206
+ */
207
+ public function __construct() {
208
+ $this->set_original( true );
209
+ $this->set_type( 'caption' );
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Provides inline-editing for caption
215
+ *
216
+ * @package Media Library Assistant
217
+ * @since 2.52
218
+ */
219
+ class ACP_Addon_MLA_Column_Description extends AC_Column_Media_Description
220
+ implements ACP_Column_EditingInterface {
221
+
222
+ /**
223
+ * Define column properties
224
+ */
225
+ public function __construct() {
226
+ $this->set_original( true );
227
+ $this->set_type( 'description' );
228
+ }
229
+
230
+ /**
231
+ * Add inline editing support
232
+ *
233
+ * @return ACP_Editing_Model_Post_Content
234
+ */
235
+ public function editing() {
236
+ return new ACP_Editing_Model_Post_Content( $this );
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Provides inline-editing for caption
242
+ *
243
+ * @package Media Library Assistant
244
+ * @since 2.52
245
+ */
246
+ class ACP_Addon_MLA_Column_MimeType extends AC_Column_Media_MimeType
247
+ implements ACP_Column_EditingInterface {
248
+
249
+ /**
250
+ * Define column properties
251
+ */
252
+ public function __construct() {
253
+ $this->set_original( true );
254
+ $this->set_type( 'post_mime_type' );
255
+ }
256
+
257
+ /**
258
+ * Add inline editing support
259
+ *
260
+ * @return ACP_Editing_Model_Post_Content
261
+ */
262
+ public function editing() {
263
+ return new ACP_Editing_Model_Media_MimeType( $this );
264
+ }
265
+ }
266
+
267
+ /**
268
+ * Removes ACP defaults for date
269
+ *
270
+ * @package Media Library Assistant
271
+ * @since 2.52
272
+ */
273
+ class ACP_Addon_MLA_Column_Date extends ACP_Column_Media_Date {
274
+ /**
275
+ * Remove default column width
276
+ */
277
+ public function register_settings() {
278
+ }
279
+ }
280
+
281
+ /**
282
+ * Removes ACP defaults & provides inline-editing for caption
283
+ *
284
+ * @package Media Library Assistant
285
+ * @since 2.52
286
+ */
287
+ class ACP_Addon_MLA_Column_Author extends AC_Column_Media_Author
288
+ implements ACP_Column_EditingInterface {
289
+
290
+ /**
291
+ * Remove default column width
292
+ */
293
+ public function register_settings() {
294
+ }
295
+
296
+ /**
297
+ * Add inline editing support
298
+ *
299
+ * @return ACP_Editing_Model_Post_Content
300
+ */
301
+ public function editing() {
302
+ return new ACP_Editing_Model_Post_Author( $this );
303
+ }
304
+ }
includes/class-mla-admin-columns-pro-support.php ADDED
@@ -0,0 +1,1411 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Media Library Assistant Admin Columns Pro (plugin) Support
4
+ *
5
+ * @package Media Library Assistant
6
+ * @since 2.71
7
+ */
8
+ defined( 'ABSPATH' ) or die();
9
+
10
+ /**
11
+ * Class Admin Columns Addon MLA (Media Library Assistant) List Screen supports the Admin Columns plugin
12
+ *
13
+ * @package Media Library Assistant
14
+ * @since 2.71
15
+ */
16
+ class ACP_Addon_MLA_ListScreen extends AC_Addon_MLA_ListScreen
17
+ implements ACP_Editing_ListScreen, ACP_Export_ListScreen {
18
+
19
+ /**
20
+ * Initializes some properties, installs filters and then
21
+ * calls the parent constructor to set some default configs.
22
+ *
23
+ * @since 2.71
24
+ */
25
+ public function __construct() {
26
+ parent::__construct();
27
+
28
+ add_action( 'ac/table/list_screen', array( $this, 'export_table_global' ) );
29
+ }
30
+
31
+ /**
32
+ * Set MLA-specific inline editing strategy for Admin Columns Pro
33
+ *
34
+ * @since 2.71
35
+ *
36
+ * @param ACP_Editing_Model $model
37
+ */
38
+ public function editing( $model ) {
39
+ return new ACP_Addon_MLA_Editing_Strategy( $model );
40
+ }
41
+
42
+ /**
43
+ * Create and populate an MLA_List_Table object in the $wp_list_table global variable
44
+ *
45
+ * When exporting the same page is being requested by an ajax request and triggers the filter 'the_posts'.
46
+ * The callback for this filter will print a json string. This needs to be done before any rendering of the page.
47
+ *
48
+ * Also, export needs the $GLOBALS['wp_list_table'] to be populated for displaying the export button.
49
+ *
50
+ * @since 2.71
51
+ *
52
+ * @param AC_ListScreen $list_screen
53
+ */
54
+ public function export_table_global( AC_ListScreen $list_screen ) {
55
+ global $wp_list_table;
56
+
57
+ if ( ! $list_screen instanceof ACP_Addon_MLA_ListScreen ) {
58
+ return;
59
+ }
60
+
61
+ if ( ! class_exists( 'MLA_List_Table' ) ) {
62
+ require_once( MLA_PLUGIN_PATH . 'includes/class-mla-list-table.php' );
63
+ MLA_List_Table::mla_admin_init_action();
64
+ }
65
+
66
+ if ( $wp_list_table instanceof MLA_List_Table ) {
67
+ return;
68
+ }
69
+
70
+ $wp_list_table = new MLA_List_Table();
71
+ $wp_list_table->prepare_items();
72
+ }
73
+
74
+ /**
75
+ * Set MLA-specific export strategy for Admin Columns Pro
76
+ *
77
+ * @since 2.71
78
+ */
79
+ public function export() {
80
+ return new ACP_Addon_MLA_Export_Strategy( $this );
81
+ }
82
+
83
+ /**
84
+ * Register MLA-specific column definitions for Admin Columns Pro
85
+ *
86
+ * @since 2.71
87
+ */
88
+ public function register_column_types() {
89
+ parent::register_column_types();
90
+
91
+ // $this->register_column_type( new ACP_Column_CustomField ); Tobias 3/1/18 message
92
+ // $this->register_column_type( new ACP_Colmn_Menu ); Tobias 3/1/18 message
93
+
94
+ // Autoload the CustomField class if necessary
95
+ if ( class_exists( 'ACP_Column_CustomField' ) ) {
96
+ $this->register_column_type( new ACP_Column_CustomField );
97
+ }
98
+
99
+ $this->register_column_type( new ACP_Addon_MLA_Column_ID_Parent );
100
+ $this->register_column_type( new ACP_Addon_MLA_Column_Title_Name() );
101
+ $this->register_column_type( new ACP_Addon_MLA_Column_Title() );
102
+ $this->register_column_type( new ACP_Addon_MLA_Column_Name() );
103
+ $this->register_column_type( new ACP_Addon_MLA_Column_Parent() );
104
+ $this->register_column_type( new ACP_Addon_MLA_Column_MenuOrder() );
105
+ $this->register_column_type( new ACP_Addon_MLA_Column_Features() );
106
+ $this->register_column_type( new ACP_Addon_MLA_Column_Inserts() );
107
+ $this->register_column_type( new ACP_Addon_MLA_Column_Galleries() );
108
+ $this->register_column_type( new ACP_Addon_MLA_Column_MLA_Galleries() );
109
+ $this->register_column_type( new ACP_Addon_MLA_Column_AltText() );
110
+ $this->register_column_type( new ACP_Addon_MLA_Column_Caption() );
111
+ $this->register_column_type( new ACP_Addon_MLA_Column_Description() );
112
+ $this->register_column_type( new ACP_Addon_MLA_Column_MimeType() );
113
+ $this->register_column_type( new ACP_Addon_MLA_Column_FileURL() );
114
+ $this->register_column_type( new ACP_Addon_MLA_Column_Base_File() );
115
+ $this->register_column_type( new ACP_Addon_MLA_Column_Date() );
116
+ $this->register_column_type( new ACP_Addon_MLA_Column_Modified() );
117
+ $this->register_column_type( new ACP_Addon_MLA_Column_Author() );
118
+ $this->register_column_type( new ACP_Addon_MLA_Column_Attached() );
119
+
120
+ // Set up the taxonomy column definitions
121
+ $taxonomies = get_taxonomies( array ( 'show_ui' => true ), 'names' );
122
+ foreach ( $taxonomies as $tax_name ) {
123
+ if ( MLACore::mla_taxonomy_support( $tax_name ) ) {
124
+ $tax_object = get_taxonomy( $tax_name );
125
+ $column = new ACP_Addon_MLA_Column_Taxonomy();
126
+ $column->set_type( 't_' . $tax_object->name );
127
+
128
+ $this->register_column_type( $column );
129
+ } // supported taxonomy
130
+ } // foreach $tax_name
131
+
132
+ // Set up the custom field definitions
133
+ $custom_columns = MLACore::mla_custom_field_support( 'custom_columns' );
134
+ foreach ( $custom_columns as $type => $label ) {
135
+ $column = new ACP_Addon_MLA_Column_CustomField();
136
+ $column->set_type( $type );
137
+ $column->set_name( $type );
138
+ $column->set_label( $label );
139
+
140
+ $this->register_column_type( $column );
141
+ } // foreach custom column
142
+ }
143
+
144
+ /**
145
+ * Return list table item object given ID
146
+ *
147
+ * @param integer $id List table item ID
148
+ *
149
+ * @since 2.71
150
+ */
151
+ public static function get_item( $id ) {
152
+ global $wp_list_table;
153
+
154
+ if ( $wp_list_table instanceof MLA_List_Table ) {
155
+ foreach ( $wp_list_table->items as $index => $item ) {
156
+ if ( $id == $item->ID ) {
157
+ return $item;
158
+ }
159
+ }
160
+ }
161
+
162
+ return AC_Addon_MLA_ListScreen::get_object( $id );
163
+ }
164
+
165
+ /**
166
+ * Translate post_status 'future', 'pending', 'draft' and 'trash' to label
167
+ *
168
+ * @since 2.01
169
+ *
170
+ * @param string post_status
171
+ *
172
+ * @return string Status label or empty string
173
+ */
174
+ public static function format_post_status( $post_status ) {
175
+ $flag = ', ';
176
+ switch ( $post_status ) {
177
+ case 'draft' :
178
+ $flag .= __('Draft');
179
+ break;
180
+ case 'future' :
181
+ $flag .= __('Scheduled');
182
+ break;
183
+ case 'pending' :
184
+ $flag .= _x('Pending', 'post state');
185
+ break;
186
+ case 'trash' :
187
+ $flag .= __('Trash');
188
+ break;
189
+ default:
190
+ $flag = '';
191
+ }
192
+
193
+ return $flag;
194
+ }
195
+
196
+ } // class ACP_Addon_MLA_ListScreen
197
+
198
+ /**
199
+ * Exportability class for posts list screen
200
+ *
201
+ * @since 2.71
202
+ */
203
+ class ACP_Addon_MLA_Export_Strategy extends ACP_Export_Strategy {
204
+
205
+ /**
206
+ * Call parent constructor
207
+ *
208
+ * @param AC_ListScreen $list_screen
209
+ */
210
+ public function __construct( $list_screen ) {
211
+ parent::__construct( $list_screen );
212
+ }
213
+
214
+ /**
215
+ * Retrieve the headers for the columns
216
+ *
217
+ * @param AC_Column[] $columns
218
+ *
219
+ * @since 1.0
220
+ * @return string[] Associative array of header labels for the columns.
221
+ */
222
+ public function get_headers( array $columns ) {
223
+ $headers = parent::get_headers( $columns );
224
+
225
+ // Fix the first header to avoid MS Excel SYLK file format error
226
+ foreach ( $headers as $name => $label ) {
227
+ if ( 'ID' === substr( $label, 0, 2) ) {
228
+ $headers[ $name ] = '.' . $label;
229
+ }
230
+
231
+ break; // Only the first label matters
232
+ }
233
+
234
+ return $headers;
235
+ }
236
+
237
+ /**
238
+ * Add hooks for MLA_List_table to support AJAX export operation
239
+ *
240
+ * @since 2.71
241
+ * @see ACP_Export_ExportableListScreen::ajax_export()
242
+ */
243
+ protected function ajax_export() {
244
+ // Hooks
245
+ add_filter( 'mla_list_table_query_final_terms', array( $this, 'mla_list_table_query_final_terms' ), 1e6 );
246
+ add_action( 'mla_list_table_prepare_items', array( $this, 'mla_list_table_prepare_items' ), 10, 2 );
247
+ }
248
+
249
+ /**
250
+ * Modify the main posts query to use the correct pagination arguments. This should be attached
251
+ * to the pre_get_posts hook when an AJAX request is sent
252
+ *
253
+ * @param WP_Query $request
254
+ *
255
+ * @since 2.71
256
+ * @see action:pre_get_posts
257
+ */
258
+ public function mla_list_table_query_final_terms( $request ) {
259
+ $per_page = $this->get_num_items_per_iteration();
260
+ $request['offset'] = $this->get_export_counter() * $per_page;
261
+ $request['posts_per_page'] = $per_page;
262
+ $request['posts_per_archive_page'] = $per_page;
263
+
264
+ return $request;
265
+ }
266
+
267
+ /**
268
+ * Run the actual export when the posts query is finalized. This should be attached to the
269
+ * the_posts filter when an AJAX request is run
270
+ *
271
+ * @param WP_Query $query
272
+ *
273
+ * @since 2.71
274
+ * @see action:the_posts
275
+ */
276
+ public function mla_list_table_prepare_items( $query ) {
277
+ $this->export( wp_list_pluck( $query->items, 'ID' ) );
278
+ }
279
+ } // class ACP_Addon_MLA_Export_Strategy
280
+
281
+ /**
282
+ * Class Admin Columns Addon MLA (Media Library Assistant) Editing Strategy supports the Admin Columns plugin
283
+ *
284
+ * @package Media Library Assistant
285
+ * @since 2.71
286
+ */
287
+ class ACP_Addon_MLA_Editing_Strategy extends ACP_Editing_Strategy_Post {
288
+
289
+ /**
290
+ * Get the available items on the current page for passing them to JS
291
+ *
292
+ * @since 2.71
293
+ *
294
+ * @return array Items on the current page ([entry_id] => (array) [entry_data])
295
+ */
296
+ public function get_rows() {
297
+ global $wp_list_table;
298
+
299
+ // Re-execute the query because the table object can be shared with custom plugins using the MLA filters/actions
300
+ $wp_list_table->prepare_items();
301
+
302
+ return $this->get_editable_rows( $wp_list_table->items );
303
+ }
304
+ } // class ACP_Addon_MLA_Editing_Strategy
305
+
306
+ /**
307
+ * Provides view_settings for MLA's post_title
308
+ *
309
+ * @package Media Library Assistant
310
+ * @since 2.52
311
+ */
312
+ class ACP_Addon_MLA_Editing_Model_Media_Title extends ACP_Editing_Model_Media_Title {
313
+
314
+ /**
315
+ * Remove JavaScript selector settings
316
+ */
317
+ public function get_view_settings() {
318
+ return array(
319
+ 'type' => 'text',
320
+ 'display_ajax' => false,
321
+ );
322
+ }
323
+ }
324
+
325
+ /**
326
+ * Provides export for ID portion of ID/Parent
327
+ *
328
+ * @package Media Library Assistant
329
+ * @since 2.71
330
+ */
331
+ class ACP_Addon_MLA_Column_ID_Parent extends AC_Column
332
+ implements ACP_Export_Column {
333
+
334
+ /**
335
+ * Define column properties
336
+ */
337
+ public function __construct() {
338
+ // Mark as an existing column
339
+ $this->set_original( true );
340
+
341
+ // Type of column
342
+ $this->set_type( 'ID_parent' );
343
+ }
344
+
345
+ /**
346
+ * Support export
347
+ */
348
+ public function export() {
349
+ return new ACP_Export_Model_StrippedValue( $this );
350
+ }
351
+
352
+ /**
353
+ * Supply value for export
354
+ *
355
+ * @param integer $id MLA_List_table item ID
356
+ */
357
+ public function get_raw_value( $id ) {
358
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
359
+ return $item->ID;
360
+ }
361
+ }
362
+
363
+ /**
364
+ * Provides export for Name (slug)
365
+ *
366
+ * @package Media Library Assistant
367
+ * @since 2.71
368
+ */
369
+ class ACP_Addon_MLA_Column_Title_Name extends AC_Column
370
+ implements ACP_Export_Column {
371
+
372
+ /**
373
+ * Define column properties
374
+ */
375
+ public function __construct() {
376
+ $this->set_original( true );
377
+ $this->set_type( 'title_name' );
378
+ }
379
+
380
+ /**
381
+ * Support export
382
+ */
383
+ public function export() {
384
+ return new ACP_Export_Model_StrippedValue( $this );
385
+ }
386
+
387
+ /**
388
+ * Supply value for export
389
+ *
390
+ * @param integer $id MLA_List_table item ID
391
+ */
392
+ public function get_raw_value( $id ) {
393
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
394
+ $errors = $item->mla_references['parent_errors'];
395
+ if ( '(' . __( 'NO REFERENCE TESTS', 'media-library-assistant' ) . ')' == $errors ) {
396
+ $errors = '';
397
+ }
398
+ $format = "%1\$s\n%2\$s\n%3\$s";
399
+ return sprintf( $format, _draft_or_post_title( $item ), esc_attr( $item->post_name ), $errors );
400
+ }
401
+ }
402
+
403
+ /**
404
+ * Provides inline-editing, export for post_title
405
+ *
406
+ * @package Media Library Assistant
407
+ * @since 2.52
408
+ * @since 2.71 Added export
409
+ */
410
+ class ACP_Addon_MLA_Column_Title extends AC_Column_Media_Title
411
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
412
+
413
+ /**
414
+ * Define column properties
415
+ */
416
+ public function __construct() {
417
+ $this->set_original( true );
418
+ $this->set_type( 'post_title' );
419
+ }
420
+
421
+ /**
422
+ * Add inline editing support
423
+ *
424
+ * @return ACP_Editing_Model_Media_Title
425
+ */
426
+ public function editing() {
427
+ return new ACP_Addon_MLA_Editing_Model_Media_Title( $this );
428
+ }
429
+
430
+ /**
431
+ * Support export
432
+ */
433
+ public function export() {
434
+ return new ACP_Export_Model_StrippedValue( $this );
435
+ }
436
+
437
+ /**
438
+ * Supply value for export
439
+ *
440
+ * @param integer $id MLA_List_table item ID
441
+ */
442
+ public function get_raw_value( $id ) {
443
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
444
+ return (string) $item->post_title;
445
+ }
446
+ }
447
+
448
+ /**
449
+ * Provides export for Name (slug)
450
+ *
451
+ * @package Media Library Assistant
452
+ * @since 2.71
453
+ */
454
+ class ACP_Addon_MLA_Column_Name extends AC_Column
455
+ implements ACP_Export_Column {
456
+
457
+ /**
458
+ * Define column properties
459
+ */
460
+ public function __construct() {
461
+ $this->set_original( true );
462
+ $this->set_type( 'post_name' );
463
+ }
464
+
465
+ /**
466
+ * Support export
467
+ */
468
+ public function export() {
469
+ return new ACP_Export_Model_StrippedValue( $this );
470
+ }
471
+
472
+ /**
473
+ * Supply value for export
474
+ *
475
+ * @param integer $id MLA_List_table item ID
476
+ */
477
+ public function get_raw_value( $id ) {
478
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
479
+ return (string) $item->post_name;
480
+ }
481
+ }
482
+
483
+ /**
484
+ * Removes ACP defaults, provides export for post_parent
485
+ *
486
+ * @package Media Library Assistant
487
+ * @since 2.52
488
+ * @since 2.71 Added export
489
+ */
490
+ class ACP_Addon_MLA_Column_Parent extends AC_Column_Media_Parent
491
+ implements ACP_Export_Column {
492
+ /**
493
+ * Remove default column width
494
+ */
495
+ public function register_settings() {
496
+ }
497
+
498
+ /**
499
+ * Support export
500
+ */
501
+ public function export() {
502
+ return new ACP_Export_Model_StrippedValue( $this );
503
+ }
504
+
505
+ /**
506
+ * Supply value for export
507
+ *
508
+ * @param integer $id MLA_List_table item ID
509
+ */
510
+ public function get_raw_value( $id ) {
511
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
512
+ return (string) $item->post_parent;
513
+ }
514
+ }
515
+
516
+ /**
517
+ * Provides inline-editing, export for menu_order
518
+ *
519
+ * @package Media Library Assistant
520
+ * @since 2.52
521
+ * @since 2.71 Added export
522
+ */
523
+ class ACP_Addon_MLA_Column_MenuOrder extends AC_Column
524
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
525
+
526
+ /**
527
+ * Define column properties
528
+ */
529
+ public function __construct() {
530
+ $this->set_original( true );
531
+ $this->set_type( 'menu_order' );
532
+ }
533
+
534
+ /**
535
+ * Add inline editing support
536
+ *
537
+ * @return ACP_Editing_Model_Post_Order
538
+ */
539
+ public function editing() {
540
+ return new ACP_Editing_Model_Post_Order( $this );
541
+ }
542
+
543
+ /**
544
+ * Support export
545
+ */
546
+ public function export() {
547
+ return new ACP_Export_Model_StrippedValue( $this );
548
+ }
549
+
550
+ /**
551
+ * Supply value for export
552
+ *
553
+ * @param integer $id MLA_List_table item ID
554
+ */
555
+ public function get_raw_value( $id ) {
556
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
557
+ return (string) $item->menu_order;
558
+ }
559
+ }
560
+
561
+ /**
562
+ * Provides export for Featured in
563
+ *
564
+ * @package Media Library Assistant
565
+ * @since 2.71
566
+ */
567
+ class ACP_Addon_MLA_Column_Features extends AC_Column
568
+ implements ACP_Export_Column {
569
+
570
+ /**
571
+ * Define column properties
572
+ */
573
+ public function __construct() {
574
+ $this->set_original( true );
575
+ $this->set_type( 'featured' );
576
+ }
577
+
578
+ /**
579
+ * Support export
580
+ */
581
+ public function export() {
582
+ return new ACP_Export_Model_StrippedValue( $this );
583
+ }
584
+
585
+ /**
586
+ * Supply value for export
587
+ *
588
+ * @param integer $id MLA_List_table item ID
589
+ */
590
+ public function get_raw_value( $id ) {
591
+ if ( !MLACore::$process_featured_in ) {
592
+ return __( 'Disabled', 'media-library-assistant' );
593
+ }
594
+
595
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
596
+
597
+ // Move parent to the top of the list
598
+ $features = $item->mla_references['features'];
599
+ if ( isset( $features[ $item->post_parent ] ) ) {
600
+ $parent = $features[ $item->post_parent ];
601
+ unset( $features[ $item->post_parent ] );
602
+ array_unshift( $features, $parent );
603
+ }
604
+
605
+ $format = "%1\$s (%2\$s %3\$s%4\$s%5\$s),\n";
606
+ $value = '';
607
+ foreach ( $features as $feature ) {
608
+ $status = ACP_Addon_MLA_ListScreen::format_post_status( $feature->post_status );
609
+
610
+ if ( $feature->ID == $item->post_parent ) {
611
+ $parent = ", " . __( 'PARENT', 'media-library-assistant' );
612
+ } else {
613
+ $parent = '';
614
+ }
615
+
616
+ $value .= sprintf( $format, esc_attr( $feature->post_title ), esc_attr( $feature->post_type ), $feature->ID, $status, $parent );
617
+ } // foreach $feature
618
+
619
+ return $value;
620
+ }
621
+ }
622
+
623
+ /**
624
+ * Provides export for Inserted in
625
+ *
626
+ * @package Media Library Assistant
627
+ * @since 2.71
628
+ */
629
+ class ACP_Addon_MLA_Column_Inserts extends AC_Column
630
+ implements ACP_Export_Column {
631
+
632
+ /**
633
+ * Define column properties
634
+ */
635
+ public function __construct() {
636
+ $this->set_original( true );
637
+ $this->set_type( 'inserted' );
638
+ }
639
+
640
+ /**
641
+ * Support export
642
+ */
643
+ public function export() {
644
+ return new ACP_Export_Model_StrippedValue( $this );
645
+ }
646
+
647
+ /**
648
+ * Supply value for export
649
+ *
650
+ * @param integer $id MLA_List_table item ID
651
+ */
652
+ public function get_raw_value( $id ) {
653
+ if ( !MLACore::$process_inserted_in ) {
654
+ return __( 'Disabled', 'media-library-assistant' );
655
+ }
656
+
657
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
658
+
659
+ $format = "%1\$s (%2\$s %3\$s%4\$s%5\$s),\n";
660
+ $value = '';
661
+ foreach ( $item->mla_references['inserts'] as $file => $inserts ) {
662
+ if ( 'base' != $item->mla_references['inserted_option'] ) {
663
+ $value .= $file . "\n";
664
+ }
665
+
666
+ // Move parent to the top of the list
667
+ if ( isset( $inserts[ $item->post_parent ] ) ) {
668
+ $parent = $inserts[ $item->post_parent ];
669
+ unset( $inserts[ $item->post_parent ] );
670
+ array_unshift( $inserts, $parent );
671
+ }
672
+
673
+ foreach ( $inserts as $insert ) {
674
+ $status = ACP_Addon_MLA_ListScreen::format_post_status( $insert->post_status );
675
+
676
+ if ( $insert->ID == $item->post_parent ) {
677
+ $parent = ", " . __( 'PARENT', 'media-library-assistant' );
678
+ } else {
679
+ $parent = '';
680
+ }
681
+
682
+ $value .= sprintf( $format, esc_attr( $insert->post_title ), esc_attr( $insert->post_type ), $insert->ID, $status, $parent );
683
+ } // foreach $insert
684
+ } // foreach $file
685
+
686
+ return $value;
687
+ }
688
+ }
689
+
690
+ /**
691
+ * Provides export for Gallery in
692
+ *
693
+ * @package Media Library Assistant
694
+ * @since 2.71
695
+ */
696
+ class ACP_Addon_MLA_Column_Galleries extends AC_Column
697
+ implements ACP_Export_Column {
698
+
699
+ /**
700
+ * Define column properties
701
+ */
702
+ public function __construct() {
703
+ $this->set_original( true );
704
+ $this->set_type( 'galleries' );
705
+ }
706
+
707
+ /**
708
+ * Support export
709
+ */
710
+ public function export() {
711
+ return new ACP_Export_Model_StrippedValue( $this );
712
+ }
713
+
714
+ /**
715
+ * Supply value for export
716
+ *
717
+ * @param integer $id MLA_List_table item ID
718
+ */
719
+ public function get_raw_value( $id ) {
720
+ if ( !MLACore::$process_gallery_in ) {
721
+ return __( 'Disabled', 'media-library-assistant' );
722
+ }
723
+
724
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
725
+
726
+ // Move parent to the top of the list
727
+ $galleries = $item->mla_references['galleries'];
728
+ if ( isset( $galleries[ $item->post_parent ] ) ) {
729
+ $parent = $galleries[ $item->post_parent ];
730
+ unset( $galleries[ $item->post_parent ] );
731
+ array_unshift( $galleries, $parent );
732
+ }
733
+
734
+ $format = "%1\$s (%2\$s %3\$s%4\$s%5\$s),\n";
735
+ $value = '';
736
+ foreach ( $galleries as $ID => $gallery ) {
737
+ $status = ACP_Addon_MLA_ListScreen::format_post_status( $gallery['post_status'] );
738
+
739
+ if ( $gallery['ID'] == $item->post_parent ) {
740
+ $parent = ", " . __( 'PARENT', 'media-library-assistant' );
741
+ } else {
742
+ $parent = '';
743
+ }
744
+
745
+ $value .= sprintf( $format, esc_attr( $gallery['post_title'] ), esc_attr( $gallery['post_type'] ), $gallery['ID'], $status, $parent );
746
+ } // foreach $gallery
747
+
748
+ return $value;
749
+ }
750
+ }
751
+
752
+ /**
753
+ * Provides export for Gallery in
754
+ *
755
+ * @package Media Library Assistant
756
+ * @since 2.71
757
+ */
758
+ class ACP_Addon_MLA_Column_MLA_Galleries extends AC_Column
759
+ implements ACP_Export_Column {
760
+
761
+ /**
762
+ * Define column properties
763
+ */
764
+ public function __construct() {
765
+ $this->set_original( true );
766
+ $this->set_type( 'mla_galleries' );
767
+ }
768
+
769
+ /**
770
+ * Support export
771
+ */
772
+ public function export() {
773
+ return new ACP_Export_Model_StrippedValue( $this );
774
+ }
775
+
776
+ /**
777
+ * Supply value for export
778
+ *
779
+ * @param integer $id MLA_List_table item ID
780
+ */
781
+ public function get_raw_value( $id ) {
782
+ if ( !MLACore::$process_mla_gallery_in ) {
783
+ return __( 'Disabled', 'media-library-assistant' );
784
+ }
785
+
786
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
787
+
788
+ // Move parent to the top of the list
789
+ $mla_galleries = $item->mla_references['mla_galleries'];
790
+ if ( isset( $mla_galleries[ $item->post_parent ] ) ) {
791
+ $parent = $mla_galleries[ $item->post_parent ];
792
+ unset( $mla_galleries[ $item->post_parent ] );
793
+ array_unshift( $mla_galleries, $parent );
794
+ }
795
+
796
+ $format = "%1\$s (%2\$s %3\$s%4\$s%5\$s),\n";
797
+ $value = '';
798
+ foreach ( $mla_galleries as $gallery ) {
799
+ $status = ACP_Addon_MLA_ListScreen::format_post_status( $gallery['post_status'] );
800
+
801
+ if ( $gallery['ID'] == $item->post_parent ) {
802
+ $parent = ", " . __( 'PARENT', 'media-library-assistant' );
803
+ } else {
804
+ $parent = '';
805
+ }
806
+
807
+ $value .= sprintf( $format, esc_attr( $gallery['post_title'] ), esc_attr( $gallery['post_type'] ), $gallery['ID'], $status, $parent );
808
+ } // foreach $gallery
809
+
810
+ return $value;
811
+ }
812
+ }
813
+
814
+ /**
815
+ * Provides inline-editing, export for alt_text
816
+ *
817
+ * @package Media Library Assistant
818
+ * @since 2.52
819
+ * @since 2.71 Added export
820
+ */
821
+ class ACP_Addon_MLA_Column_AltText extends ACP_Column_Media_AlternateText
822
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
823
+
824
+ /**
825
+ * Define column properties
826
+ */
827
+ public function __construct() {
828
+ $this->set_original( true );
829
+ $this->set_type( 'alt_text' );
830
+ }
831
+
832
+ /**
833
+ * Add inline editing support
834
+ *
835
+ * @return ACP_Editing_Model_Media_AlternateText
836
+ */
837
+ public function editing() {
838
+ return new ACP_Editing_Model_Media_AlternateText( $this );
839
+ }
840
+
841
+ /**
842
+ * Support export
843
+ */
844
+ public function export() {
845
+ return new ACP_Export_Model_StrippedValue( $this );
846
+ }
847
+
848
+ /**
849
+ * Supply value for export
850
+ *
851
+ * @param integer $id MLA_List_table item ID
852
+ */
853
+ public function get_raw_value( $id ) {
854
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
855
+
856
+ if ( isset( $item->mla_wp_attachment_image_alt ) ) {
857
+ if ( is_array( $item->mla_wp_attachment_image_alt ) ) {
858
+ $alt_text = $item->mla_wp_attachment_image_alt[0];
859
+ } else {
860
+ $alt_text = $item->mla_wp_attachment_image_alt;
861
+ }
862
+
863
+ return $alt_text;
864
+ }
865
+
866
+ return '';
867
+ }
868
+ }
869
+
870
+ /**
871
+ * Provides inline-editing, export for Caption/Excerpt
872
+ *
873
+ * @package Media Library Assistant
874
+ * @since 2.52
875
+ * @since 2.71 Added export
876
+ */
877
+ class ACP_Addon_MLA_Column_Caption extends ACP_Column_Media_Caption
878
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
879
+
880
+ /**
881
+ * Define column properties
882
+ */
883
+ public function __construct() {
884
+ $this->set_original( true );
885
+ $this->set_type( 'caption' );
886
+ }
887
+
888
+ /**
889
+ * Support export
890
+ */
891
+ public function export() {
892
+ return new ACP_Export_Model_StrippedValue( $this );
893
+ }
894
+
895
+ /**
896
+ * Supply value for export
897
+ *
898
+ * @param integer $id MLA_List_table item ID
899
+ */
900
+ public function get_raw_value( $id ) {
901
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
902
+ return (string) $item->post_excerpt;
903
+ }
904
+ }
905
+
906
+ /**
907
+ * Provides inline-editing, export for Description
908
+ *
909
+ * @package Media Library Assistant
910
+ * @since 2.52
911
+ * @since 2.71 Added export
912
+ */
913
+ class ACP_Addon_MLA_Column_Description extends AC_Column_Media_Description
914
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
915
+
916
+ /**
917
+ * Define column properties
918
+ */
919
+ public function __construct() {
920
+ $this->set_original( true );
921
+ $this->set_type( 'description' );
922
+ }
923
+
924
+ /**
925
+ * Add inline editing and provides export for Description
926
+ *
927
+ * @return ACP_Editing_Model_Post_Content
928
+ */
929
+ public function editing() {
930
+ return new ACP_Editing_Model_Post_Content( $this );
931
+ }
932
+
933
+ /**
934
+ * Support export
935
+ */
936
+ public function export() {
937
+ return new ACP_Export_Model_StrippedValue( $this );
938
+ }
939
+
940
+ /**
941
+ * Supply value for export
942
+ *
943
+ * @param integer $id MLA_List_table item ID
944
+ */
945
+ public function get_raw_value( $id ) {
946
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
947
+ return (string) $item->post_content;
948
+ }
949
+ }
950
+
951
+ /**
952
+ * Provides inline-editing, export for MIME Type
953
+ *
954
+ * @package Media Library Assistant
955
+ * @since 2.52
956
+ * @since 2.71 Added export
957
+ */
958
+ class ACP_Addon_MLA_Column_MimeType extends AC_Column_Media_MimeType
959
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
960
+
961
+ /**
962
+ * Define column properties
963
+ */
964
+ public function __construct() {
965
+ $this->set_original( true );
966
+ $this->set_type( 'post_mime_type' );
967
+ }
968
+
969
+ /**
970
+ * Add inline editing support
971
+ *
972
+ * @return ACP_Editing_Model_Media_MimeType
973
+ */
974
+ public function editing() {
975
+ return new ACP_Editing_Model_Media_MimeType( $this );
976
+ }
977
+
978
+ /**
979
+ * Support export
980
+ */
981
+ public function export() {
982
+ return new ACP_Export_Model_StrippedValue( $this );
983
+ }
984
+
985
+ /**
986
+ * Supply value for export
987
+ *
988
+ * @param integer $id MLA_List_table item ID
989
+ */
990
+ public function get_raw_value( $id ) {
991
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
992
+ return (string) $item->post_mime_type;
993
+ }
994
+ }
995
+
996
+ /**
997
+ * Provides export for File URL
998
+ *
999
+ * @package Media Library Assistant
1000
+ * @since 2.71
1001
+ */
1002
+ class ACP_Addon_MLA_Column_FileURL extends AC_Column
1003
+ implements ACP_Export_Column {
1004
+
1005
+ /**
1006
+ * Define column properties
1007
+ */
1008
+ public function __construct() {
1009
+ $this->set_original( true );
1010
+ $this->set_type( 'file_url' );
1011
+ }
1012
+
1013
+ /**
1014
+ * Support export
1015
+ */
1016
+ public function export() {
1017
+ return new ACP_Export_Model_StrippedValue( $this );
1018
+ }
1019
+
1020
+ /**
1021
+ * Supply value for export
1022
+ *
1023
+ * @param integer $id MLA_List_table item ID
1024
+ */
1025
+ public function get_raw_value( $id ) {
1026
+ $attachment_url = wp_get_attachment_url( $id );
1027
+ return $attachment_url ? $attachment_url : __( 'None', 'media-library-assistant' );
1028
+ }
1029
+ }
1030
+
1031
+ /**
1032
+ * Provides export for Base File
1033
+ *
1034
+ * @package Media Library Assistant
1035
+ * @since 2.71
1036
+ */
1037
+ class ACP_Addon_MLA_Column_Base_File extends AC_Column
1038
+ implements ACP_Export_Column {
1039
+
1040
+ /**
1041
+ * Define column properties
1042
+ */
1043
+ public function __construct() {
1044
+ $this->set_original( true );
1045
+ $this->set_type( 'base_file' );
1046
+ }
1047
+
1048
+ /**
1049
+ * Support export
1050
+ */
1051
+ public function export() {
1052
+ return new ACP_Export_Model_StrippedValue( $this );
1053
+ }
1054
+
1055
+ /**
1056
+ * Supply value for export
1057
+ *
1058
+ * @param integer $id MLA_List_table item ID
1059
+ */
1060
+ public function get_raw_value( $id ) {
1061
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
1062
+ if ( isset( $item->mla_wp_attached_file ) ) {
1063
+ return (string) $item->mla_wp_attached_file;
1064
+ }
1065
+
1066
+ return 'ERROR';
1067
+ }
1068
+ }
1069
+
1070
+ /**
1071
+ * Provides export for Attached to
1072
+ *
1073
+ * @package Media Library Assistant
1074
+ * @since 2.71
1075
+ */
1076
+ class ACP_Addon_MLA_Column_Attached extends AC_Column
1077
+ implements ACP_Export_Column {
1078
+
1079
+ /**
1080
+ * Define column properties
1081
+ */
1082
+ public function __construct() {
1083
+ $this->set_original( true );
1084
+ $this->set_type( 'attached_to' );
1085
+ }
1086
+
1087
+ /**
1088
+ * Support export
1089
+ */
1090
+ public function export() {
1091
+ return new ACP_Export_Model_StrippedValue( $this );
1092
+ }
1093
+
1094
+ /**
1095
+ * Supply value for export
1096
+ *
1097
+ * @param integer $id MLA_List_table item ID
1098
+ */
1099
+ public function get_raw_value( $id ) {
1100
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
1101
+
1102
+ if ( isset( $item->parent_title ) ) {
1103
+ $parent_type = get_post_type_object( $item->parent_type );
1104
+ if ( $parent_type ) {
1105
+ if ( $parent_type->show_ui ) {
1106
+ $user_can_read_parent = current_user_can( 'read_post', $item->post_parent );
1107
+ } else {
1108
+ $user_can_read_parent = true;
1109
+ }
1110
+ } else {
1111
+ $user_can_read_parent = false;
1112
+ }
1113
+
1114
+ if ( $user_can_read_parent ) {
1115
+ $parent_title = esc_attr( $item->parent_title );
1116
+ } else {
1117
+ $parent_title = __( '(Private post)' );
1118
+ }
1119
+
1120
+ if ( isset( $item->parent_date ) && $user_can_read_parent ) {
1121
+ $parent_date = "\n" . mysql2date( __( 'Y/m/d', 'media-library-assistant' ), $item->parent_date );
1122
+ } else {
1123
+ $parent_date = '';
1124
+ }
1125
+
1126
+ if ( isset( $item->parent_type ) && $user_can_read_parent ) {
1127
+ $parent_type = "\n" . '(' . $item->parent_type . ' ' . (string) $item->post_parent . ACP_Addon_MLA_ListScreen::format_post_status( $item->parent_status ) . ')';
1128
+ } else {
1129
+ $parent_type = '';
1130
+ }
1131
+
1132
+ $parent = sprintf( '%1$s%2$s%3$s', /*%1$s*/ $parent_title, /*%2$s*/ $parent_date, /*%3$s*/ $parent_type );
1133
+ } else {
1134
+ $parent = '(' . _x( 'Unattached', 'table_view_singular', 'media-library-assistant' ) . ')';
1135
+ }
1136
+
1137
+ return $parent;
1138
+ }
1139
+ }
1140
+
1141
+ /**
1142
+ * Removes ACP defaults and provides export for date
1143
+ *
1144
+ * @package Media Library Assistant
1145
+ * @since 2.52
1146
+ * @since 2.71 Added export
1147
+ */
1148
+ class ACP_Addon_MLA_Column_Date extends ACP_Column_Media_Date
1149
+ implements ACP_Export_Column {
1150
+
1151
+ /**
1152
+ * Remove default column width
1153
+ */
1154
+ public function register_settings() {
1155
+ }
1156
+
1157
+ /**
1158
+ * Support export
1159
+ */
1160
+ public function export() {
1161
+ return new ACP_Export_Model_StrippedValue( $this );
1162
+ }
1163
+
1164
+ /**
1165
+ * Supply value for export
1166
+ *
1167
+ * @param integer $id MLA_List_table item ID
1168
+ */
1169
+ public function get_raw_value( $id ) {
1170
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
1171
+ return (string) $item->post_date;
1172
+ }
1173
+ }
1174
+
1175
+ /**
1176
+ * Provides export for Last Modified date
1177
+ *
1178
+ * @package Media Library Assistant
1179
+ * @since 2.71
1180
+ */
1181
+ class ACP_Addon_MLA_Column_Modified extends AC_Column
1182
+ implements ACP_Export_Column {
1183
+
1184
+ /**
1185
+ * Define column properties
1186
+ */
1187
+ public function __construct() {
1188
+ $this->set_original( true );
1189
+ $this->set_type( 'modified' );
1190
+ }
1191
+
1192
+ /**
1193
+ * Support export
1194
+ */
1195
+ public function export() {
1196
+ return new ACP_Export_Model_StrippedValue( $this );
1197
+ }
1198
+
1199
+ /**
1200
+ * Supply value for export
1201
+ *
1202
+ * @param integer $id MLA_List_table item ID
1203
+ */
1204
+ public function get_raw_value( $id ) {
1205
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
1206
+ return (string) $item->post_modified;
1207
+ }
1208
+ }
1209
+
1210
+ /**
1211
+ * Removes ACP defaults & provides inline-editing, export for Author name
1212
+ *
1213
+ * @package Media Library Assistant
1214
+ * @since 2.52
1215
+ * @since 2.71 Added export
1216
+ */
1217
+ class ACP_Addon_MLA_Column_Author extends AC_Column_Media_Author
1218
+ implements ACP_Column_EditingInterface, ACP_Export_Column {
1219
+
1220
+ /**
1221
+ * Remove default column width
1222
+ */
1223
+ public function register_settings() {
1224
+ }
1225
+
1226
+ /**
1227
+ * Add inline editing support
1228
+ *
1229
+ * @return ACP_Editing_Model_Post_Author
1230
+ */
1231
+ public function editing() {
1232
+ return new ACP_Editing_Model_Post_Author( $this );
1233
+ }
1234
+
1235
+ /**
1236
+ * Support export
1237
+ */
1238
+ public function export() {
1239
+ return new ACP_Export_Model_StrippedValue( $this );
1240
+ }
1241
+
1242
+ /**
1243
+ * Supply value for export
1244
+ *
1245
+ * @param integer $id MLA_List_table item ID
1246
+ */
1247
+ public function get_raw_value( $id ) {
1248
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
1249
+ $user = get_user_by( 'id', $item->post_author );
1250
+
1251
+ if ( isset( $user->data->display_name ) ) {
1252
+ return $user->data->display_name;
1253
+ }
1254
+
1255
+ return 'unknown';
1256
+ }
1257
+ }
1258
+
1259
+ /**
1260
+ * Provides export for supported taxonomies
1261
+ *
1262
+ * @package Media Library Assistant
1263
+ * @since 2.71
1264
+ */
1265
+ class ACP_Addon_MLA_Column_Taxonomy extends AC_Column
1266
+ implements ACP_Export_Column {
1267
+
1268
+ /**
1269
+ * Define column properties
1270
+ *
1271
+ * set_type( 't_' . taxonomy ) is done by the calling function.
1272
+ */
1273
+ public function __construct() {
1274
+ $this->set_original( true );
1275
+ }
1276
+
1277
+ /**
1278
+ * Extract taxonomy slug from type name
1279
+ *
1280
+ * @return string Taxonomy name/slug
1281
+ */
1282
+ public function get_taxonomy() {
1283
+ return substr( $this->get_type(), 2 );
1284
+ }
1285
+
1286
+ /**
1287
+ * Does this post type have registered taxonomies
1288
+ *
1289
+ * @return bool True when post type has associated taxonomies
1290
+ */
1291
+ public function is_valid() {
1292
+ return true;
1293
+ }
1294
+
1295
+ /**
1296
+ * Support export
1297
+ */
1298
+ public function export() {
1299
+ return new ACP_Export_Model_StrippedValue( $this );
1300
+ }
1301
+
1302
+ /**
1303
+ * Supply value for export
1304
+ *
1305
+ * @param integer $id MLA_List_table item ID
1306
+ */
1307
+ public function get_raw_value( $id ) {
1308
+ $terms = wp_get_post_terms( $id, $this->get_taxonomy(), array( 'fields' => 'names' ) );
1309
+
1310
+ if ( ! $terms || is_wp_error( $terms ) ) {
1311
+ return '';
1312
+ }
1313
+
1314
+ return implode( ', ', $terms );
1315
+ }
1316
+ }
1317
+
1318
+ /**
1319
+ * Provides export for supported custom fields
1320
+ *
1321
+ * @package Media Library Assistant
1322
+ * @since 2.71
1323
+ */
1324
+ class ACP_Addon_MLA_Column_CustomField extends AC_Column
1325
+ implements ACP_Export_Column {
1326
+
1327
+ /**
1328
+ * Define column properties
1329
+ *
1330
+ * set_type( 'c_' . field number ) is done by the calling function.
1331
+ */
1332
+ public function __construct() {
1333
+ $this->set_original( true );
1334
+ }
1335
+
1336
+ /**
1337
+ * Does this post type support custom fields
1338
+ *
1339
+ * @return bool True when post type has custom fields
1340
+ */
1341
+ public function is_valid() {
1342
+ return true;
1343
+ }
1344
+
1345
+ /**
1346
+ * Support export
1347
+ */
1348
+ public function export() {
1349
+ return new ACP_Export_Model_StrippedValue( $this );
1350
+ }
1351
+
1352
+ /**
1353
+ * Supply value for export
1354
+ *
1355
+ * @param integer $id MLA_List_table item ID
1356
+ */
1357
+ public function get_raw_value( $id ) {
1358
+ static $custom_columns = NULL;
1359
+
1360
+ if ( NULL === $custom_columns ) {
1361
+ $custom_columns = MLACore::mla_custom_field_support( 'custom_columns' );
1362
+ }
1363
+
1364
+ $column_name = $this->get_name();
1365
+ $item = ACP_Addon_MLA_ListScreen::get_item( $id );
1366
+
1367
+ if ( 'meta:' == substr( $custom_columns[ $column_name ], 0, 5 ) ) {
1368
+ $is_meta = true;
1369
+ $meta_key = substr( $custom_columns[ $column_name ], 5 );
1370
+
1371
+ if ( !empty( $item->mla_wp_attachment_metadata ) ) {
1372
+ $values = MLAData::mla_find_array_element( $meta_key, $item->mla_wp_attachment_metadata, 'array' );
1373
+
1374
+ if ( is_scalar( $values ) ) {
1375
+ $values = array( $values );
1376
+ }
1377
+ } else {
1378
+ $values = NULL;
1379
+ }
1380
+ } else {
1381
+ $is_meta = false;
1382
+ $values = get_post_meta( $item->ID, $custom_columns[ $column_name ], false );
1383
+ }
1384
+
1385
+ if ( empty( $values ) ) {
1386
+ return '';
1387
+ }
1388
+
1389
+ $list = array();
1390
+ foreach ( $values as $index => $value ) {
1391
+ /*
1392
+ * For display purposes, convert array values.
1393
+ * Use "@" because embedded arrays throw PHP Warnings from implode.
1394
+ */
1395
+ if ( is_array( $value ) ) {
1396
+ $list[] = 'array( ' . @implode( ', ', $value ) . ' )'; // TODO PHP 7 error handling
1397
+ } elseif ( $is_meta ) {
1398
+ $list[] = $value;
1399
+ } else {
1400
+ $list[] = esc_html( $value );
1401
+ }
1402
+ }
1403
+
1404
+ if ( count( $list ) > 1 ) {
1405
+ return '[' . join( '], [', $list ) . ']';
1406
+ } else {
1407
+ return $list[0];
1408
+ }
1409
+ }
1410
+ }
1411
+ ?>
includes/class-mla-admin-columns-support.php CHANGED
@@ -7,31 +7,6 @@
7
  */
8
  defined( 'ABSPATH' ) or die();
9
 
10
- if ( class_exists( 'ACP_Editing_Strategy' ) ) {
11
- /**
12
- * Class Admin Columns Addon MLA (Media Library Assistant) Editing Strategy supports the Admin Columns plugin
13
- *
14
- * @package Media Library Assistant
15
- * @since 2.50
16
- */
17
- class ACP_Addon_MLA_Editing_Strategy extends ACP_Editing_Strategy_Post {
18
-
19
- /**
20
- * Get the available items on the current page for passing them to JS
21
- *
22
- * @since 2.50
23
- *
24
- * @return array Items on the current page ([entry_id] => (array) [entry_data])
25
- */
26
- public function get_rows() {
27
- $table = $this->column->get_list_screen()->get_list_table();
28
- $table->prepare_items();
29
-
30
- return $this->get_editable_rows( $table->items );
31
- }
32
- } // class ACP_Addon_MLA_Editing_Strategy
33
- }
34
-
35
  /**
36
  * Class Admin Columns Addon MLA (Media Library Assistant) List Screen supports the Admin Columns plugin
37
  *
@@ -49,20 +24,13 @@ class AC_Addon_MLA_ListScreen extends AC_ListScreen_Media {
49
  public function __construct() {
50
  parent::__construct();
51
 
52
- $this->set_screen_id( 'media_page_' . MLACore::ADMIN_PAGE_SLUG );
53
  $this->set_key( 'mla-media-assistant' );
54
- $this->set_group( 'media' );
55
  $this->set_label( __( 'Media Library Assistant' ) );
56
  $this->set_singular_label( __( 'Assistant' ) );
 
57
  $this->set_page( MLACore::ADMIN_PAGE_SLUG );
58
 
59
- /** @see MLA_List_Table */
60
- $this->set_list_table_class( 'MLA_List_Table' );
61
-
62
- add_action( 'acp/column_types', 'AC_Addon_MLA_ListScreen::inline_column_types', 10, 1 );
63
- add_action( 'acp/column_types', 'AC_Addon_MLA_ListScreen::remove_column_types', 10, 1 );
64
- add_action( 'ac/column_types', 'AC_Addon_MLA_ListScreen::remove_column_types', 10, 1 );
65
- add_filter( 'ac/column/custom_field/meta_keys', 'AC_Addon_MLA_ListScreen::remove_custom_columns', 10, 2 );
66
  }
67
 
68
  /**
@@ -74,6 +42,50 @@ class AC_Addon_MLA_ListScreen extends AC_ListScreen_Media {
74
  add_filter( 'mla_list_table_column_default', array( $this, 'column_default_value' ), 100, 3 );
75
  }
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  /**
78
  * Remove duplicate columns from the Admin Columns "Custom" section
79
  *
@@ -81,39 +93,40 @@ class AC_Addon_MLA_ListScreen extends AC_ListScreen_Media {
81
  *
82
  * @param AC_ListScreen $listscreen
83
  */
84
- public static function remove_column_types( $listscreen ) {
85
- if ( $listscreen instanceof AC_Addon_MLA_ListScreen ) {
86
- $exclude = array(
87
- 'comments',
88
- 'title',
89
- 'column-actions',
90
- 'column-alternate_text',
91
- 'column-attached_to',
92
- 'column-author_name',
93
- 'column-caption',
94
- 'column-description',
95
- 'column-file_name',
96
- 'column-full_path',
97
- 'column-mediaid',
98
- 'column-mime_type',
99
- 'column-taxonomy',
100
-
101
- /*
102
- 'column-meta',
103
- 'column-available_sizes',
104
- 'column-dimensions',
105
- 'column-exif_data',
106
- 'column-file_size',
107
- 'column-height',
108
- 'column-image',
109
- 'column-used_by_menu',
110
- 'column-width',
111
- */
112
- );
113
-
114
- foreach ( $exclude as $column_type ) {
115
- $listscreen->deregister_column_type( $column_type );
116
- }
 
117
  }
118
  }
119
 
@@ -122,10 +135,9 @@ class AC_Addon_MLA_ListScreen extends AC_ListScreen_Media {
122
  *
123
  * @since 2.52
124
  *
125
- * @param array $keys Distinct meta keys from DB
126
- * @param AC_Settings_Column_CustomField $this_customfield
127
  */
128
- public static function remove_custom_columns( $keys, $this_customfield ) {
129
  // Find the fields already present in the submenu table
130
  $mla_columns = apply_filters( 'mla_list_table_get_columns', MLAQuery::$default_columns );
131
  $mla_custom = array();
@@ -162,65 +174,15 @@ class AC_Addon_MLA_ListScreen extends AC_ListScreen_Media {
162
  }
163
 
164
  /**
165
- * Return the column value
166
- *
167
- * @param string|null $content
168
- * @param WP_Post $post
169
- * @param string $column_name
170
- *
171
- * @return string|false
172
- */
173
- public function column_default_value( $content, $post, $column_name ) {
174
- if ( is_null( $content ) ) {
175
- $content = $this->get_display_value_by_column_name( $column_name, $post->ID );
176
- }
177
-
178
- return $content;
179
- }
180
-
181
-
182
- /**
183
- * Create and return a new MLA List Table object
184
- *
185
- * @param array $args
186
- *
187
- * @return WP_List_Table|false
188
- */
189
- public function get_list_table( $args = array() ) {
190
- $class = $this->get_list_table_class();
191
-
192
- if ( ! class_exists( $class ) ) {
193
- require_once( MLA_PLUGIN_PATH . 'includes/class-mla-list-table.php' );
194
- MLA_List_Table::mla_admin_init_action();
195
- }
196
-
197
- return new $class;
198
- }
199
-
200
- /**
201
- * Test for current screen = the Media/Assistant submenu screen,
202
- * For Admin Columns 2.4.9+
203
  *
204
- * @since 2.23
205
- *
206
- * @param object $wp_screen
207
- *
208
- * @return boolean true if the Media/Assistant submenu is the current screen
209
- */
210
- public function is_current_screen( $wp_screen ) {
211
- return $wp_screen && $wp_screen->id === $this->get_screen_id();
212
- }
213
-
214
- /**
215
- * Return
216
- *
217
- * @since 2.52
218
  *
219
  * @param integer $post_id
220
  *
221
  * @return object attachment object
222
  */
223
- protected function get_object_by_id( $post_id ) {
224
  // Author column depends on this global to be set.
225
  global $authordata;
226
 
@@ -235,269 +197,15 @@ class AC_Addon_MLA_ListScreen extends AC_ListScreen_Media {
235
  }
236
 
237
  /**
238
- * Add inline editing columns to Media/Assistant submenu table
239
- *
240
- * @since 2.52
241
- *
242
- * @param AC_ListScreen $listscreen
243
- */
244
- public static function inline_column_types( $listscreen ) {
245
- if ( $listscreen instanceof AC_Addon_MLA_ListScreen ) {
246
- if ( class_exists( 'ACP_Editing_Model_Media_Title' ) ) {
247
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_Title() );
248
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_Parent() );
249
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_MenuOrder() );
250
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_AltText() );
251
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_Caption() );
252
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_Description() );
253
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_MimeType() );
254
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_Date() );
255
- $listscreen->register_column_type( new ACP_Addon_MLA_Column_Author() );
256
- }
257
- }
258
- }
259
- } // class AC_Addon_MLA_ListScreen
260
-
261
- if ( class_exists( 'ACP_Editing_Model_Media_Title' ) ) {
262
- /**
263
- * Provides view_settings for MLA's post_title
264
- *
265
- * @package Media Library Assistant
266
- * @since 2.52
267
- */
268
- class ACP_Addon_MLA_Editing_Model_Media_Title extends ACP_Editing_Model_Media_Title {
269
-
270
- /**
271
- * Remove JavaScript selector settings
272
- */
273
- public function get_view_settings() {
274
- return array(
275
- 'type' => 'text',
276
- 'display_ajax' => false,
277
- );
278
- }
279
- }
280
-
281
- /**
282
- * Provides inline-editing for post_title
283
- *
284
- * @package Media Library Assistant
285
- * @since 2.52
286
- */
287
- class ACP_Addon_MLA_Column_Title extends AC_Column_Media_Title
288
- implements ACP_Column_EditingInterface {
289
-
290
- /**
291
- * Define column properties
292
- */
293
- public function __construct() {
294
-
295
- // Mark as an existing column
296
- $this->set_original( true );
297
-
298
- // Type of column
299
- $this->set_type( 'post_title' );
300
- }
301
-
302
- /**
303
- * Add inline editing support
304
- *
305
- * @return ACP_Editing_Model_Media_Title
306
- */
307
- public function editing() {
308
- return new ACP_Addon_MLA_Editing_Model_Media_Title( $this );
309
- }
310
-
311
- }
312
-
313
- /**
314
- * Removes ACP defaults for parent
315
  *
316
- * @package Media Library Assistant
317
  * @since 2.52
318
- */
319
- class ACP_Addon_MLA_Column_Parent extends AC_Column_Media_Parent {
320
- /**
321
- * Remove default column width
322
- */
323
- public function register_settings() {
324
- }
325
- }
326
-
327
- /**
328
- * Provides inline-editing for menu_order
329
  *
330
- * @package Media Library Assistant
331
- * @since 2.52
332
- */
333
- class ACP_Addon_MLA_Column_MenuOrder extends AC_Column
334
- implements ACP_Column_EditingInterface {
335
-
336
- /**
337
- * Define column properties
338
- */
339
- public function __construct() {
340
-
341
- // Mark as an existing column
342
- $this->set_original( true );
343
-
344
- // Type of column
345
- $this->set_type( 'menu_order' );
346
- }
347
-
348
- /**
349
- * Add inline editing support
350
- *
351
- * @return ACP_Editing_Model_Post_Order
352
- */
353
- public function editing() {
354
- return new ACP_Editing_Model_Post_Order( $this );
355
- }
356
-
357
- }
358
-
359
- /**
360
- * Provides inline-editing for alt_text
361
- *
362
- * @package Media Library Assistant
363
- * @since 2.52
364
- */
365
- class ACP_Addon_MLA_Column_AltText extends ACP_Column_Media_AlternateText
366
- implements ACP_Column_EditingInterface {
367
-
368
- /**
369
- * Define column properties
370
- */
371
- public function __construct() {
372
-
373
- // Mark as an existing column
374
- $this->set_original( true );
375
-
376
- // Type of column
377
- $this->set_type( 'alt_text' );
378
- }
379
- }
380
-
381
- /**
382
- * Provides inline-editing for caption
383
- *
384
- * @package Media Library Assistant
385
- * @since 2.52
386
- */
387
- class ACP_Addon_MLA_Column_Caption extends ACP_Column_Media_Caption
388
- implements ACP_Column_EditingInterface {
389
-
390
- /**
391
- * Define column properties
392
- */
393
- public function __construct() {
394
-
395
- // Mark as an existing column
396
- $this->set_original( true );
397
-
398
- // Type of column
399
- $this->set_type( 'caption' );
400
- }
401
- }
402
-
403
- /**
404
- * Provides inline-editing for caption
405
- *
406
- * @package Media Library Assistant
407
- * @since 2.52
408
- */
409
- class ACP_Addon_MLA_Column_Description extends AC_Column_Media_Description
410
- implements ACP_Column_EditingInterface {
411
-
412
- /**
413
- * Define column properties
414
- */
415
- public function __construct() {
416
-
417
- // Mark as an existing column
418
- $this->set_original( true );
419
-
420
- // Type of column
421
- $this->set_type( 'description' );
422
- }
423
-
424
- /**
425
- * Add inline editing support
426
- *
427
- * @return ACP_Editing_Model_Post_Content
428
- */
429
- public function editing() {
430
- return new ACP_Editing_Model_Post_Content( $this );
431
- }
432
- }
433
-
434
- /**
435
- * Provides inline-editing for caption
436
- *
437
- * @package Media Library Assistant
438
- * @since 2.52
439
- */
440
- class ACP_Addon_MLA_Column_MimeType extends AC_Column_Media_MimeType
441
- implements ACP_Column_EditingInterface {
442
-
443
- /**
444
- * Define column properties
445
- */
446
- public function __construct() {
447
-
448
- // Mark as an existing column
449
- $this->set_original( true );
450
-
451
- // Type of column
452
- $this->set_type( 'post_mime_type' );
453
- }
454
-
455
- /**
456
- * Add inline editing support
457
- *
458
- * @return ACP_Editing_Model_Post_Content
459
- */
460
- public function editing() {
461
- return new ACP_Editing_Model_Media_MimeType( $this );
462
- }
463
- }
464
-
465
- /**
466
- * Removes ACP defaults for date
467
- *
468
- * @package Media Library Assistant
469
- * @since 2.52
470
- */
471
- class ACP_Addon_MLA_Column_Date extends ACP_Column_Media_Date {
472
- /**
473
- * Remove default column width
474
- */
475
- public function register_settings() {
476
- }
477
- }
478
-
479
- /**
480
- * Removes ACP defaults & provides inline-editing for caption
481
  *
482
- * @package Media Library Assistant
483
- * @since 2.52
484
  */
485
- class ACP_Addon_MLA_Column_Author extends AC_Column_Media_Author
486
- implements ACP_Column_EditingInterface {
487
-
488
- /**
489
- * Remove default column width
490
- */
491
- public function register_settings() {
492
- }
493
-
494
- /**
495
- * Add inline editing support
496
- *
497
- * @return ACP_Editing_Model_Post_Content
498
- */
499
- public function editing() {
500
- return new ACP_Editing_Model_Post_Author( $this );
501
- }
502
  }
503
- }
7
  */
8
  defined( 'ABSPATH' ) or die();
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  /**
11
  * Class Admin Columns Addon MLA (Media Library Assistant) List Screen supports the Admin Columns plugin
12
  *
24
  public function __construct() {
25
  parent::__construct();
26
 
 
27
  $this->set_key( 'mla-media-assistant' );
 
28
  $this->set_label( __( 'Media Library Assistant' ) );
29
  $this->set_singular_label( __( 'Assistant' ) );
30
+ $this->set_screen_id( 'media_page_' . MLACore::ADMIN_PAGE_SLUG );
31
  $this->set_page( MLACore::ADMIN_PAGE_SLUG );
32
 
33
+ add_filter( 'ac/column/custom_field/meta_keys', 'AC_Addon_MLA_ListScreen::remove_custom_columns', 10, 1 );
 
 
 
 
 
 
34
  }
35
 
36
  /**
42
  add_filter( 'mla_list_table_column_default', array( $this, 'column_default_value' ), 100, 3 );
43
  }
44
 
45
+ /**
46
+ * Create and return a new MLA List Table object
47
+ *
48
+ * @param array $args
49
+ *
50
+ * @return WP_List_Table|false
51
+ */
52
+ public function get_list_table( $args = array() ) {
53
+ global $wp_list_table;
54
+
55
+ if ( ! class_exists( 'MLA_List_Table' ) ) {
56
+ require_once( MLA_PLUGIN_PATH . 'includes/class-mla-list-table.php' );
57
+ MLA_List_Table::mla_admin_init_action();
58
+ }
59
+
60
+ if ( $wp_list_table instanceof MLA_List_Table ) {
61
+ return $wp_list_table;
62
+ }
63
+
64
+ $list_table = new MLA_List_Table();
65
+ $list_table->prepare_items();
66
+
67
+ // Don't show the Export button before 4.2.3
68
+ if ( function_exists( 'ACP' ) && version_compare( ACP()->get_version(), '4.2.3', '<' ) ) {
69
+ $wp_list_table = NULL;
70
+ }
71
+
72
+ return $list_table;
73
+ }
74
+
75
+ /**
76
+ * Test for current screen = the Media/Assistant submenu screen,
77
+ * For Admin Columns 2.4.9+
78
+ *
79
+ * @since 2.23
80
+ *
81
+ * @param object $wp_screen
82
+ *
83
+ * @return boolean true if the Media/Assistant submenu is the current screen
84
+ */
85
+ public function is_current_screen( $wp_screen ) {
86
+ return $wp_screen && $wp_screen->id === $this->get_screen_id();
87
+ }
88
+
89
  /**
90
  * Remove duplicate columns from the Admin Columns "Custom" section
91
  *
93
  *
94
  * @param AC_ListScreen $listscreen
95
  */
96
+ public function register_column_types() {
97
+ parent::register_column_types();
98
+ //error_log( __LINE__ . ' AC_Addon_MLA_ListScreen::register_column_types ' . var_export( array_keys( $this->get_column_types() ), true ), 0 );
99
+
100
+ $exclude = array(
101
+ 'comments',
102
+ 'title',
103
+ 'column-actions',
104
+ 'column-alternate_text',
105
+ 'column-attached_to',
106
+ 'column-author_name',
107
+ 'column-caption',
108
+ 'column-description',
109
+ 'column-file_name',
110
+ 'column-full_path',
111
+ 'column-mediaid',
112
+ 'column-mime_type',
113
+ 'column-taxonomy',
114
+
115
+ /*
116
+ 'column-meta',
117
+ 'column-available_sizes',
118
+ 'column-dimensions',
119
+ 'column-exif_data',
120
+ 'column-file_size',
121
+ 'column-height',
122
+ 'column-image',
123
+ 'column-used_by_menu',
124
+ 'column-width',
125
+ */
126
+ );
127
+
128
+ foreach ( $exclude as $column_type ) {
129
+ $this->deregister_column_type( $column_type );
130
  }
131
  }
132
 
135
  *
136
  * @since 2.52
137
  *
138
+ * @param array $keys Distinct meta keys from DB
 
139
  */
140
+ public static function remove_custom_columns( $keys ) {
141
  // Find the fields already present in the submenu table
142
  $mla_columns = apply_filters( 'mla_list_table_get_columns', MLAQuery::$default_columns );
143
  $mla_custom = array();
174
  }
175
 
176
  /**
177
+ * Return an MLA version of a Media Library item
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  *
179
+ * @since 2.71
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  *
181
  * @param integer $post_id
182
  *
183
  * @return object attachment object
184
  */
185
+ public function get_object( $post_id ) {
186
  // Author column depends on this global to be set.
187
  global $authordata;
188
 
197
  }
198
 
199
  /**
200
+ * Return an MLA version of a Media Library item for older Admin Columns versions
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  *
 
202
  * @since 2.52
 
 
 
 
 
 
 
 
 
 
 
203
  *
204
+ * @param integer $post_id
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  *
206
+ * @return object attachment object
 
207
  */
208
+ protected function get_object_by_id( $post_id ) {
209
+ return $this->get_object( $post_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  }
211
+ } // class AC_Addon_MLA_ListScreen
includes/class-mla-ajax.php CHANGED
@@ -32,6 +32,8 @@ class MLA_Ajax {
32
  * @return void
33
  */
34
  public static function initialize() {
 
 
35
  add_action( 'admin_init', 'MLA_Ajax::mla_admin_init_action' );
36
 
37
  // Defined here because the "admin_init" action is not called for item transfers
32
  * @return void
33
  */
34
  public static function initialize() {
35
+ $ajax_only = var_export( self::$ajax_only, true );
36
+ MLACore::mla_debug_add( __LINE__ . " MLA_Ajax::initialize( {$ajax_only} ) \$_REQUEST = " . var_export( $_REQUEST, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
37
  add_action( 'admin_init', 'MLA_Ajax::mla_admin_init_action' );
38
 
39
  // Defined here because the "admin_init" action is not called for item transfers
includes/class-mla-core-options.php CHANGED
@@ -613,6 +613,19 @@ class MLACoreOptions {
613
  'texts' => array( __( 'Ascending', 'media-library-assistant' ), __( 'Descending', 'media-library-assistant' ) ),
614
  'help' => __( 'Choose the sort order.', 'media-library-assistant' )),
615
 
 
 
 
 
 
 
 
 
 
 
 
 
 
616
  self::MLA_TABLE_VIEWS_WIDTH =>
617
  array('tab' => 'general',
618
  'name' => __( 'Views Width', 'media-library-assistant' ),
@@ -1201,6 +1214,13 @@ class MLACoreOptions {
1201
  'iptc_first' => true,
1202
  'keep_existing' => true
1203
  ),
 
 
 
 
 
 
 
1204
  ),
1205
  'taxonomy' => array (
1206
  ),
@@ -1350,7 +1370,7 @@ class MLACoreOptions {
1350
  'type' => 'text',
1351
  'std' => '',
1352
  'size' => 60,
1353
- 'help' => __( 'Enter the name of an alternate, MLA-specific debug log file; leave blank to use the PHP error_log.', 'media-library-assistant' )),
1354
 
1355
  self::MLA_DEBUG_REPLACE_PHP_LOG =>
1356
  array('tab' => 'debug',
613
  'texts' => array( __( 'Ascending', 'media-library-assistant' ), __( 'Descending', 'media-library-assistant' ) ),
614
  'help' => __( 'Choose the sort order.', 'media-library-assistant' )),
615
 
616
+ 'entries_per_page' =>
617
+ array('tab' => 'general',
618
+ 'name' => __( 'Entries per page', 'media-library-assistant' ),
619
+ 'autoload' => true,
620
+ 'std' => '10',
621
+ 'size' => 2,
622
+ 'help' => __( 'Enter the number of Media/Assistant submenu table items per page.', 'media-library-assistant' ),
623
+ 'type' => 'custom',
624
+ 'render' => 'mla_entries_per_page_handler',
625
+ 'update' => 'mla_entries_per_page_handler',
626
+ 'delete' => 'mla_entries_per_page_handler',
627
+ 'reset' => 'mla_entries_per_page_handler'),
628
+
629
  self::MLA_TABLE_VIEWS_WIDTH =>
630
  array('tab' => 'general',
631
  'name' => __( 'Views Width', 'media-library-assistant' ),
1214
  'iptc_first' => true,
1215
  'keep_existing' => true
1216
  ),
1217
+ 'post_date' => array (
1218
+ 'name' => __( 'Uploaded on', 'media-library-assistant' ),
1219
+ 'iptc_value' => 'none',
1220
+ 'exif_value' => '',
1221
+ 'iptc_first' => true,
1222
+ 'keep_existing' => false
1223
+ ),
1224
  ),
1225
  'taxonomy' => array (
1226
  ),
1370
  'type' => 'text',
1371
  'std' => '',
1372
  'size' => 60,
1373
+ 'help' => __( 'Enter the name of an alternate, MLA-specific debug log file; leave blank to use the PHP error_log.<br>&nbsp;&nbsp;The WP_CONTENT_DIR value (below) will be prepended to the value here, e.g., enter something like "/uploads/mla.log".', 'media-library-assistant' )),
1374
 
1375
  self::MLA_DEBUG_REPLACE_PHP_LOG =>
1376
  array('tab' => 'debug',
includes/class-mla-core.php CHANGED
@@ -21,7 +21,7 @@ class MLACore {
21
  *
22
  * @var string
23
  */
24
- const CURRENT_MLA_VERSION = '2.70';
25
 
26
  /**
27
  * Slug for registering and enqueueing plugin style sheets (moved from class-mla-main.php)
@@ -113,6 +113,15 @@ class MLACore {
113
  */
114
  const MLA_DEBUG_CATEGORY_WHERE_USED = 0x00000040;
115
 
 
 
 
 
 
 
 
 
 
116
  /**
117
  * Slug for adding plugin submenu
118
  *
@@ -618,6 +627,28 @@ class MLACore {
618
  } // MLA_DEBUG_LEVEL & 1
619
  }
620
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
621
  /**
622
  * Filter the redirect location.
623
  *
@@ -1635,6 +1666,7 @@ class MLACore {
1635
 
1636
  /**
1637
  * Define the Media/Assistant submenu screen to the (old) Admin Columns plugin
 
1638
  *
1639
  * @since 2.22
1640
  *
@@ -1673,32 +1705,31 @@ class MLACore {
1673
  return $new_models;
1674
  }
1675
 
1676
- /**
1677
- * Set MLA-specific inline editing strategy
1678
- *
1679
- * @since 2.50
1680
- *
1681
- * @param ACP_Editing_Model $model
1682
- */
1683
- public static function add_editing_strategy( $model ) {
1684
- //error_log( __LINE__ . " MLACore::add_editing_strategy key = " . var_export( $model->get_column()->get_list_screen()->get_key(), true ), 0 );
1685
- if ( 'mla-media-assistant' === $model->get_column()->get_list_screen()->get_key() ) {
1686
- require_once( MLA_PLUGIN_PATH . 'includes/class-mla-admin-columns-support.php' );
1687
- $model->set_strategy( new ACP_Addon_MLA_Editing_Strategy( $model ) );
1688
- }
1689
-
1690
- return $model;
1691
- }
1692
-
1693
  /**
1694
  * Create and register MLA-specific list screen handler for Admin Columns
 
1695
  *
1696
  * @since 2.50
1697
  */
1698
  public static function register_list_screen() {
1699
- //error_log( __LINE__ . " MLACore::register_list_screen", 0 );
1700
  require_once( MLA_PLUGIN_PATH . 'includes/class-mla-admin-columns-support.php' );
1701
- AC()->register_list_screen( new AC_Addon_MLA_ListScreen );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1702
  }
1703
  } // Class MLACore
1704
 
@@ -1786,7 +1817,5 @@ add_action( 'init', 'MLAMime::initialize', 0x7FFFFFFF );
1786
  * Admin Columns plugin support
1787
  */
1788
  add_filter( 'cac/storage_models', 'MLACore::admin_columns_support_deprecated', 10, 2 );
1789
-
1790
- add_filter( 'acp/editing/model', 'MLACore::add_editing_strategy', 10, 1 );
1791
  add_action( 'ac/list_screens', 'MLACore::register_list_screen', 10, 0 );
1792
  ?>
21
  *
22
  * @var string
23
  */
24
+ const CURRENT_MLA_VERSION = '2.72';
25
 
26
  /**
27
  * Slug for registering and enqueueing plugin style sheets (moved from class-mla-main.php)
113
  */
114
  const MLA_DEBUG_CATEGORY_WHERE_USED = 0x00000040;
115
 
116
+ /**
117
+ * Constant to log Uploads and Views MIME Type activity activity
118
+ *
119
+ * @since 2.71
120
+ *
121
+ * @var integer
122
+ */
123
+ const MLA_DEBUG_CATEGORY_MIME_TYPE = 0x00000080;
124
+
125
  /**
126
  * Slug for adding plugin submenu
127
  *
627
  } // MLA_DEBUG_LEVEL & 1
628
  }
629
 
630
+ /**
631
+ * Create a NONCE URL that works in WP 3.5.x and later
632
+ *
633
+ * @since 2.71
634
+ *
635
+ * @param string $actionurl URL to add nonce action.
636
+ * @param string $action Optional. Nonce action name. Default -1.
637
+ * @param string $name Optional. Nonce name. Default '_wpnonce'.
638
+ *
639
+ * @return string Escaped URL with nonce action added.
640
+ */
641
+ public static function mla_nonce_url( $actionurl, $action = -1, $name = '_wpnonce' ) {
642
+ $actionurl = wp_nonce_url( $actionurl, $action, $name );
643
+
644
+ // WP 3.5.x wp_nonce_url() does not accept the third NONCE name argument
645
+ if ( '_wpnonce' !== $name ) {
646
+ $actionurl = str_replace( '_wpnonce', $name, $actionurl );
647
+ }
648
+
649
+ return $actionurl;
650
+ }
651
+
652
  /**
653
  * Filter the redirect location.
654
  *
1666
 
1667
  /**
1668
  * Define the Media/Assistant submenu screen to the (old) Admin Columns plugin
1669
+ * Supports Admin Columns before 3.0 and Admin Columns Pro before 4.0
1670
  *
1671
  * @since 2.22
1672
  *
1705
  return $new_models;
1706
  }
1707
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1708
  /**
1709
  * Create and register MLA-specific list screen handler for Admin Columns
1710
+ * Supports Admin Columns 3.0+ and Admin Columns Pro 4.0+
1711
  *
1712
  * @since 2.50
1713
  */
1714
  public static function register_list_screen() {
 
1715
  require_once( MLA_PLUGIN_PATH . 'includes/class-mla-admin-columns-support.php' );
1716
+
1717
+ if ( function_exists( 'ACP' ) ) {
1718
+ if ( version_compare( ACP()->get_version(), '4.2.3', '>=' ) ) {
1719
+ // Load the latest version, with export support
1720
+ require_once( MLA_PLUGIN_PATH . 'includes/class-mla-admin-columns-pro-support.php' );
1721
+ } elseif ( version_compare( ACP()->get_version(), '4.2.0', '>=' ) ) {
1722
+ // Load the interim version, with inline editing support
1723
+ require_once( MLA_PLUGIN_PATH . 'includes/class-mla-admin-columns-pro-support-42.php' );
1724
+ } else {
1725
+ // Load the legacy version
1726
+ require_once( MLA_PLUGIN_PATH . 'includes/class-mla-admin-columns-pro-support-40.php' );
1727
+ }
1728
+
1729
+ AC()->register_list_screen( new ACP_Addon_MLA_ListScreen );
1730
+ } else {
1731
+ AC()->register_list_screen( new AC_Addon_MLA_ListScreen );
1732
+ }
1733
  }
1734
  } // Class MLACore
1735
 
1817
  * Admin Columns plugin support
1818
  */
1819
  add_filter( 'cac/storage_models', 'MLACore::admin_columns_support_deprecated', 10, 2 );
 
 
1820
  add_action( 'ac/list_screens', 'MLACore::register_list_screen', 10, 0 );
1821
  ?>
includes/class-mla-data-source.php CHANGED
@@ -374,9 +374,7 @@ class MLAData_Source {
374
 
375
  $data_source = $data_value['data_source'];
376
 
377
- /*
378
- * Do this once per page load; cache attachment metadata if mapping all attachments
379
- */
380
  if ( NULL == $intermediate_sizes ) {
381
  $upload_dir = wp_upload_dir();
382
  $upload_dir = $upload_dir['basedir'] . '/';
@@ -393,14 +391,13 @@ class MLAData_Source {
393
  } // custom_field_mapping, i.e., mapping all attachments
394
  } // first call after page load
395
 
396
- /*
397
- * Do this once per post. Simulate SQL results for $wp_attached_files and $wp_attachment_metadata.
398
- */
399
  if ( $current_id != $post_id ) {
400
  $current_id = $post_id;
401
  $parent_info = NULL;
402
  $references = NULL;
403
  $alt_text = NULL;
 
404
 
405
  if ( 'single_attachment_mapping' == $category ) {
406
  $metadata = get_metadata( 'post', $post_id, '_wp_attached_file' );
@@ -450,10 +447,7 @@ class MLAData_Source {
450
  $default_option = 'text';
451
  }
452
 
453
- /*
454
- * Go through the template and expand the non-prefixed elements
455
- * as Data Sources
456
- */
457
  $item_values = array();
458
  $placeholders = MLAData::mla_get_template_placeholders( $data_value['meta_name'], $default_option );
459
  foreach ( $placeholders as $key => $placeholder ) {
@@ -473,9 +467,7 @@ class MLAData_Source {
473
  } // Data Source
474
  } // foreach placeholder
475
 
476
- /*
477
- * Now expand the template using the above Data Source values
478
- */
479
  $template = '[+template:' . $data_value['meta_name'] . '+]';
480
  $item_values = MLAData::mla_expand_field_level_parameters( $template, NULL, $item_values, $post_id, $data_value['keep_existing'], $default_option, $attachment_metadata );
481
 
@@ -682,9 +674,7 @@ class MLAData_Source {
682
 
683
  if ( !empty( $references['parent_errors'] ) ) {
684
  $result = $references['parent_errors'];
685
- /*
686
- * Remove (ORPHAN...
687
- */
688
  $orphan_certain = '(' . __( 'ORPHAN', 'media-library-assistant' ) . ')';
689
  $orphan_possible = '(' . __( 'ORPHAN', 'media-library-assistant' ) . '?)';
690
 
@@ -790,6 +780,9 @@ class MLAData_Source {
790
  case 'index':
791
  if ( class_exists( 'MLA' ) && !empty( MLA::$bulk_edit_data_source['cb_index'] ) ) {
792
  $result = MLA::$bulk_edit_data_source['cb_index'];
 
 
 
793
  }
794
  break;
795
  case 'found_rows':
@@ -816,9 +809,7 @@ class MLAData_Source {
816
  break;
817
  case 'native':
818
  default:
819
- /*
820
- * Make some numeric values sortable as strings, make all value non-empty
821
- */
822
  if ( in_array( $data_source, array( 'file_size', 'pixels', 'width', 'height' ) ) ) {
823
  $result = str_pad( $result, 15, ' ', STR_PAD_LEFT );
824
  } elseif ( empty( $result ) ) {
374
 
375
  $data_source = $data_value['data_source'];
376
 
377
+ // Do this once per page load; cache attachment metadata if mapping all attachments
 
 
378
  if ( NULL == $intermediate_sizes ) {
379
  $upload_dir = wp_upload_dir();
380
  $upload_dir = $upload_dir['basedir'] . '/';
391
  } // custom_field_mapping, i.e., mapping all attachments
392
  } // first call after page load
393
 
394
+ // Do this once per post. Simulate SQL results for $wp_attached_files and $wp_attachment_metadata.
 
 
395
  if ( $current_id != $post_id ) {
396
  $current_id = $post_id;
397
  $parent_info = NULL;
398
  $references = NULL;
399
  $alt_text = NULL;
400
+ MLAData::mla_reset_regex_matches();
401
 
402
  if ( 'single_attachment_mapping' == $category ) {
403
  $metadata = get_metadata( 'post', $post_id, '_wp_attached_file' );
447
  $default_option = 'text';
448
  }
449
 
450
+ // Go through the template and expand the non-prefixed elements as Data Sources
 
 
 
451
  $item_values = array();
452
  $placeholders = MLAData::mla_get_template_placeholders( $data_value['meta_name'], $default_option );
453
  foreach ( $placeholders as $key => $placeholder ) {
467
  } // Data Source
468
  } // foreach placeholder
469
 
470
+ // Now expand the template using the above Data Source values
 
 
471
  $template = '[+template:' . $data_value['meta_name'] . '+]';
472
  $item_values = MLAData::mla_expand_field_level_parameters( $template, NULL, $item_values, $post_id, $data_value['keep_existing'], $default_option, $attachment_metadata );
473
 
674
 
675
  if ( !empty( $references['parent_errors'] ) ) {
676
  $result = $references['parent_errors'];
677
+ // Remove (ORPHAN...
 
 
678
  $orphan_certain = '(' . __( 'ORPHAN', 'media-library-assistant' ) . ')';
679
  $orphan_possible = '(' . __( 'ORPHAN', 'media-library-assistant' ) . '?)';
680
 
780
  case 'index':
781
  if ( class_exists( 'MLA' ) && !empty( MLA::$bulk_edit_data_source['cb_index'] ) ) {
782
  $result = MLA::$bulk_edit_data_source['cb_index'];
783
+ if ( !empty( $data_value['format'] ) ) {
784
+ $result += absint( $data_value['format'] );
785
+ }
786
  }
787
  break;
788
  case 'found_rows':
809
  break;
810
  case 'native':
811
  default:
812
+ // Make some numeric values sortable as strings, make all value non-empty
 
 
813
  if ( in_array( $data_source, array( 'file_size', 'pixels', 'width', 'height' ) ) ) {
814
  $result = str_pad( $result, 15, ' ', STR_PAD_LEFT );
815
  } elseif ( empty( $result ) ) {
includes/class-mla-data.php CHANGED
@@ -677,7 +677,6 @@ class MLAData {
677
  * @return array individual arguments, e.g. array( 0 => 'd/m/Y H:i:s', 1 => 'arg, " two' )
678
  */
679
  private static function _parse_arguments( $argument_string ) {
680
- //error_log( __LINE__ . ' MLAData::_parse_arguments argument_string = ' . var_export( $argument_string, true ), 0 );
681
  $argument_string = trim( $argument_string, " \n\t\r\0\x0B," );
682
  $arguments = array();
683
 
@@ -687,7 +686,7 @@ class MLAData {
687
 
688
  // Check for array or enclosing quotes
689
  $delimiter = $argument_string[0];
690
-
691
  // Check for array
692
  if ( '{' == $delimiter ) {
693
  $array = self::_find_delimited_substring( substr( $argument_string, $index ), '{', '}' );
@@ -707,7 +706,7 @@ class MLAData {
707
  } else {
708
  $delimiter = '';
709
  }
710
-
711
  while ( $index < strlen( $argument_string ) ) {
712
  $byte = $argument_string[ $index++ ];
713
  if ( '\\' == $byte ) {
@@ -737,7 +736,7 @@ class MLAData {
737
  $digit_index++;
738
  }
739
  }
740
-
741
  if ( $digit_count = $digit_index - $index ) {
742
  $argument .= chr( octdec( substr( $argument_string, $index, $digit_count ) ) );
743
  $index += $digit_count - 1;
@@ -745,18 +744,18 @@ class MLAData {
745
  $argument .= $argument_string[ $index ];
746
  }
747
  } // switch
748
-
749
  $index++;
750
  } else { // backslash
751
  if ( $delimiter == $byte || ( empty( $delimiter ) && ',' == $byte ) ) {
752
  break;
753
  }
754
-
755
  $argument .= $byte;
756
  } // just another 8-bit value, but check for closing delimiter
757
  } // index < strlen
758
  } // non-array
759
-
760
  $arguments[] = $argument;
761
  $argument_string = trim( substr( $argument_string, $index ), " \n\t\r\0\x0B," );
762
  } // strlen( $argument_string )
@@ -764,6 +763,46 @@ class MLAData {
764
  return $arguments;
765
  }
766
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
767
  /**
768
  * Apply field-level format options to field-level content
769
  *
@@ -778,7 +817,7 @@ class MLAData {
778
  if ( empty( $value ) ) {
779
  return $value;
780
  }
781
-
782
  switch ( $args['format'] ) {
783
  case 'native':
784
  case 'raw':
@@ -819,7 +858,7 @@ class MLAData {
819
  $kb_suffix = isset( $args['args'][1] ) ? $args['args'][1] : $kb_suffix;
820
  $args['args'] = $args['args'][0];
821
  }
822
-
823
  if ( is_numeric( $args['args'] ) ) {
824
  $threshold = absint( $args['args'] );
825
  }
@@ -842,7 +881,7 @@ class MLAData {
842
  if ( is_array( $format ) ) {
843
  $format = $format[0];
844
  }
845
-
846
  $value = date( $format , (integer) $value );
847
  }
848
  break;
@@ -857,7 +896,7 @@ class MLAData {
857
  if ( is_array( $format ) ) {
858
  $format = $format[0];
859
  }
860
-
861
  $value = date( $format, $timestamp );
862
  }
863
  break;
@@ -870,7 +909,7 @@ class MLAData {
870
  } else {
871
  $format = $args['args'][0];
872
  }
873
-
874
  $show_fractions = ( 'false' !== strtolower( trim( $args['args'][1] ) ) );
875
  } else {
876
  if ( is_numeric( $args['args'] ) ) {
@@ -882,7 +921,7 @@ class MLAData {
882
  } else {
883
  $format = '%1$+.2f';
884
  }
885
-
886
  $fragments = array_map( 'intval', explode( '/', $value ) );
887
  if ( 1 == count( $fragments ) ) {
888
  $value = trim( $value );
@@ -907,11 +946,11 @@ class MLAData {
907
  case 'substr':
908
  $start = 0;
909
  $length = strlen( $value );
910
-
911
  if ( ! empty( $args['args'] ) ) {
912
  if ( is_array( $args['args'] ) ) {
913
  $start = intval( $args['args'][0] );
914
-
915
  if ( 1 < count( $args['args'] ) ) {
916
  $length = intval( $args['args'][1] );
917
  }
@@ -919,7 +958,7 @@ class MLAData {
919
  $start = intval( $args['args'] );
920
  }
921
  }
922
-
923
  if ( false === $value = substr( $value, $start, $length ) ) {
924
  $value = '';
925
  }
@@ -928,6 +967,154 @@ class MLAData {
928
  if ( is_array( $args['args'] ) && ( 2 === count( $args['args'] ) ) ) {
929
  $value = str_replace( $args['args'][0], $args['args'][1], $value );
930
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
931
  break;
932
  default:
933
  $value = apply_filters( 'mla_apply_custom_format', $value, $args );
@@ -962,6 +1149,7 @@ class MLAData {
962
  $item_metadata = NULL;
963
  $attachment_metadata = NULL;
964
  $id3_metadata = NULL;
 
965
  $cached_post_id = $post_id;
966
  }
967
 
@@ -1042,7 +1230,7 @@ class MLAData {
1042
  $taxonomy = $value['value'];
1043
  $field = 'name';
1044
  }
1045
-
1046
  // Look for compound taxonomy.slug notation
1047
  $matches = explode( '.', $taxonomy );
1048
  if ( 2 === count( $matches ) ) {
@@ -1053,7 +1241,7 @@ class MLAData {
1053
  if ( false === $term ) {
1054
  break;
1055
  }
1056
-
1057
  $terms = array( $term );
1058
  } else {
1059
  if ( 0 < $post_id ) {
@@ -1212,6 +1400,9 @@ class MLAData {
1212
  $markup_values[ $key ] = $record;
1213
  }
1214
 
 
 
 
1215
  break;
1216
  case '':
1217
  $candidate = str_replace( '{', '[', str_replace( '}', ']', $value['value'] ) );
@@ -1322,12 +1513,12 @@ class MLAData {
1322
  }
1323
 
1324
  if ( false !== strpos( $tail, ',' ) ) {
1325
- $match_count = preg_match( '/([^,]+)(,(text|single|export|unpack|array|multi|commas|raw|attr|url|kbmb|timestamp|date|fraction|substr|str_replace))(\(([^)]+)\))*/', $tail, $matches );
1326
  if ( 1 == $match_count ) {
1327
  $result['value'] = $matches[1];
1328
  if ( ! empty( $matches[5] ) ) {
1329
  $args = self::_parse_arguments( $matches[5] );
1330
-
1331
  if ( 1 == count( $args ) ) {
1332
  $args = $args[0];
1333
  }
@@ -1335,7 +1526,7 @@ class MLAData {
1335
  $args = '';
1336
  }
1337
 
1338
- if ( in_array( $matches[3], array( 'commas', 'raw', 'attr', 'url', 'kbmb', 'timestamp', 'date', 'fraction', 'substr', 'str_replace' ) ) ) {
1339
  $result['option'] = 'text';
1340
  $result['format'] = $matches[3];
1341
  $result['args'] = $args;
@@ -1350,7 +1541,7 @@ class MLAData {
1350
 
1351
  if ( ! empty( $matches[4] ) ) {
1352
  $args = self::_parse_arguments( $matches[4] );
1353
-
1354
  if ( 1 == count( $args ) ) {
1355
  $args = $args[0];
1356
  }
@@ -1431,7 +1622,7 @@ class MLAData {
1431
  public static function mla_count_list_table_items( $request, $offset = NULL, $count = NULL ) {
1432
  return MLAQuery::mla_count_list_table_items( $request, $offset, $count );
1433
  }
1434
-
1435
  /**
1436
  * Retrieve attachment objects for list table display
1437
  *
@@ -1448,7 +1639,7 @@ class MLAData {
1448
  public static function mla_query_list_table_items( $request, $offset, $count ) {
1449
  return MLAQuery::mla_query_list_table_items( $request, $offset, $count );
1450
  }
1451
-
1452
  /**
1453
  * Retrieve an Attachment array given a $post_id
1454
  *
@@ -1797,7 +1988,7 @@ class MLAData {
1797
  */
1798
  private static function _nonempty_value( &$namespace_array, $namespace, $key ) {
1799
  $result = '';
1800
-
1801
  if ( isset( $namespace_array[ $namespace ] ) && isset( $namespace_array[ $namespace ][ $key ] ) ) {
1802
  if ( is_array( $namespace_array[ $namespace ][ $key ] ) ) {
1803
  $result = @implode( ',', $namespace_array[ $namespace ][ $key ] );
@@ -1805,12 +1996,12 @@ class MLAData {
1805
  $result = (string) $namespace_array[ $namespace ][ $key ];
1806
  }
1807
  }
1808
-
1809
  $trim_value = trim( $result, " \n\t\r\0\x0B," );
1810
  if ( empty( $trim_value ) ) {
1811
  $result = '';
1812
  }
1813
-
1814
  return $result;
1815
  }
1816
 
@@ -2012,12 +2203,12 @@ class MLAData {
2012
  } elseif ( is_array( $value ) ) {
2013
  $value = self::_parse_xmp_array( $value );
2014
  }
2015
-
2016
  if ( false !== ($colon = strpos( $key, ':' ) ) ) {
2017
  $array_name = substr( $key, 0, $colon );
2018
  $array_index = substr( $key, $colon + 1 );
2019
  $namespace_arrays[ $array_name ][ $array_index ] = $value;
2020
-
2021
  if ( ! isset( $results[ $array_index ] ) && in_array( $array_name, array( 'xmp', 'xmpMM', 'xmpRights', 'xap', 'xapMM', 'dc', 'pdf', 'pdfx', 'mwg-rs' ) ) ) {
2022
  if ( is_array( $value ) && 1 == count( $value ) && isset( $value[0] ) ) {
2023
  $results[ $array_index ] = $value[0];
@@ -2614,7 +2805,7 @@ class MLAData {
2614
  if ( is_array( $value ) ) {
2615
  foreach ($value as $text_key => $text )
2616
  $value[ $text_key ] = self::_bin_to_utf8( $text );
2617
-
2618
  $clean_data[ $key ] = 'ARRAY(' . implode( ',', $value ) . ')';
2619
  } elseif ( is_string( $value ) ) {
2620
  $clean_data[ $key ] = self::_bin_to_utf8( substr( $value, 0, 256 ) );
@@ -2623,7 +2814,7 @@ class MLAData {
2623
  }
2624
  }
2625
  }
2626
-
2627
  return var_export( $clean_data, true);
2628
  }
2629
 
@@ -2667,7 +2858,7 @@ class MLAData {
2667
  if ( is_array( $value ) ) {
2668
  foreach ($value as $text_key => $text )
2669
  $value[ $text_key ] = self::_bin_to_utf8( $text );
2670
-
2671
  $clean_data[ $key ] = 'ARRAY(' . implode( ',', $value ) . ')';
2672
  } elseif ( is_string( $value ) ) {
2673
  $clean_data[ $key ] = self::_bin_to_utf8( substr( $value, 0, 256 ) );
@@ -2676,7 +2867,7 @@ class MLAData {
2676
  }
2677
  }
2678
  }
2679
-
2680
  return var_export( $clean_data, true);
2681
  }
2682
 
@@ -2711,7 +2902,7 @@ class MLAData {
2711
  }
2712
  }
2713
  }
2714
-
2715
  return var_export( $clean_data, true);
2716
  }
2717
 
@@ -2746,7 +2937,7 @@ class MLAData {
2746
  }
2747
  }
2748
  }
2749
-
2750
  return var_export( $clean_data, true);
2751
  }
2752
 
@@ -2793,7 +2984,7 @@ class MLAData {
2793
  }
2794
  }
2795
  }
2796
-
2797
  $text = var_export( $clean_data, true);
2798
  } // ALL_PDF
2799
 
@@ -3109,7 +3300,7 @@ class MLAData {
3109
  if ( ! empty( $exception ) ) {
3110
  MLAData::$mla_IPTC_EXIF_errors[] = sprintf( '(%1$s) %2$s', $exception->getCode(), $exception->getMessage() );
3111
  }
3112
-
3113
  // Combine exceptions with PHP notice/warning/error messages
3114
  if ( ! empty( MLAData::$mla_IPTC_EXIF_errors ) ) {
3115
  $results['mla_exif_errors'] = MLAData::$mla_IPTC_EXIF_errors;
@@ -3150,7 +3341,7 @@ class MLAData {
3150
  if ( 'PixelUnit' === $element_name ) {
3151
  $element_value = (string) ord( $element_value );
3152
  }
3153
-
3154
  // Problem with values edited through Windows right-click properties.
3155
  if ( in_array( $element_name, array( 'Title', 'Keywords', 'Subject' ) ) ) {
3156
  $element_value = str_replace( "\000", '', $element_value );
@@ -3160,7 +3351,7 @@ class MLAData {
3160
  $results['mla_exif_metadata'][ $element_name ] = $element_value;
3161
  } // foreach $section_data
3162
  } // foreach $exif_data
3163
-
3164
  // $exif_data is used for enhanced values below
3165
  $exif_data = $results['mla_exif_metadata'];
3166
  } // exif_read_data
@@ -3628,7 +3819,7 @@ class MLAData {
3628
  } else {
3629
  $new_text = $meta_value;
3630
  }
3631
-
3632
  /* translators: 1: meta_key 2: meta_value */
3633
  $message .= sprintf( __( 'Adding %1$s = %2$s', 'media-library-assistant' ) . '<br>', $meta_key, $new_text );
3634
  }
@@ -3912,6 +4103,24 @@ class MLAData {
3912
  $message .= sprintf( __( 'Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant' ) . '<br>', __( 'Pings', 'media-library-assistant' ), esc_attr( $post_data[ $key ] ), esc_attr( $value ) );
3913
  $updates[ $key ] = $value;
3914
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3915
  case 'taxonomy_updates':
3916
  $tax_input = $value['inputs'];
3917
  $tax_actions = $value['actions'];
@@ -3939,7 +4148,7 @@ class MLAData {
3939
  $message .= sprintf( __( 'You cannot assign "%1$s" terms', 'media-library-assistant' ) . '<br>', $taxonomy );
3940
  continue;
3941
  }
3942
-
3943
  // array of int = hierarchical, comma-delimited string = flat.
3944
  if ( is_array( $tags ) ) {
3945
  $tags = array_filter( $tags );
@@ -3960,13 +4169,13 @@ class MLAData {
3960
  if ( empty( $tag ) ) {
3961
  continue;
3962
  }
3963
-
3964
  $_term = MLAQuery::mla_wp_get_terms( $taxonomy, array(
3965
  'name' => $tag,
3966
  'fields' => 'ids',
3967
  'hide_empty' => false,
3968
  ) );
3969
-
3970
  if ( ! empty( $_term ) ) {
3971
  $clean_terms[] = intval( $_term[0] );
3972
  } else {
@@ -3974,7 +4183,7 @@ class MLAData {
3974
  $clean_terms[] = $tag;
3975
  }
3976
  }
3977
-
3978
  $tags = $clean_terms;
3979
  }
3980
 
@@ -4045,6 +4254,15 @@ class MLAData {
4045
  $result = $post_id;
4046
  }
4047
 
 
 
 
 
 
 
 
 
 
4048
  do_action( 'mla_updated_single_item', $post_id, $result );
4049
 
4050
  if ( $result ) {
@@ -4054,7 +4272,7 @@ class MLAData {
4054
  * Uncomment this for debugging.
4055
  */
4056
  // $final_message .= '<br>' . $message;
4057
- //error_log( 'DEBUG: mla_update_single_item message = ' . var_export( $message, true ), 0 );
4058
 
4059
  return array(
4060
  'message' => $final_message,
677
  * @return array individual arguments, e.g. array( 0 => 'd/m/Y H:i:s', 1 => 'arg, " two' )
678
  */
679
  private static function _parse_arguments( $argument_string ) {
 
680
  $argument_string = trim( $argument_string, " \n\t\r\0\x0B," );
681
  $arguments = array();
682
 
686
 
687
  // Check for array or enclosing quotes
688
  $delimiter = $argument_string[0];
689
+
690
  // Check for array
691
  if ( '{' == $delimiter ) {
692
  $array = self::_find_delimited_substring( substr( $argument_string, $index ), '{', '}' );
706
  } else {
707
  $delimiter = '';
708
  }
709
+
710
  while ( $index < strlen( $argument_string ) ) {
711
  $byte = $argument_string[ $index++ ];
712
  if ( '\\' == $byte ) {
736
  $digit_index++;
737
  }
738
  }
739
+
740
  if ( $digit_count = $digit_index - $index ) {
741
  $argument .= chr( octdec( substr( $argument_string, $index, $digit_count ) ) );
742
  $index += $digit_count - 1;
744
  $argument .= $argument_string[ $index ];
745
  }
746
  } // switch
747
+
748
  $index++;
749
  } else { // backslash
750
  if ( $delimiter == $byte || ( empty( $delimiter ) && ',' == $byte ) ) {
751
  break;
752
  }
753
+
754
  $argument .= $byte;
755
  } // just another 8-bit value, but check for closing delimiter
756
  } // index < strlen
757
  } // non-array
758
+
759
  $arguments[] = $argument;
760
  $argument_string = trim( substr( $argument_string, $index ), " \n\t\r\0\x0B," );
761
  } // strlen( $argument_string )
763
  return $arguments;
764
  }
765
 
766
+ /**
767
+ * Regular expression pattern/subpattern matches
768
+ *
769
+ * This array contains values matched in the "match" and "extract" format/option functions,
770
+ * making them available for the "matches:" data source prefix.
771
+ *
772
+ * @since 2.71
773
+ *
774
+ * @var array
775
+ */
776
+ public static $regex_matches = array();
777
+
778
+ /**
779
+ * Clear out the matches: prefix values
780
+ *
781
+ * @since 2.71
782
+ *
783
+ */
784
+ public static function mla_reset_regex_matches() {
785
+ MLAData::$regex_matches = array();
786
+ }
787
+
788
+ /**
789
+ * Intercept thumbnail file deletion errors
790
+ *
791
+ * @since 2.54
792
+ *
793
+ * @param int the level of the error raised
794
+ * @param string the error message
795
+ * @param string the filename that the error was raised in
796
+ * @param int the line number the error was raised at
797
+ *
798
+ * @return boolean true, to bypass PHP error handler
799
+ */
800
+ public static function preg_error_handler( $type, $string, $file, $line ) {
801
+ MLACore::mla_debug_add( __LINE__ . " MLAData::preg_error_handler( $type, $string, $file, $line )", MLACore::MLA_DEBUG_CATEGORY_ANY );
802
+ // Don't execute PHP internal error handler
803
+ return true;
804
+ }
805
+
806
  /**
807
  * Apply field-level format options to field-level content
808
  *
817
  if ( empty( $value ) ) {
818
  return $value;
819
  }
820
+
821
  switch ( $args['format'] ) {
822
  case 'native':
823
  case 'raw':
858
  $kb_suffix = isset( $args['args'][1] ) ? $args['args'][1] : $kb_suffix;
859
  $args['args'] = $args['args'][0];
860
  }
861
+
862
  if ( is_numeric( $args['args'] ) ) {
863
  $threshold = absint( $args['args'] );
864
  }
881
  if ( is_array( $format ) ) {
882
  $format = $format[0];
883
  }
884
+
885
  $value = date( $format , (integer) $value );
886
  }
887
  break;
896
  if ( is_array( $format ) ) {
897
  $format = $format[0];
898
  }
899
+
900
  $value = date( $format, $timestamp );
901
  }
902
  break;
909
  } else {
910
  $format = $args['args'][0];
911
  }
912
+
913
  $show_fractions = ( 'false' !== strtolower( trim( $args['args'][1] ) ) );
914
  } else {
915
  if ( is_numeric( $args['args'] ) ) {
921
  } else {
922
  $format = '%1$+.2f';
923
  }
924
+
925
  $fragments = array_map( 'intval', explode( '/', $value ) );
926
  if ( 1 == count( $fragments ) ) {
927
  $value = trim( $value );
946
  case 'substr':
947
  $start = 0;
948
  $length = strlen( $value );
949
+
950
  if ( ! empty( $args['args'] ) ) {
951
  if ( is_array( $args['args'] ) ) {
952
  $start = intval( $args['args'][0] );
953
+
954
  if ( 1 < count( $args['args'] ) ) {
955
  $length = intval( $args['args'][1] );
956
  }
958
  $start = intval( $args['args'] );
959
  }
960
  }
961
+
962
  if ( false === $value = substr( $value, $start, $length ) ) {
963
  $value = '';
964
  }
967
  if ( is_array( $args['args'] ) && ( 2 === count( $args['args'] ) ) ) {
968
  $value = str_replace( $args['args'][0], $args['args'][1], $value );
969
  }
970
+ break;
971
+ case 'match':
972
+ $pattern = NULL;
973
+
974
+ if ( ! empty( $args['args'] ) ) {
975
+ if ( is_array( $args['args'] ) ) {
976
+ $pattern = trim( $args['args'][0] );
977
+ } else {
978
+ $pattern = trim( $args['args'] );
979
+ }
980
+ }
981
+
982
+ if ( empty( $pattern ) ) {
983
+ // No pattern - return empty value
984
+ $value = '';
985
+ break;
986
+ }
987
+
988
+ set_error_handler( 'MLAData::preg_error_handler' );
989
+ try {
990
+ $count = preg_match( $pattern, $value, $matches );
991
+ } catch ( Throwable $e ) { // PHP 7
992
+ } catch ( Exception $e ) { // PHP 5
993
+ }
994
+ restore_error_handler();
995
+
996
+ if ( $count ) {
997
+ // array_merge won't work because it handles numeric keys differently
998
+ foreach ( $matches as $matches_key => $matches_value ) {
999
+ MLAData::$regex_matches[ $matches_key ] = $matches_value;
1000
+ }
1001
+
1002
+ $value = MLAData::$regex_matches[0];
1003
+ } else {
1004
+ // No pattern or no match
1005
+ $value = '';
1006
+ }
1007
+
1008
+ break;
1009
+ case 'extract':
1010
+ $pattern = NULL;
1011
+ $return_value = NULL;
1012
+
1013
+ if ( ! empty( $args['args'] ) ) {
1014
+ if ( is_array( $args['args'] ) ) {
1015
+ $pattern = trim( $args['args'][0] );
1016
+
1017
+ if ( 1 < count( $args['args'] ) ) {
1018
+ $return_value = intval( $args['args'][1] );
1019
+ }
1020
+ } else {
1021
+ $pattern = trim( $args['args'] );
1022
+ }
1023
+ }
1024
+
1025
+ if ( empty( $pattern ) ) {
1026
+ // No pattern - return empty value
1027
+ $value = '';
1028
+ break;
1029
+ }
1030
+
1031
+ set_error_handler( 'MLAData::preg_error_handler' );
1032
+ try {
1033
+ $count = preg_match( $pattern, $value, $matches );
1034
+ } catch ( Throwable $e ) { // PHP 7
1035
+ } catch ( Exception $e ) { // PHP 5
1036
+ }
1037
+ restore_error_handler();
1038
+
1039
+ if ( $count ) {
1040
+ // array_merge won't work because it handles numeric keys differently
1041
+ foreach ( $matches as $matches_key => $matches_value ) {
1042
+ MLAData::$regex_matches[ $matches_key ] = $matches_value;
1043
+ }
1044
+ } else {
1045
+ // No pattern or no match
1046
+ $value = '';
1047
+ break;
1048
+ }
1049
+
1050
+ if ( !is_null( $return_value ) && isset( MLAData::$regex_matches[ $return_value ] ) ) {
1051
+ $value = MLAData::$regex_matches[ $return_value ];
1052
+ } else {
1053
+ $value = '';
1054
+ }
1055
+
1056
+ break;
1057
+ case 'replace':
1058
+ $pattern = NULL;
1059
+ $replacement = NULL;
1060
+ $return_value = false;
1061
+
1062
+ if ( ! empty( $args['args'] ) ) {
1063
+ if ( is_array( $args['args'] ) ) {
1064
+ $pattern = trim( $args['args'][0] );
1065
+
1066
+ if ( 1 < count( $args['args'] ) ) {
1067
+ $replacement = trim( $args['args'][1] );
1068
+ }
1069
+
1070
+ if ( 2 < count( $args['args'] ) ) {
1071
+ $return_value = 'true' === strtolower( trim( $args['args'][2] ) );
1072
+ }
1073
+ } else {
1074
+ $pattern = trim( $args['args'] );
1075
+ }
1076
+ }
1077
+
1078
+ if ( empty( $pattern ) || empty( $replacement ) ) {
1079
+ // No pattern or no replacement - return unaltered value
1080
+ break;
1081
+ }
1082
+
1083
+ // Save original value in case replacement fails
1084
+ $old_value = $value;
1085
+
1086
+ // If $return_value is true we return only the matched portion with the modifications applied
1087
+ if ( $return_value ) {
1088
+ set_error_handler( 'MLAData::preg_error_handler' );
1089
+ try {
1090
+ $count = preg_match( $pattern, $value, $matches );
1091
+ } catch ( Throwable $e ) { // PHP 7
1092
+ } catch ( Exception $e ) { // PHP 5
1093
+ }
1094
+ restore_error_handler();
1095
+
1096
+ if ( $count ) {
1097
+ // Keep only the matched portion of the original value
1098
+ $value = $matches[0];
1099
+ } else {
1100
+ // No match - return unaltered value
1101
+ break;
1102
+ }
1103
+ }
1104
+
1105
+ set_error_handler( 'MLAData::preg_error_handler' );
1106
+ try {
1107
+ $value = preg_replace( $pattern, $replacement, $value );
1108
+ } catch ( Throwable $e ) { // PHP 7
1109
+ } catch ( Exception $e ) { // PHP 5
1110
+ }
1111
+ restore_error_handler();
1112
+
1113
+ // Check or error, i.e., bad $replacement pattern
1114
+ if ( is_null( $value ) ) {
1115
+ $value = $old_value;
1116
+ }
1117
+
1118
  break;
1119
  default:
1120
  $value = apply_filters( 'mla_apply_custom_format', $value, $args );
1149
  $item_metadata = NULL;
1150
  $attachment_metadata = NULL;
1151
  $id3_metadata = NULL;
1152
+ MLAData::mla_reset_regex_matches();
1153
  $cached_post_id = $post_id;
1154
  }
1155
 
1230
  $taxonomy = $value['value'];
1231
  $field = 'name';
1232
  }
1233
+
1234
  // Look for compound taxonomy.slug notation
1235
  $matches = explode( '.', $taxonomy );
1236
  if ( 2 === count( $matches ) ) {
1241
  if ( false === $term ) {
1242
  break;
1243
  }
1244
+
1245
  $terms = array( $term );
1246
  } else {
1247
  if ( 0 < $post_id ) {
1400
  $markup_values[ $key ] = $record;
1401
  }
1402
 
1403
+ break;
1404
+ case 'matches':
1405
+ $markup_values[ $key ] = isset( MLAData::$regex_matches[ $value['value'] ] ) ? MLAData::$regex_matches[ $value['value'] ] : '';
1406
  break;
1407
  case '':
1408
  $candidate = str_replace( '{', '[', str_replace( '}', ']', $value['value'] ) );
1513
  }
1514
 
1515
  if ( false !== strpos( $tail, ',' ) ) {
1516
+ $match_count = preg_match( '/([^,]+)(,(text|single|export|unpack|array|multi|commas|raw|attr|url|kbmb|timestamp|date|fraction|substr|str_replace|match|extract|replace))(\((.*)\)$)*/', $tail, $matches );
1517
  if ( 1 == $match_count ) {
1518
  $result['value'] = $matches[1];
1519
  if ( ! empty( $matches[5] ) ) {
1520
  $args = self::_parse_arguments( $matches[5] );
1521
+
1522
  if ( 1 == count( $args ) ) {
1523
  $args = $args[0];
1524
  }
1526
  $args = '';
1527
  }
1528
 
1529
+ if ( in_array( $matches[3], array( 'commas', 'raw', 'attr', 'url', 'kbmb', 'timestamp', 'date', 'fraction', 'substr', 'str_replace', 'match', 'extract', 'replace' ) ) ) {
1530
  $result['option'] = 'text';
1531
  $result['format'] = $matches[3];
1532
  $result['args'] = $args;
1541
 
1542
  if ( ! empty( $matches[4] ) ) {
1543
  $args = self::_parse_arguments( $matches[4] );
1544
+
1545
  if ( 1 == count( $args ) ) {
1546
  $args = $args[0];
1547
  }
1622
  public static function mla_count_list_table_items( $request, $offset = NULL, $count = NULL ) {
1623
  return MLAQuery::mla_count_list_table_items( $request, $offset, $count );
1624
  }
1625
+
1626
  /**
1627
  * Retrieve attachment objects for list table display
1628
  *
1639
  public static function mla_query_list_table_items( $request, $offset, $count ) {
1640
  return MLAQuery::mla_query_list_table_items( $request, $offset, $count );
1641
  }
1642
+
1643
  /**
1644
  * Retrieve an Attachment array given a $post_id
1645
  *
1988
  */
1989
  private static function _nonempty_value( &$namespace_array, $namespace, $key ) {
1990
  $result = '';
1991
+
1992
  if ( isset( $namespace_array[ $namespace ] ) && isset( $namespace_array[ $namespace ][ $key ] ) ) {
1993
  if ( is_array( $namespace_array[ $namespace ][ $key ] ) ) {
1994
  $result = @implode( ',', $namespace_array[ $namespace ][ $key ] );
1996
  $result = (string) $namespace_array[ $namespace ][ $key ];
1997
  }
1998
  }
1999
+
2000
  $trim_value = trim( $result, " \n\t\r\0\x0B," );
2001
  if ( empty( $trim_value ) ) {
2002
  $result = '';
2003
  }
2004
+
2005
  return $result;
2006
  }
2007
 
2203
  } elseif ( is_array( $value ) ) {
2204
  $value = self::_parse_xmp_array( $value );
2205
  }
2206
+
2207
  if ( false !== ($colon = strpos( $key, ':' ) ) ) {
2208
  $array_name = substr( $key, 0, $colon );
2209
  $array_index = substr( $key, $colon + 1 );
2210
  $namespace_arrays[ $array_name ][ $array_index ] = $value;
2211
+
2212
  if ( ! isset( $results[ $array_index ] ) && in_array( $array_name, array( 'xmp', 'xmpMM', 'xmpRights', 'xap', 'xapMM', 'dc', 'pdf', 'pdfx', 'mwg-rs' ) ) ) {
2213
  if ( is_array( $value ) && 1 == count( $value ) && isset( $value[0] ) ) {
2214
  $results[ $array_index ] = $value[0];
2805
  if ( is_array( $value ) ) {
2806
  foreach ($value as $text_key => $text )
2807
  $value[ $text_key ] = self::_bin_to_utf8( $text );
2808
+
2809
  $clean_data[ $key ] = 'ARRAY(' . implode( ',', $value ) . ')';
2810
  } elseif ( is_string( $value ) ) {
2811
  $clean_data[ $key ] = self::_bin_to_utf8( substr( $value, 0, 256 ) );
2814
  }
2815
  }
2816
  }
2817
+
2818
  return var_export( $clean_data, true);
2819
  }
2820
 
2858
  if ( is_array( $value ) ) {
2859
  foreach ($value as $text_key => $text )
2860
  $value[ $text_key ] = self::_bin_to_utf8( $text );
2861
+
2862
  $clean_data[ $key ] = 'ARRAY(' . implode( ',', $value ) . ')';
2863
  } elseif ( is_string( $value ) ) {
2864
  $clean_data[ $key ] = self::_bin_to_utf8( substr( $value, 0, 256 ) );
2867
  }
2868
  }
2869
  }
2870
+
2871
  return var_export( $clean_data, true);
2872
  }
2873
 
2902
  }
2903
  }
2904
  }
2905
+
2906
  return var_export( $clean_data, true);
2907
  }
2908
 
2937
  }
2938
  }
2939
  }
2940
+
2941
  return var_export( $clean_data, true);
2942
  }
2943
 
2984
  }
2985
  }
2986
  }
2987
+
2988
  $text = var_export( $clean_data, true);
2989
  } // ALL_PDF
2990
 
3300
  if ( ! empty( $exception ) ) {
3301
  MLAData::$mla_IPTC_EXIF_errors[] = sprintf( '(%1$s) %2$s', $exception->getCode(), $exception->getMessage() );
3302
  }
3303
+
3304
  // Combine exceptions with PHP notice/warning/error messages
3305
  if ( ! empty( MLAData::$mla_IPTC_EXIF_errors ) ) {
3306
  $results['mla_exif_errors'] = MLAData::$mla_IPTC_EXIF_errors;
3341
  if ( 'PixelUnit' === $element_name ) {
3342
  $element_value = (string) ord( $element_value );
3343
  }
3344
+
3345
  // Problem with values edited through Windows right-click properties.
3346
  if ( in_array( $element_name, array( 'Title', 'Keywords', 'Subject' ) ) ) {
3347
  $element_value = str_replace( "\000", '', $element_value );
3351
  $results['mla_exif_metadata'][ $element_name ] = $element_value;
3352
  } // foreach $section_data
3353
  } // foreach $exif_data
3354
+
3355
  // $exif_data is used for enhanced values below
3356
  $exif_data = $results['mla_exif_metadata'];
3357
  } // exif_read_data
3819
  } else {
3820
  $new_text = $meta_value;
3821
  }
3822
+
3823
  /* translators: 1: meta_key 2: meta_value */
3824
  $message .= sprintf( __( 'Adding %1$s = %2$s', 'media-library-assistant' ) . '<br>', $meta_key, $new_text );
3825
  }
4103
  $message .= sprintf( __( 'Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant' ) . '<br>', __( 'Pings', 'media-library-assistant' ), esc_attr( $post_data[ $key ] ), esc_attr( $value ) );
4104
  $updates[ $key ] = $value;
4105
  break;
4106
+ case 'post_date':
4107
+ if ( $value == $post_data[ $key ] ) {
4108
+ break;
4109
+ }
4110
+
4111
+ /* translators: 1: element name 2: old_value 3: new_value */
4112
+ $message .= sprintf( __( 'Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant' ) . '<br>', __( 'Uploaded on', 'media-library-assistant' ), esc_attr( $post_data[ $key ] ), esc_attr( $value ) );
4113
+ $updates[ $key ] = $value;
4114
+ break;
4115
+ case 'post_date_gmt':
4116
+ if ( $value == $post_data[ $key ] ) {
4117
+ break;
4118
+ }
4119
+
4120
+ /* translators: 1: element name 2: old_value 3: new_value */
4121
+ $message .= sprintf( __( 'Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant' ) . '<br>', __( 'Uploaded on', 'media-library-assistant' ) . ' GMT', esc_attr( $post_data[ $key ] ), esc_attr( $value ) );
4122
+ $updates[ $key ] = $value;
4123
+ break;
4124
  case 'taxonomy_updates':
4125
  $tax_input = $value['inputs'];
4126
  $tax_actions = $value['actions'];
4148
  $message .= sprintf( __( 'You cannot assign "%1$s" terms', 'media-library-assistant' ) . '<br>', $taxonomy );
4149
  continue;
4150
  }
4151
+
4152
  // array of int = hierarchical, comma-delimited string = flat.
4153
  if ( is_array( $tags ) ) {
4154
  $tags = array_filter( $tags );
4169
  if ( empty( $tag ) ) {
4170
  continue;
4171
  }
4172
+
4173
  $_term = MLAQuery::mla_wp_get_terms( $taxonomy, array(
4174
  'name' => $tag,
4175
  'fields' => 'ids',
4176
  'hide_empty' => false,
4177
  ) );
4178
+
4179
  if ( ! empty( $_term ) ) {
4180
  $clean_terms[] = intval( $_term[0] );
4181
  } else {
4183
  $clean_terms[] = $tag;
4184
  }
4185
  }
4186
+
4187
  $tags = $clean_terms;
4188
  }
4189
 
4254
  $result = $post_id;
4255
  }
4256
 
4257
+ /*
4258
+ * Allow Jordy Meow's Media File Renamer plugin to do its work
4259
+ * https://wordpress.org/support/topic/media-file-rename-media-library-assistant/
4260
+ */
4261
+ if ( class_exists( 'Meow_MFRH_Core' ) && isset( $updates['post_title'] ) ) {
4262
+ global $mfrh_core;
4263
+ $mfrh_core->rename( $post_id );
4264
+ }
4265
+
4266
  do_action( 'mla_updated_single_item', $post_id, $result );
4267
 
4268
  if ( $result ) {
4272
  * Uncomment this for debugging.
4273
  */
4274
  // $final_message .= '<br>' . $message;
4275
+ //error_log( __LINE__ . ' MLAData::mla_update_single_item message = ' . var_export( $message, true ), 0 );
4276
 
4277
  return array(
4278
  'message' => $final_message,
includes/class-mla-edit-media.php CHANGED
@@ -238,6 +238,8 @@ class MLAEdit {
238
  'Ajax_Url' => admin_url( 'admin-ajax.php' ),
239
  'ajaxFailError' => __( 'An ajax.fail error has occurred. Please reload the page and try again.', 'media-library-assistant' ),
240
  'ajaxDoneError' => __( 'An ajax.done error has occurred. Please reload the page and try again.', 'media-library-assistant' ),
 
 
241
  'useDashicons' => false,
242
  'useSpinnerClass' => false,
243
  );
@@ -428,6 +430,7 @@ class MLAEdit {
428
  'Caption' => __( 'Caption', 'media-library-assistant' ),
429
  'Description' => __( 'Description', 'media-library-assistant' ),
430
  'ALT Text' => __( 'ALT Text', 'media-library-assistant' ),
 
431
  'Parent ID' => __( 'Parent ID', 'media-library-assistant' ),
432
  'Select' => __( 'Select', 'media-library-assistant' ),
433
  'set_parent_form' => $set_parent_form,
@@ -456,6 +459,13 @@ class MLAEdit {
456
  * @return array updated attachment metadata
457
  */
458
  public static function mla_update_attachment_metadata_postfilter( $data, $post_id, $options = array( 'is_upload' => true ) ) {
 
 
 
 
 
 
 
459
  if ( ( true == $options['is_upload'] ) && ! empty( $_REQUEST['mlaAddNewBulkEditFormString'] ) ) {
460
  /*
461
  * Clean up the inputs, which have everything from the enclosing <form>.
@@ -524,6 +534,80 @@ class MLAEdit {
524
  return $messages;
525
  } // mla_post_updated_messages_filter
526
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
527
  /**
528
  * Adds Last Modified date to the Submit box on the Edit Media screen.
529
  * Declared public because it is an action.
@@ -535,11 +619,26 @@ class MLAEdit {
535
  public static function mla_attachment_submitbox_action( ) {
536
  global $post;
537
 
538
- /* translators: date_i18n format for last modified date and time */
539
- $date = date_i18n( __( 'M j, Y @ G:i', 'media-library-assistant' ), strtotime( $post->post_modified ) );
540
- echo '<div class="misc-pub-section curtime">' . "\n";
541
- echo '<span id="timestamp">' . sprintf(__( 'Last modified', 'media-library-assistant' ) . ": <b>%1\$s</b></span>\n", $date);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542
  echo "</div><!-- .misc-pub-section -->\n";
 
543
  echo '<div class="misc-pub-section mla-links">' . "\n";
544
 
545
  $view_args = array( 'page' => MLACore::ADMIN_PAGE_SLUG, 'mla_item_ID' => $post->ID );
@@ -560,11 +659,11 @@ class MLAEdit {
560
  }
561
 
562
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_ALLOW_CUSTOM_FIELD_MAPPING ) ) {
563
- echo '<a href="' . add_query_arg( $view_args, wp_nonce_url( 'upload.php?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_CUSTOM_FIELD_MAP, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Map Custom Field metadata for this item', 'media-library-assistant' ) . '">' . __( 'Map Custom Field metadata', 'media-library-assistant' ) . '</a><br>';
564
  }
565
 
566
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_ALLOW_IPTC_EXIF_MAPPING ) ) {
567
- echo '<a href="' . add_query_arg( $view_args, wp_nonce_url( 'upload.php?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_MAP, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Map IPTC/EXIF metadata for this item', 'media-library-assistant' ) . '">' . __( 'Map IPTC/EXIF metadata', 'media-library-assistant' ) . '</a>';
568
  }
569
 
570
  echo "</span>\n";
@@ -746,6 +845,8 @@ class MLAEdit {
746
 
747
  ksort( $tab_array, SORT_NUMERIC );
748
  foreach ( $tab_array as $indx => $value ) {
 
 
749
  $screen->add_help_tab( $value );
750
  }
751
 
@@ -1059,6 +1160,17 @@ class MLAEdit {
1059
  $new_data['menu_order'] = $_REQUEST['mla_menu_order'];
1060
  }
1061
 
 
 
 
 
 
 
 
 
 
 
 
1062
  if ( !empty( $new_data ) ) {
1063
  MLAData::mla_update_single_item( $post_ID, $new_data );
1064
  }
238
  'Ajax_Url' => admin_url( 'admin-ajax.php' ),
239
  'ajaxFailError' => __( 'An ajax.fail error has occurred. Please reload the page and try again.', 'media-library-assistant' ),
240
  'ajaxDoneError' => __( 'An ajax.done error has occurred. Please reload the page and try again.', 'media-library-assistant' ),
241
+ 'uploadLabel' => sprintf( __( 'Uploaded on: %s' ), '' ),
242
+ 'modifyLabel' => __( 'Last modified', 'media-library-assistant' ) . ': ',
243
  'useDashicons' => false,
244
  'useSpinnerClass' => false,
245
  );
430
  'Caption' => __( 'Caption', 'media-library-assistant' ),
431
  'Description' => __( 'Description', 'media-library-assistant' ),
432
  'ALT Text' => __( 'ALT Text', 'media-library-assistant' ),
433
+ 'Uploaded on' => __( 'Uploaded on', 'media-library-assistant' ),
434
  'Parent ID' => __( 'Parent ID', 'media-library-assistant' ),
435
  'Select' => __( 'Select', 'media-library-assistant' ),
436
  'set_parent_form' => $set_parent_form,
459
  * @return array updated attachment metadata
460
  */
461
  public static function mla_update_attachment_metadata_postfilter( $data, $post_id, $options = array( 'is_upload' => true ) ) {
462
+ // Check for active debug setting
463
+ if ( ( MLACore::$mla_debug_level & 1 ) && ( MLACore::$mla_debug_level & MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL ) ) {
464
+ $post = get_post( $post_id );
465
+ MLACore::mla_debug_add( __LINE__ . " MLAEdit::mla_update_attachment_metadata_postfilter( $post_id ) post = " . var_export( $post, true ), MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL );
466
+ MLACore::mla_debug_add( __LINE__ . " MLAEdit::mla_update_attachment_metadata_postfilter( $post_id ) data = " . var_export( $data, true ), MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL );
467
+ }
468
+
469
  if ( ( true == $options['is_upload'] ) && ! empty( $_REQUEST['mlaAddNewBulkEditFormString'] ) ) {
470
  /*
471
  * Clean up the inputs, which have everything from the enclosing <form>.
534
  return $messages;
535
  } // mla_post_updated_messages_filter
536
 
537
+ /**
538
+ * Print out HTML form elements for editing uploaded on, last modified date
539
+ *
540
+ * Adapted from /wp-admin/includes/template.php function touch_time()
541
+ *
542
+ * @since 2.71
543
+ *
544
+ * @global WP_Locale $wp_locale for month name abbreviations
545
+ * @global WP_Post $post
546
+ *
547
+ * @param int|bool $upload Accepts 1|true for editing the upload date, 0|false for editing the modify date.
548
+ * @param int $tab_index The tabindex attribute to add. Default 0.
549
+ */
550
+ private static function _generate_time_edit_form( $upload = 1, $tab_index = 0 ) {
551
+ global $wp_locale, $post;
552
+
553
+ $tab_index_attribute = '';
554
+ if ( (int) $tab_index > 0 )
555
+ $tab_index_attribute = " tabindex=\"$tab_index\"";
556
+
557
+ $field = $upload ? 'upload' : 'modify';
558
+ $date = $upload ? $post->post_date : $post->post_modified;
559
+ $jj = mysql2date( 'd', $date, false );
560
+ $mm = mysql2date( 'm', $date, false );
561
+ $aa = mysql2date( 'Y', $date, false );
562
+ $hh = mysql2date( 'H', $date, false );
563
+ $mn = mysql2date( 'i', $date, false );
564
+ $ss = mysql2date( 's', $date, false );
565
+
566
+ $month = '<label><span class="screen-reader-text">' . __( 'Month' ) . '</span><select id="mm" name="mla_' . $field . '[mm]"' . $tab_index_attribute . ">\n";
567
+ for ( $i = 1; $i < 13; $i = $i +1 ) {
568
+ $monthnum = zeroise($i, 2);
569
+ $monthtext = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
570
+ $month .= "\t\t\t" . '<option value="' . $monthnum . '" data-text="' . $monthtext . '" ' . selected( $monthnum, $mm, false ) . '>';
571
+ /* translators: 1: month number (01, 02, etc.), 2: month abbreviation */
572
+ $month .= sprintf( __( '%1$s-%2$s' ), $monthnum, $monthtext ) . "</option>\n";
573
+ }
574
+ $month .= '</select></label>';
575
+
576
+ $day = '<label><span class="screen-reader-text">' . __( 'Day' ) . '</span><input type="text" id="jj" name="mla_' . $field . '[jj]" value="' . $jj . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" /></label>';
577
+ $year = '<label><span class="screen-reader-text">' . __( 'Year' ) . '</span><input type="text" id="aa" name="mla_' . $field . '[aa]" value="' . $aa . '" size="4" maxlength="4"' . $tab_index_attribute . ' autocomplete="off" /></label>';
578
+ $hour = '<label><span class="screen-reader-text">' . __( 'Hour' ) . '</span><input type="text" id="hh" name="mla_' . $field . '[hh]" value="' . $hh . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" /></label>';
579
+ $minute = '<label><span class="screen-reader-text">' . __( 'Minute' ) . '</span><input type="text" id="mn" name="mla_' . $field . '[mn]" value="' . $mn . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" /></label>';
580
+
581
+ echo '<div class="timestamp-wrap">';
582
+ /* translators: 1: month, 2: day, 3: year, 4: hour, 5: minute */
583
+ printf( __( '%1$s %2$s, %3$s @ %4$s:%5$s' ), $month, $day, $year, $hour, $minute );
584
+
585
+ echo "</div>\n";
586
+ echo '<input type="hidden" id="ss" name="mla_' . $field . '[ss]" value="' . $ss . '" />' . "\n";
587
+ echo '<input type="hidden" id="original" name="mla_' . $field . '[original]" value="' . $date . '" />' . "\n";
588
+
589
+ $time_adj = current_time('timestamp');
590
+ $map = array(
591
+ 'mm' => array( $mm, gmdate( 'm', $time_adj ) ),
592
+ 'jj' => array( $jj, gmdate( 'd', $time_adj ) ),
593
+ 'aa' => array( $aa, gmdate( 'Y', $time_adj ) ),
594
+ 'hh' => array( $hh, gmdate( 'H', $time_adj ) ),
595
+ 'mn' => array( $mn, gmdate( 'i', $time_adj ) ),
596
+ );
597
+ foreach ( $map as $timeunit => $value ) {
598
+ list( $unit, $curr ) = $value;
599
+
600
+ echo '<input type="hidden" id="hidden_' . $timeunit . '" name="hidden[' . $timeunit . ']" value="' . $unit . '" />' . "\n";
601
+ $cur_timeunit = 'cur_' . $timeunit;
602
+ echo '<input type="hidden" id="' . $cur_timeunit . '" name="' . $cur_timeunit . '" value="' . $curr . '" />' . "\n";
603
+ }
604
+
605
+ echo "<p>\n";
606
+ echo '<a href="#edit_' . $field . 'timestamp" class="save-timestamp hide-if-no-js button">' . __('OK') . "</a>\n";
607
+ echo '<a href="#edit_' . $field . 'timestamp" class="cancel-timestamp hide-if-no-js button-cancel">' . __('Cancel') . "</a>\n";
608
+ echo "<p>\n";
609
+ }
610
+
611
  /**
612
  * Adds Last Modified date to the Submit box on the Edit Media screen.
613
  * Declared public because it is an action.
619
  public static function mla_attachment_submitbox_action( ) {
620
  global $post;
621
 
622
+ /* translators: date_i18n format for uploaded on, last modified date and time */
623
+ $date_format = __( 'M j, Y @ H:i', 'media-library-assistant' );
624
+
625
+ $uploaded_date = date_i18n($date_format, strtotime( $post->post_date ) );
626
+ echo '<div class="misc-pub-section uploadtime misc-pub-uploadtime">' . "\n";
627
+ echo '<span id="upload-timestamp">' . sprintf(__( 'Uploaded on', 'media-library-assistant' ) . ":\n <b>%1\$s</b></span>\n", $uploaded_date);
628
+
629
+ echo '<a href="#edit_uploadtime" class="edit-timestamp edit-uploadtime hide-if-no-js" role="button"><span aria-hidden="true">' . __( 'Edit' ) . "</span>\n";
630
+ echo '<span class="screen-reader-text">' . __( 'Edit upload date and time' ) . "</span></a>\n";
631
+ echo '<fieldset id="timestampdiv" class="hide-if-js">' . "\n";
632
+ echo '<legend class="screen-reader-text">' . __( 'Upload Date and time' ) . "</legend>\n";
633
+ self::_generate_time_edit_form( true ) . "\n";
634
+ echo "</fieldset>\n";
635
+ echo "</div><!-- .misc-pub-section -->\n";
636
+
637
+ $modified_date = date_i18n($date_format, strtotime( $post->post_modified ) );
638
+ echo '<div class="misc-pub-section modifytime misc-pub-modifytime">' . "\n";
639
+ echo '<span id="modify-timestamp">' . sprintf(__( 'Last modified', 'media-library-assistant' ) . ":\n <b>%1\$s</b></span>\n", $modified_date);
640
  echo "</div><!-- .misc-pub-section -->\n";
641
+
642
  echo '<div class="misc-pub-section mla-links">' . "\n";
643
 
644
  $view_args = array( 'page' => MLACore::ADMIN_PAGE_SLUG, 'mla_item_ID' => $post->ID );
659
  }
660
 
661
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_ALLOW_CUSTOM_FIELD_MAPPING ) ) {
662
+ echo '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( 'upload.php?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_CUSTOM_FIELD_MAP, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Map Custom Field metadata for this item', 'media-library-assistant' ) . '">' . __( 'Map Custom Field metadata', 'media-library-assistant' ) . '</a><br>';
663
  }
664
 
665
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_ALLOW_IPTC_EXIF_MAPPING ) ) {
666
+ echo '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( 'upload.php?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_MAP, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Map IPTC/EXIF metadata for this item', 'media-library-assistant' ) . '">' . __( 'Map IPTC/EXIF metadata', 'media-library-assistant' ) . '</a>';
667
  }
668
 
669
  echo "</span>\n";
845
 
846
  ksort( $tab_array, SORT_NUMERIC );
847
  foreach ( $tab_array as $indx => $value ) {
848
+ $page_values = array( 'settingsURL' => admin_url('options-general.php') );
849
+ $value = MLAData::mla_parse_template( $value, $page_values );
850
  $screen->add_help_tab( $value );
851
  }
852
 
1160
  $new_data['menu_order'] = $_REQUEST['mla_menu_order'];
1161
  }
1162
 
1163
+ if ( isset( $_REQUEST['mla_upload'] ) ) {
1164
+ $date = $_REQUEST['mla_upload'];
1165
+ $new_date = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $date['aa'], $date['mm'], $date['jj'], $date['hh'], $date['mn'], $date['ss'] );
1166
+ if ( wp_checkdate( $date['mm'], $date['jj'], $date['aa'], $new_date ) ) {
1167
+ if ( $date['original'] !== $new_date ) {
1168
+ $new_data['post_date'] = $new_date;
1169
+ $new_data['post_date_gmt'] = get_gmt_from_date( $new_date );
1170
+ }
1171
+ }
1172
+ }
1173
+
1174
  if ( !empty( $new_data ) ) {
1175
  MLAData::mla_update_single_item( $post_ID, $new_data );
1176
  }
includes/class-mla-list-table.php CHANGED
@@ -215,7 +215,6 @@ class MLA_List_Table extends WP_List_Table {
215
  $tax_object = get_taxonomy( $tax_filter );
216
  $dropdown_options = array_merge( array(
217
  'show_option_all' => __( 'All', 'media-library-assistant' ) . ' ' . $tax_object->labels->name,
218
- // 'show_option_none' => __( 'No', 'media-library-assistant' ) . ' ' . $tax_object->labels->name,
219
  'show_option_none' => _x( 'No', 'show_option_none', 'media-library-assistant' ) . ' ' . $tax_object->labels->name,
220
  'orderby' => 'name',
221
  'order' => 'ASC',
@@ -416,6 +415,11 @@ class MLA_List_Table extends WP_List_Table {
416
  * @since 0.1
417
  */
418
  public function __construct() {
 
 
 
 
 
419
  $this->detached = isset( $_REQUEST['detached'] ) && ( '1' == $_REQUEST['detached'] );
420
  $this->attached = isset( $_REQUEST['detached'] ) && ( '0' == $_REQUEST['detached'] );
421
  $this->is_trash = isset( $_REQUEST['status'] ) && $_REQUEST['status'] == 'trash';
@@ -724,7 +728,7 @@ class MLA_List_Table extends WP_List_Table {
724
 
725
  if ( $this->is_trash ) {
726
  if ( current_user_can( 'delete_post', $item->ID ) ) {
727
- $actions['restore'] = '<a class="submitdelete" href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_RESTORE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Restore this item from the Trash', 'media-library-assistant' ) . '">' . __( 'Restore', 'media-library-assistant' ) . '</a>';
728
  }
729
  } else {
730
  if ( current_user_can( 'edit_post', $item->ID ) ) {
@@ -744,12 +748,12 @@ class MLA_List_Table extends WP_List_Table {
744
 
745
  if ( current_user_can( 'delete_post', $item->ID ) ) {
746
  if ( !$this->is_trash && EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
747
- $actions['trash'] = '<a class="submitdelete" href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_TRASH, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Move this item to the Trash', 'media-library-assistant' ) . '">' . __( 'Move to Trash', 'media-library-assistant' ) . '</a>';
748
  } else {
749
  // If using trash for posts and pages but not for attachments, warn before permanently deleting
750
  $delete_ays = EMPTY_TRASH_DAYS && !MEDIA_TRASH ? ' onclick="return showNotice.warn();"' : '';
751
 
752
- $actions['delete'] = '<a class="submitdelete"' . $delete_ays . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
753
  }
754
  } // delete_post
755
 
@@ -757,7 +761,7 @@ class MLA_List_Table extends WP_List_Table {
757
  $file = get_attached_file( $item->ID );
758
  $download_args = array( 'page' => MLACore::ADMIN_PAGE_SLUG, 'mla_download_file' => urlencode( $file ), 'mla_download_type' => $item->post_mime_type );
759
 
760
- $actions['download'] = '<a href="' . add_query_arg( $download_args, wp_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' &#8220;' . $att_title . '&#8221;">' . __( 'Download', 'media-library-assistant' ) . '</a>';
761
 
762
  $actions['view'] = '<a href="' . site_url( ) . '?attachment_id=' . $item->ID . '" rel="permalink" title="' . __( 'View', 'media-library-assistant' ) . ' &#8220;' . $att_title . '&#8221;">' . __( 'View', 'media-library-assistant' ) . '</a>';
763
  }
@@ -855,6 +859,14 @@ class MLA_List_Table extends WP_List_Table {
855
  $inline_data .= "</div>\r\n";
856
  }
857
 
 
 
 
 
 
 
 
 
858
  $inline_data .= ' <div class="post_parent">' . $item->post_parent . "</div>\r\n";
859
 
860
  if ( $item->post_parent ) {
@@ -1002,7 +1014,6 @@ class MLA_List_Table extends WP_List_Table {
1002
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_SHOW_FILE_NAME ) ) {
1003
  $final_content .= '<p style="clear: both" class="filename"> <span class="screen-reader-text">' . __( 'File name' ) . ': </span>' . $item->mla_wp_attached_filename . " </p>\n";
1004
  }
1005
-
1006
  return $final_content;
1007
  }
1008
 
215
  $tax_object = get_taxonomy( $tax_filter );
216
  $dropdown_options = array_merge( array(
217
  'show_option_all' => __( 'All', 'media-library-assistant' ) . ' ' . $tax_object->labels->name,
 
218
  'show_option_none' => _x( 'No', 'show_option_none', 'media-library-assistant' ) . ' ' . $tax_object->labels->name,
219
  'orderby' => 'name',
220
  'order' => 'ASC',
415
  * @since 0.1
416
  */
417
  public function __construct() {
418
+ global $wp_list_table;
419
+
420
+ // For Admin Columns Pro 4.2.3+ export compatibility, because views can alter the query
421
+ $wp_list_table = $this;
422
+
423
  $this->detached = isset( $_REQUEST['detached'] ) && ( '1' == $_REQUEST['detached'] );
424
  $this->attached = isset( $_REQUEST['detached'] ) && ( '0' == $_REQUEST['detached'] );
425
  $this->is_trash = isset( $_REQUEST['status'] ) && $_REQUEST['status'] == 'trash';
728
 
729
  if ( $this->is_trash ) {
730
  if ( current_user_can( 'delete_post', $item->ID ) ) {
731
+ $actions['restore'] = '<a class="submitdelete" href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_RESTORE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Restore this item from the Trash', 'media-library-assistant' ) . '">' . __( 'Restore', 'media-library-assistant' ) . '</a>';
732
  }
733
  } else {
734
  if ( current_user_can( 'edit_post', $item->ID ) ) {
748
 
749
  if ( current_user_can( 'delete_post', $item->ID ) ) {
750
  if ( !$this->is_trash && EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
751
+ $actions['trash'] = '<a class="submitdelete" href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_TRASH, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Move this item to the Trash', 'media-library-assistant' ) . '">' . __( 'Move to Trash', 'media-library-assistant' ) . '</a>';
752
  } else {
753
  // If using trash for posts and pages but not for attachments, warn before permanently deleting
754
  $delete_ays = EMPTY_TRASH_DAYS && !MEDIA_TRASH ? ' onclick="return showNotice.warn();"' : '';
755
 
756
+ $actions['delete'] = '<a class="submitdelete"' . $delete_ays . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
757
  }
758
  } // delete_post
759
 
761
  $file = get_attached_file( $item->ID );
762
  $download_args = array( 'page' => MLACore::ADMIN_PAGE_SLUG, 'mla_download_file' => urlencode( $file ), 'mla_download_type' => $item->post_mime_type );
763
 
764
+ $actions['download'] = '<a href="' . add_query_arg( $download_args, MLACore::mla_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' &#8220;' . $att_title . '&#8221;">' . __( 'Download', 'media-library-assistant' ) . '</a>';
765
 
766
  $actions['view'] = '<a href="' . site_url( ) . '?attachment_id=' . $item->ID . '" rel="permalink" title="' . __( 'View', 'media-library-assistant' ) . ' &#8220;' . $att_title . '&#8221;">' . __( 'View', 'media-library-assistant' ) . '</a>';
767
  }
859
  $inline_data .= "</div>\r\n";
860
  }
861
 
862
+ $date = $item->post_date;
863
+ $inline_data .= ' <div class="jj">' . esc_attr( mysql2date( 'd', $date, false ) ) . "</div>\r\n";
864
+ $inline_data .= ' <div class="mm">' . esc_attr( mysql2date( 'm', $date, false ) ) . "</div>\r\n";
865
+ $inline_data .= ' <div class="aa">' . esc_attr( mysql2date( 'Y', $date, false ) ) . "</div>\r\n";
866
+ $inline_data .= ' <div class="hh">' . esc_attr( mysql2date( 'H', $date, false ) ) . "</div>\r\n";
867
+ $inline_data .= ' <div class="mn">' . esc_attr( mysql2date( 'i', $date, false ) ) . "</div>\r\n";
868
+ $inline_data .= ' <div class="ss">' . esc_attr( mysql2date( 's', $date, false ) ) . "</div>\r\n";
869
+
870
  $inline_data .= ' <div class="post_parent">' . $item->post_parent . "</div>\r\n";
871
 
872
  if ( $item->post_parent ) {
1014
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_SHOW_FILE_NAME ) ) {
1015
  $final_content .= '<p style="clear: both" class="filename"> <span class="screen-reader-text">' . __( 'File name' ) . ': </span>' . $item->mla_wp_attached_filename . " </p>\n";
1016
  }
 
1017
  return $final_content;
1018
  }
1019
 
includes/class-mla-main.php CHANGED
@@ -143,22 +143,50 @@ class MLA {
143
  */
144
  public static function mla_admin_init_action() {
145
  //static $count = 0;
146
- //error_log( __LINE__ . ' DEBUG: MLA::mla_admin_init_action $count = ' . var_export( $count++, true ), 0 );
147
-
148
- //error_log( __LINE__ . ' DEBUG: MLA::mla_admin_init_action referer = ' . var_export( wp_get_referer(), true ), 0 );
149
- //error_log( __LINE__ . ' DEBUG: MLA::mla_admin_init_action $_REQUEST = ' . var_export( $_REQUEST, true ), 0 );
150
- /*
151
- * Process secure file download requests
152
- */
 
153
  if ( isset( $_REQUEST['mla_download_file'] ) && isset( $_REQUEST['mla_download_type'] ) ) {
154
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
155
- self::_process_mla_download_file();
156
  exit();
157
  }
158
 
159
- /*
160
- * Process row-level actions from the Edit Media screen
161
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  if ( !empty( $_REQUEST['mla_admin_action'] ) ) {
163
  if ( isset( $_REQUEST['mla-set-parent-ajax-nonce'] ) ) {
164
  check_admin_referer( 'mla_find_posts', 'mla-set-parent-ajax-nonce' );
@@ -173,16 +201,16 @@ class MLA {
173
  do_action( 'mla_begin_mapping', 'single_custom', $_REQUEST['mla_item_ID'] );
174
  $updates = MLAOptions::mla_evaluate_custom_field_mapping( $_REQUEST['mla_item_ID'], 'single_attachment_mapping' );
175
  do_action( 'mla_end_mapping' );
176
-
177
  if ( !empty( $updates ) ) {
178
  $item_content = MLAData::mla_update_single_item( $_REQUEST['mla_item_ID'], $updates );
179
  }
180
-
181
  $message = '101';
182
  } else {
183
  $message = '103';
184
  }
185
-
186
  $view_args = isset( $_REQUEST['mla_source'] ) ? array( 'mla_source' => $_REQUEST['mla_source']) : array();
187
  wp_redirect( add_query_arg( $view_args, admin_url( 'post.php' ) . '?post=' . $_REQUEST['mla_item_ID'] . '&action=edit&message=' . $message ), 302 );
188
  exit;
@@ -197,7 +225,7 @@ class MLA {
197
  } else {
198
  $message = '104';
199
  }
200
-
201
  $view_args = isset( $_REQUEST['mla_source'] ) ? array( 'mla_source' => $_REQUEST['mla_source']) : array();
202
  wp_redirect( add_query_arg( $view_args, admin_url( 'post.php' ) . '?post=' . $_REQUEST['mla_item_ID'] . '&action=edit&message=' . $message ), 302 );
203
  exit;
@@ -241,7 +269,7 @@ class MLA {
241
  // Optional - change the size of the thumbnail/icon images
242
  $icon_value = MLACore::mla_get_option( MLACoreOptions::MLA_TABLE_ICON_SIZE );
243
  $set_column_width = !empty( $icon_value ) && is_numeric( $icon_value ) && ( 64 < $icon_value );
244
-
245
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_ENABLE_MLA_ICONS ) ) {
246
  if ( empty( $icon_value ) ) {
247
  $icon_value = 64;
@@ -285,33 +313,33 @@ class MLA {
285
  echo " margin-bottom: .2em;\n";
286
  echo " font-size: 14px;\n";
287
  echo " }\n";
288
-
289
  echo " table.attachments .column-primary .media-icon {\n";
290
  echo " float: left;\n";
291
  echo " margin: 0 9px 0 0;\n";
292
  echo " font-size: 14px;\n";
293
  echo " }\n";
294
-
295
  echo " table.attachments .column-primary div.row-actions {\n";
296
  echo " clear: both;\n";
297
  echo " }\n";
298
-
299
  // Explicit primary column width including icon and some margin
300
  if ( $set_column_width ) {
301
  $column_width = ( $icon_value + 30 ) . 'px';
302
-
303
  echo " table.attachments th.column-primary {\n";
304
  echo " width: {$column_width};\n";
305
  echo " }\n";
306
  }
307
-
308
  echo " table.attachments td.column-primary {\n";
309
  echo " position: relative;\n";
310
-
311
  if ( $set_column_width ) {
312
  echo " width: {$column_width};\n";
313
  }
314
-
315
  echo " }\n";
316
  } else {
317
  /*
@@ -384,7 +412,7 @@ class MLA {
384
 
385
  MLAModal::mla_add_terms_search_scripts();
386
 
387
- $fields = array( 'post_title', 'post_name', 'post_excerpt', 'post_content', 'image_alt', 'post_parent', 'post_parent_title', 'menu_order', 'post_author' );
388
  $custom_fields = MLACore::mla_custom_field_support( 'quick_edit' );
389
  $custom_fields = array_merge( $custom_fields, MLACore::mla_custom_field_support( 'bulk_edit' ) );
390
  foreach ( $custom_fields as $slug => $details ) {
@@ -508,18 +536,14 @@ class MLA {
508
  $mla_source = isset( $_REQUEST['mla_source'] ) && in_array( $_REQUEST['mla_source'], array ( 'trash', 'delete' ) );
509
 
510
  if ( $mla_source || ( 'checked' != MLACore::mla_get_option( MLACoreOptions::MLA_SCREEN_DISPLAY_LIBRARY ) ) ) {
511
- /*
512
- * Allow "grid" view even if the list view is suppressed
513
- */
514
  if ( isset( $_REQUEST['mode'] ) && 'grid' === $_REQUEST['mode'] ) {
515
  return;
516
  }
517
-
518
  $query_args = '?page=' . MLACore::ADMIN_PAGE_SLUG;
519
 
520
- /*
521
- * Compose a message if returning from the Edit Media screen
522
- */
523
  if ( ! empty( $_GET['deleted'] ) && $deleted = absint( $_GET['deleted'] ) ) {
524
  $query_args .= '&mla_admin_message=' . urlencode( sprintf( _n( 'Item permanently deleted.', '%d items permanently deleted.', $deleted, 'media-library-assistant' ), number_format_i18n( $_GET['deleted'] ) ) );
525
  }
@@ -547,7 +571,7 @@ class MLA {
547
  $args = array(
548
  'label' => __( 'Entries per page', 'media-library-assistant' ),
549
  'default' => 10,
550
- 'option' => 'mla_entries_per_page'
551
  );
552
 
553
  add_screen_option( $option, $args );
@@ -562,9 +586,7 @@ class MLA {
562
  */
563
  public static function mla_add_help_tab( ) {
564
  $screen = get_current_screen();
565
- /*
566
- * Is this one of our pages?
567
- */
568
  if ( !array_key_exists( $screen->id, self::$page_hooks ) ) {
569
  return;
570
  }
@@ -575,9 +597,7 @@ class MLA {
575
 
576
  $file_suffix = $screen->id;
577
 
578
- /*
579
- * Use a generic page for edit taxonomy screens
580
- */
581
  if ( 't_' == substr( self::$page_hooks[ $file_suffix ], 0, 2 ) ) {
582
  $taxonomy = substr( self::$page_hooks[ $file_suffix ], 2 );
583
  switch ( $taxonomy ) {
@@ -604,9 +624,7 @@ class MLA {
604
  return;
605
  }
606
 
607
- /*
608
- * Don't add sidebar to the WordPress category and post_tag screens
609
- */
610
  if ( ! ( 'edit-tags' == $screen->base && in_array( $screen->taxonomy, array( 'post_tag', 'category' ) ) ) ) {
611
  if ( !empty( $template_array['sidebar'] ) ) {
612
  $page_values = array( 'settingsURL' => admin_url('options-general.php') );
@@ -616,9 +634,7 @@ class MLA {
616
  }
617
  unset( $template_array['sidebar'] );
618
 
619
- /*
620
- * Provide explicit control over tab order
621
- */
622
  $tab_array = array();
623
 
624
  foreach ( $template_array as $id => $content ) {
@@ -638,9 +654,7 @@ class MLA {
638
 
639
  ksort( $tab_array, SORT_NUMERIC );
640
  foreach ( $tab_array as $indx => $value ) {
641
- /*
642
- * Don't add duplicate tabs to the WordPress category and post_tag screens
643
- */
644
  if ( 'edit-tags' == $screen->base && in_array( $screen->taxonomy, array( 'post_tag', 'category' ) ) ) {
645
  if ( 'mla-attachments-column' != $value['id'] ) {
646
  continue;
@@ -692,7 +706,7 @@ class MLA {
692
  MLACore::mla_debug_add( $debug_message, MLACore::MLA_DEBUG_CATEGORY_ANY );
693
  }
694
 
695
- if ( 'mla_entries_per_page' == $option ) {
696
  return $value;
697
  }
698
 
@@ -720,23 +734,19 @@ class MLA {
720
  } else {
721
  $menu_position = (integer) MLACore::mla_get_option( MLACoreOptions::MLA_SCREEN_ORDER );
722
  }
723
-
724
  if ( $menu_position ) {
725
  $submenu_file = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
726
  }
727
  }
728
 
729
- /*
730
- * Make sure the "Assistant" submenu line is bolded if the Media/Library submenu is hidden
731
- */
732
  if ( 'checked' != MLACore::mla_get_option( MLACoreOptions::MLA_SCREEN_DISPLAY_LIBRARY ) &&
733
  'upload.php' == $parent_file && ( empty( $submenu_file ) || 'upload.php' == $submenu_file ) ) {
734
  $submenu_file = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
735
  }
736
 
737
- /*
738
- * Make sure the "Assistant" submenu line is bolded when we go to the Edit Media page
739
- */
740
  if ( isset( $_REQUEST['mla_source'] ) ) {
741
  $submenu_file = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
742
  }
@@ -747,31 +757,35 @@ class MLA {
747
  /**
748
  * Process secure file download
749
  *
750
- * Requires _wpnonce, mla_download_file and mla_download_type in $_REQUEST; mla_download_disposition is optional.
751
- *
752
  * @since 2.00
753
  *
 
 
 
754
  * @return void echos file contents and calls exit();
755
  */
756
- private static function _process_mla_download_file() {
757
  $message = '';
758
- if ( isset( $_REQUEST['mla_download_file'] ) && isset( $_REQUEST['mla_download_type'] ) ) {
759
  if( ini_get( 'zlib.output_compression' ) ) {
760
  ini_set( 'zlib.output_compression', 'Off' );
761
  }
762
 
763
- $file_name = stripslashes( $_REQUEST['mla_download_file'] );
764
  $match_name = str_replace( '\\', '/', $file_name );
765
- $upload_dir = wp_upload_dir();
766
- $allowed_path = str_replace( '\\', '/', $upload_dir['basedir'] );
767
 
768
- if ( 0 !== strpos( $match_name, $allowed_path ) ) {
769
- $message = __( 'ERROR', 'media-library-assistant' ) . ': ' . 'download path out of bounds.';
 
 
 
 
 
770
  } elseif ( false !== strpos( $match_name, '..' ) ) {
771
- $message = __( 'ERROR', 'media-library-assistant' ) . ': ' . 'download path invalid.';
772
  }
773
  } else {
774
- $message = __( 'ERROR', 'media-library-assistant' ) . ': ' . 'download argument(s) not set.';
775
  }
776
 
777
  if ( empty( $message ) ) {
@@ -780,7 +794,7 @@ class MLA {
780
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
781
  header('Last-Modified: '.gmdate ( 'D, d M Y H:i:s', filemtime ( $file_name ) ).' GMT');
782
  header('Cache-Control: private',false);
783
- header('Content-Type: '.$_REQUEST['mla_download_type']);
784
  header('Content-Disposition: attachment; filename="'.basename( $file_name ).'"');
785
  header('Content-Transfer-Encoding: binary');
786
  header('Content-Length: '.filesize( $file_name )); // provide file size
@@ -788,7 +802,7 @@ class MLA {
788
 
789
  readfile( $file_name );
790
 
791
- if ( isset( $_REQUEST['mla_download_disposition'] ) && 'delete' == $_REQUEST['mla_download_disposition'] ) {
792
  @unlink( $file_name );
793
  }
794
  } else {
@@ -804,7 +818,7 @@ class MLA {
804
  echo '</body>';
805
  echo '</html> ';
806
  }
807
-
808
  exit();
809
  }
810
 
@@ -900,6 +914,38 @@ class MLA {
900
  }
901
  }
902
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
903
  if ( isset( $request['post_parent'] ) ) {
904
  if ( is_numeric( $request['post_parent'] ) ) {
905
  $new_data['post_parent'] = $request['post_parent'];
@@ -924,9 +970,7 @@ class MLA {
924
  }
925
  }
926
 
927
- /*
928
- * Custom field support
929
- */
930
  $custom_fields = array();
931
 
932
  if ( is_array( $custom_field_map ) ) {
@@ -950,9 +994,7 @@ class MLA {
950
  $new_data[ 'custom_updates' ] = $custom_fields;
951
  }
952
 
953
- /*
954
- * Taxonomy Support
955
- */
956
  $tax_inputs = array();
957
  $tax_actions = array();
958
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_prepare_bulk_edits( {$post_id} ) tax_input = " . var_export( $request['tax_input'], true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
@@ -967,17 +1009,13 @@ class MLA {
967
 
968
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_prepare_bulk_edits( {$post_id}, {$taxonomy}, {$tax_action} ) terms = " . var_export( $terms, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
969
 
970
- /*
971
- * Ignore empty updates
972
- */
973
  if ( $hierarchical = is_array( $terms ) ) {
974
  if ( false !== ( $index = array_search( 0, $terms ) ) ) {
975
  unset( $terms[ $index ] );
976
  }
977
  } else {
978
- /*
979
- * Parse out individual terms
980
- */
981
  $comma = _x( ',', 'tag_delimiter', 'media-library-assistant' );
982
  if ( ',' !== $comma ) {
983
  $tags = str_replace( $comma, ',', $terms );
@@ -1022,9 +1060,7 @@ class MLA {
1022
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_prepare_bulk_edits( {$post_id}, {$taxonomy}, {$tax_action} ) current_terms = " . var_export( $current_terms, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1023
 
1024
  if ( 'add' == $tax_action ) {
1025
- /*
1026
- * Add new terms; remove existing terms
1027
- */
1028
  foreach ( $terms as $index => $new_term ) {
1029
  if ( isset( $current_terms[ $new_term ] ) ) {
1030
  unset( $terms[ $index ] );
@@ -1033,9 +1069,7 @@ class MLA {
1033
 
1034
  $do_update = ! empty( $terms );
1035
  } elseif ( 'remove' == $tax_action ) {
1036
- /*
1037
- * Remove only the existing terms
1038
- */
1039
  foreach ( $terms as $index => $new_term ) {
1040
  if ( ! isset( $current_terms[ $new_term ] ) ) {
1041
  unset( $terms[ $index ] );
@@ -1151,7 +1185,7 @@ class MLA {
1151
 
1152
  foreach ( $request['cb_attachment'] as $index => $post_id ) {
1153
  self::$bulk_edit_data_source['cb_index']++;
1154
-
1155
  if ( ! current_user_can( 'edit_post', $post_id ) ) {
1156
  $page_content['message'] .= __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'You are not allowed to edit Attachment: ', 'media-library-assistant' ) . $post_id . '<br>';
1157
  continue;
@@ -1325,6 +1359,9 @@ class MLA {
1325
  * @return void
1326
  */
1327
  public static function mla_render_admin_page( ) {
 
 
 
1328
  /*
1329
  * WordPress class-wp-list-table.php doesn't look in hidden fields to set
1330
  * the month filter dropdown or sorting parameters
@@ -1345,8 +1382,10 @@ class MLA {
1345
  if ( ! empty( $_REQUEST['bulk_refresh'] ) ) {
1346
  unset( $_REQUEST['action'] );
1347
  unset( $_POST['action'] );
 
1348
  unset( $_REQUEST['action2'] );
1349
  unset( $_POST['action2'] );
 
1350
  }
1351
 
1352
  $bulk_action = self::_current_bulk_action();
@@ -1357,7 +1396,6 @@ class MLA {
1357
  }
1358
 
1359
  echo "<div class=\"wrap\">\n";
1360
- // echo "<div id=\"icon-upload\" class=\"icon32\"><br/></div>\n";
1361
  echo "<h1 class=\"wp-heading-inline\">{$page_title}"; // trailing </h1> is action-specific
1362
 
1363
  if ( !current_user_can( 'upload_files' ) ) {
@@ -1389,9 +1427,7 @@ class MLA {
1389
  unset ( $_REQUEST['post_category'] );
1390
  }
1391
 
1392
- /*
1393
- * Process bulk actions that affect an array of items
1394
- */
1395
  if ( $bulk_action && ( $bulk_action != 'none' ) ) {
1396
  // bulk_refresh simply refreshes the page, ignoring other bulk actions
1397
  if ( empty( $_REQUEST['bulk_refresh'] ) ) {
@@ -1404,9 +1440,7 @@ class MLA {
1404
  self::mla_clear_filter_by();
1405
  }
1406
 
1407
- /*
1408
- * Empty the Trash?
1409
- */
1410
  if ( isset( $_REQUEST['delete_all'] ) ) {
1411
  global $wpdb;
1412
 
@@ -1430,9 +1464,7 @@ class MLA {
1430
  }
1431
  }
1432
 
1433
- /*
1434
- * Process row-level actions that affect a single item
1435
- */
1436
  if ( !empty( $_REQUEST['mla_admin_action'] ) ) {
1437
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
1438
 
@@ -1503,6 +1535,13 @@ class MLA {
1503
  $page_content['message'] = $custom_message . $page_content['message'];
1504
  }
1505
  } // (!empty($_REQUEST['mla_admin_action'])
 
 
 
 
 
 
 
1506
 
1507
  if ( !empty( $page_content['body'] ) ) {
1508
  if ( !empty( $page_content['message'] ) ) {
@@ -1519,9 +1558,7 @@ class MLA {
1519
 
1520
  echo $page_content['body'];
1521
  } else {
1522
- /*
1523
- * Display Attachments list
1524
- */
1525
  if ( !empty( $_REQUEST['heading_suffix'] ) ) {
1526
  echo ' - ' . esc_html( $_REQUEST['heading_suffix'] ) . $heading_tail;
1527
  } elseif ( !empty( $_REQUEST['mla_terms_search'] ) ) {
@@ -1548,35 +1585,39 @@ class MLA {
1548
  echo " </p></div>\n"; // id="message"
1549
  }
1550
 
1551
- // Create an instance of our package class...
1552
  $MLAListTable = apply_filters( 'mla_list_table_new_instance', NULL );
1553
  if ( is_null( $MLAListTable ) ) {
1554
  $MLAListTable = new MLA_List_Table();
1555
  }
1556
 
1557
- // Fetch, prepare, sort, and filter our data...
1558
  $MLAListTable->prepare_items();
1559
  $MLAListTable->views();
1560
 
1561
  $view_arguments = MLA_List_Table::mla_submenu_arguments();
1562
- if ( isset( $view_arguments['lang'] ) ) {
1563
  $form_url = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG . '&lang=' . $view_arguments['lang'];
1564
  } else {
1565
  $form_url = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
1566
  }
1567
 
1568
- // Forms are NOT created automatically, wrap the table in one to use features like bulk actions
1569
- echo "\n" . '<form action="' . admin_url( $form_url ) . '" method="post" id="mla-filter">' . "\n";
1570
- /*
1571
- * Include the Search Media box
1572
- */
 
1573
  require_once MLA_PLUGIN_PATH . 'includes/mla-main-search-box-template.php';
1574
 
1575
- /*
1576
- * We also need to ensure that the form posts back to our current page and remember all the view arguments
1577
- */
1578
  echo sprintf( '<input type="hidden" name="page" value="%1$s" />', $_REQUEST['page'] ) . "\n";
1579
 
 
 
 
 
 
1580
  foreach ( $view_arguments as $key => $value ) {
1581
  if ( 'meta_query' == $key ) {
1582
  $value = stripslashes( $_REQUEST['meta_query'] );
@@ -1598,7 +1639,7 @@ class MLA {
1598
  }
1599
  }
1600
 
1601
- // Now we can render the completed list table
1602
  $MLAListTable->display();
1603
  echo "</form><!-- id=mla-filter -->\n";
1604
 
@@ -1681,9 +1722,7 @@ class MLA {
1681
  wp_die( __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'You are not allowed to edit this Attachment.', 'media-library-assistant' ) );
1682
  }
1683
 
1684
- /*
1685
- * Custom field support
1686
- */
1687
  $custom_fields = array();
1688
  foreach ( MLACore::mla_custom_field_support( 'quick_edit' ) as $slug => $details ) {
1689
  if ( isset( $_REQUEST[ $slug ] ) ) {
@@ -1709,9 +1748,7 @@ class MLA {
1709
  $_REQUEST[ 'custom_updates' ] = $custom_fields;
1710
  }
1711
 
1712
- /*
1713
- * The category taxonomy is a special case because post_categories_meta_box() changes the input name
1714
- */
1715
  if ( !isset( $_REQUEST['tax_input'] ) ) {
1716
  $_REQUEST['tax_input'] = array();
1717
  }
@@ -1722,9 +1759,7 @@ class MLA {
1722
  }
1723
 
1724
  if ( ! empty( $_REQUEST['tax_input'] ) ) {
1725
- /*
1726
- * Flat taxonomy strings must be cleaned up and duplicates removed
1727
- */
1728
  $tax_output = array();
1729
  foreach ( $_REQUEST['tax_input'] as $tax_name => $tax_value ) {
1730
  if ( ! is_array( $tax_value ) ) {
@@ -1767,6 +1802,13 @@ class MLA {
1767
 
1768
  if ( ! $prevent_default ) {
1769
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_inline_edit_ajax_action( {$post_id} ) \$_REQUEST = " . var_export( $_REQUEST, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
 
 
 
 
 
 
 
1770
  $results = MLAData::mla_update_single_item( $post_id, $_REQUEST, $_REQUEST['tax_input'] );
1771
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_inline_edit_ajax_action( {$post_id} ) results = " . var_export( $results, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1772
  }
@@ -1774,7 +1816,7 @@ class MLA {
1774
  $new_item = (object) MLAData::mla_get_attachment_by_id( $post_id );
1775
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_inline_edit_ajax_action( {$post_id} ) new_item = " . var_export( $new_item, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1776
 
1777
- // Create an instance of our package class and echo the new HTML
1778
  $MLAListTable = apply_filters( 'mla_list_table_new_instance', NULL );
1779
  if ( is_null( $MLAListTable ) ) {
1780
  $MLAListTable = new MLA_List_Table();
@@ -1885,6 +1927,55 @@ class MLA {
1885
  return $set_parent_form;
1886
  }
1887
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1888
  /**
1889
  * Build the hidden row templates for inline editing (quick and bulk edit)
1890
  *
@@ -2057,6 +2148,8 @@ class MLA {
2057
  'Description' => __( 'Description', 'media-library-assistant' ),
2058
  'description_field' => $description_field,
2059
  'ALT Text' => __( 'ALT Text', 'media-library-assistant' ),
 
 
2060
  'Parent ID' => __( 'Parent ID', 'media-library-assistant' ),
2061
  'Select' => __( 'Select', 'media-library-assistant' ),
2062
  'Menu Order' => __( 'Menu Order', 'media-library-assistant' ),
143
  */
144
  public static function mla_admin_init_action() {
145
  //static $count = 0;
146
+ //error_log( __LINE__ . ' MLA::mla_admin_init_action $count = ' . var_export( $count++, true ), 0 );
147
+
148
+ //error_log( __LINE__ . ' MLA::mla_admin_init_action referer = ' . var_export( wp_get_referer(), true ), 0 );
149
+ //error_log( __LINE__ . ' MLA::mla_admin_init_action $_REQUEST = ' . var_export( $_REQUEST, true ), 0 );
150
+ //error_log( __LINE__ . ' MLA::mla_admin_init_action $_POST = ' . var_export( $_POST, true ), 0 );
151
+ //error_log( __LINE__ . ' MLA::mla_admin_init_action $_GET = ' . var_export( $_GET, true ), 0 );
152
+
153
+ // Process secure file download requests
154
  if ( isset( $_REQUEST['mla_download_file'] ) && isset( $_REQUEST['mla_download_type'] ) ) {
155
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
156
+ self::_process_mla_download_file( $_REQUEST, true );
157
  exit();
158
  }
159
 
160
+ // Process error log download requests from the Debug tab
161
+ if ( isset( $_REQUEST['mla_download_error_log'] ) ) {
162
+ check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
163
+
164
+ // Find the appropriate error log file
165
+ $error_log_name = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_FILE );
166
+ if ( empty( $error_log_name ) ) {
167
+ $error_log_name = ini_get( 'error_log' );
168
+ } else {
169
+ $first = substr( $error_log_name, 0, 1 );
170
+ if ( ( '/' != $first ) && ( '\\' != $first ) ) {
171
+ $error_log_name = '/' . $error_log_name;
172
+ }
173
+
174
+ $error_log_name = WP_CONTENT_DIR . $error_log_name;
175
+ }
176
+
177
+ if ( file_exists ( $error_log_name ) ) {
178
+ $request = array (
179
+ 'mla_download_file' => addslashes( $error_log_name ),
180
+ 'mla_download_type' => 'text/plain',
181
+ );
182
+
183
+ self::_process_mla_download_file( $request, false );
184
+ }
185
+
186
+ exit();
187
+ }
188
+
189
+ // Process row-level actions from the Edit Media screen
190
  if ( !empty( $_REQUEST['mla_admin_action'] ) ) {
191
  if ( isset( $_REQUEST['mla-set-parent-ajax-nonce'] ) ) {
192
  check_admin_referer( 'mla_find_posts', 'mla-set-parent-ajax-nonce' );
201
  do_action( 'mla_begin_mapping', 'single_custom', $_REQUEST['mla_item_ID'] );
202
  $updates = MLAOptions::mla_evaluate_custom_field_mapping( $_REQUEST['mla_item_ID'], 'single_attachment_mapping' );
203
  do_action( 'mla_end_mapping' );
204
+
205
  if ( !empty( $updates ) ) {
206
  $item_content = MLAData::mla_update_single_item( $_REQUEST['mla_item_ID'], $updates );
207
  }
208
+
209
  $message = '101';
210
  } else {
211
  $message = '103';
212
  }
213
+
214
  $view_args = isset( $_REQUEST['mla_source'] ) ? array( 'mla_source' => $_REQUEST['mla_source']) : array();
215
  wp_redirect( add_query_arg( $view_args, admin_url( 'post.php' ) . '?post=' . $_REQUEST['mla_item_ID'] . '&action=edit&message=' . $message ), 302 );
216
  exit;
225
  } else {
226
  $message = '104';
227
  }
228
+
229
  $view_args = isset( $_REQUEST['mla_source'] ) ? array( 'mla_source' => $_REQUEST['mla_source']) : array();
230
  wp_redirect( add_query_arg( $view_args, admin_url( 'post.php' ) . '?post=' . $_REQUEST['mla_item_ID'] . '&action=edit&message=' . $message ), 302 );
231
  exit;
269
  // Optional - change the size of the thumbnail/icon images
270
  $icon_value = MLACore::mla_get_option( MLACoreOptions::MLA_TABLE_ICON_SIZE );
271
  $set_column_width = !empty( $icon_value ) && is_numeric( $icon_value ) && ( 64 < $icon_value );
272
+
273
  if ( 'checked' == MLACore::mla_get_option( MLACoreOptions::MLA_ENABLE_MLA_ICONS ) ) {
274
  if ( empty( $icon_value ) ) {
275
  $icon_value = 64;
313
  echo " margin-bottom: .2em;\n";
314
  echo " font-size: 14px;\n";
315
  echo " }\n";
316
+
317
  echo " table.attachments .column-primary .media-icon {\n";
318
  echo " float: left;\n";
319
  echo " margin: 0 9px 0 0;\n";
320
  echo " font-size: 14px;\n";
321
  echo " }\n";
322
+
323
  echo " table.attachments .column-primary div.row-actions {\n";
324
  echo " clear: both;\n";
325
  echo " }\n";
326
+
327
  // Explicit primary column width including icon and some margin
328
  if ( $set_column_width ) {
329
  $column_width = ( $icon_value + 30 ) . 'px';
330
+
331
  echo " table.attachments th.column-primary {\n";
332
  echo " width: {$column_width};\n";
333
  echo " }\n";
334
  }
335
+
336
  echo " table.attachments td.column-primary {\n";
337
  echo " position: relative;\n";
338
+
339
  if ( $set_column_width ) {
340
  echo " width: {$column_width};\n";
341
  }
342
+
343
  echo " }\n";
344
  } else {
345
  /*
412
 
413
  MLAModal::mla_add_terms_search_scripts();
414
 
415
+ $fields = array( 'post_title', 'post_name', 'post_excerpt', 'post_content', 'image_alt', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_parent', 'post_parent_title', 'menu_order', 'post_author' );
416
  $custom_fields = MLACore::mla_custom_field_support( 'quick_edit' );
417
  $custom_fields = array_merge( $custom_fields, MLACore::mla_custom_field_support( 'bulk_edit' ) );
418
  foreach ( $custom_fields as $slug => $details ) {
536
  $mla_source = isset( $_REQUEST['mla_source'] ) && in_array( $_REQUEST['mla_source'], array ( 'trash', 'delete' ) );
537
 
538
  if ( $mla_source || ( 'checked' != MLACore::mla_get_option( MLACoreOptions::MLA_SCREEN_DISPLAY_LIBRARY ) ) ) {
539
+ // Allow "grid" view even if the list view is suppressed
 
 
540
  if ( isset( $_REQUEST['mode'] ) && 'grid' === $_REQUEST['mode'] ) {
541
  return;
542
  }
543
+
544
  $query_args = '?page=' . MLACore::ADMIN_PAGE_SLUG;
545
 
546
+ // Compose a message if returning from the Edit Media screen
 
 
547
  if ( ! empty( $_GET['deleted'] ) && $deleted = absint( $_GET['deleted'] ) ) {
548
  $query_args .= '&mla_admin_message=' . urlencode( sprintf( _n( 'Item permanently deleted.', '%d items permanently deleted.', $deleted, 'media-library-assistant' ), number_format_i18n( $_GET['deleted'] ) ) );
549
  }
571
  $args = array(
572
  'label' => __( 'Entries per page', 'media-library-assistant' ),
573
  'default' => 10,
574
+ 'option' => MLA_OPTION_PREFIX . 'entries_per_page'
575
  );
576
 
577
  add_screen_option( $option, $args );
586
  */
587
  public static function mla_add_help_tab( ) {
588
  $screen = get_current_screen();
589
+ // Is this one of our pages?
 
 
590
  if ( !array_key_exists( $screen->id, self::$page_hooks ) ) {
591
  return;
592
  }
597
 
598
  $file_suffix = $screen->id;
599
 
600
+ // Use a generic page for edit taxonomy screens
 
 
601
  if ( 't_' == substr( self::$page_hooks[ $file_suffix ], 0, 2 ) ) {
602
  $taxonomy = substr( self::$page_hooks[ $file_suffix ], 2 );
603
  switch ( $taxonomy ) {
624
  return;
625
  }
626
 
627
+ // Don't add sidebar to the WordPress category and post_tag screens
 
 
628
  if ( ! ( 'edit-tags' == $screen->base && in_array( $screen->taxonomy, array( 'post_tag', 'category' ) ) ) ) {
629
  if ( !empty( $template_array['sidebar'] ) ) {
630
  $page_values = array( 'settingsURL' => admin_url('options-general.php') );
634
  }
635
  unset( $template_array['sidebar'] );
636
 
637
+ // Provide explicit control over tab order
 
 
638
  $tab_array = array();
639
 
640
  foreach ( $template_array as $id => $content ) {
654
 
655
  ksort( $tab_array, SORT_NUMERIC );
656
  foreach ( $tab_array as $indx => $value ) {
657
+ // Don't add duplicate tabs to the WordPress category and post_tag screens
 
 
658
  if ( 'edit-tags' == $screen->base && in_array( $screen->taxonomy, array( 'post_tag', 'category' ) ) ) {
659
  if ( 'mla-attachments-column' != $value['id'] ) {
660
  continue;
706
  MLACore::mla_debug_add( $debug_message, MLACore::MLA_DEBUG_CATEGORY_ANY );
707
  }
708
 
709
+ if ( ( MLA_OPTION_PREFIX . 'entries_per_page' ) == $option ) {
710
  return $value;
711
  }
712
 
734
  } else {
735
  $menu_position = (integer) MLACore::mla_get_option( MLACoreOptions::MLA_SCREEN_ORDER );
736
  }
737
+
738
  if ( $menu_position ) {
739
  $submenu_file = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
740
  }
741
  }
742
 
743
+ // Make sure the "Assistant" submenu line is bolded if the Media/Library submenu is hidden
 
 
744
  if ( 'checked' != MLACore::mla_get_option( MLACoreOptions::MLA_SCREEN_DISPLAY_LIBRARY ) &&
745
  'upload.php' == $parent_file && ( empty( $submenu_file ) || 'upload.php' == $submenu_file ) ) {
746
  $submenu_file = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
747
  }
748
 
749
+ // Make sure the "Assistant" submenu line is bolded when we go to the Edit Media page
 
 
750
  if ( isset( $_REQUEST['mla_source'] ) ) {
751
  $submenu_file = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
752
  }
757
  /**
758
  * Process secure file download
759
  *
 
 
760
  * @since 2.00
761
  *
762
+ * @param array $request The download parameters mla_download_file and mla_download_type; mla_download_disposition is optional.
763
+ * @param boolean $test_path True to restrict downloads to the "uploads" area, false to download anywhere.
764
+ *
765
  * @return void echos file contents and calls exit();
766
  */
767
+ private static function _process_mla_download_file( $request, $test_path ) {
768
  $message = '';
769
+ if ( isset( $request['mla_download_file'] ) && isset( $request['mla_download_type'] ) ) {
770
  if( ini_get( 'zlib.output_compression' ) ) {
771
  ini_set( 'zlib.output_compression', 'Off' );
772
  }
773
 
774
+ $file_name = stripslashes( $request['mla_download_file'] );
775
  $match_name = str_replace( '\\', '/', $file_name );
 
 
776
 
777
+ if ( $test_path ) {
778
+ $upload_dir = wp_upload_dir();
779
+ $allowed_path = str_replace( '\\', '/', $upload_dir['basedir'] );
780
+ }
781
+
782
+ if ( $test_path && ( 0 !== strpos( $match_name, $allowed_path ) ) ) {
783
+ $message = __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'download path out of bounds.', 'media-library-assistant' );
784
  } elseif ( false !== strpos( $match_name, '..' ) ) {
785
+ $message = __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'download path invalid.', 'media-library-assistant' );
786
  }
787
  } else {
788
+ $message = __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'download argument(s) not set.', 'media-library-assistant' );
789
  }
790
 
791
  if ( empty( $message ) ) {
794
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
795
  header('Last-Modified: '.gmdate ( 'D, d M Y H:i:s', filemtime ( $file_name ) ).' GMT');
796
  header('Cache-Control: private',false);
797
+ header('Content-Type: '.$request['mla_download_type']);
798
  header('Content-Disposition: attachment; filename="'.basename( $file_name ).'"');
799
  header('Content-Transfer-Encoding: binary');
800
  header('Content-Length: '.filesize( $file_name )); // provide file size
802
 
803
  readfile( $file_name );
804
 
805
+ if ( isset( $request['mla_download_disposition'] ) && 'delete' == $request['mla_download_disposition'] ) {
806
  @unlink( $file_name );
807
  }
808
  } else {
818
  echo '</body>';
819
  echo '</html> ';
820
  }
821
+
822
  exit();
823
  }
824
 
914
  }
915
  }
916
 
917
+ if ( isset( $request['post_date'] ) ) {
918
+ $test_value = self::_process_bulk_value( $post_id, $request['post_date'] );
919
+ if ( ! empty( $test_value ) ) {
920
+ // User input is in local time, not UTC
921
+ $tz = get_option( 'timezone_string' );
922
+ if ( !$tz ) {
923
+ $tz = get_option( 'gmt_offset' );
924
+ if ( !$tz ) {
925
+ $tz = 'UTC';
926
+ }
927
+ }
928
+
929
+ $datetime = date_create( $test_value, new DateTimeZone( $tz ) );
930
+ if ( $datetime ) {
931
+ $new_text = $datetime->format( 'Y-m-d H:i:s' );
932
+ $new_data['post_date'] = $new_text;
933
+ $new_data['post_date_gmt'] = get_gmt_from_date( $new_text );
934
+ } else {
935
+ // strtotime() will "Parse about any English textual datetime description into a Unix timestamp"
936
+ $timestamp = strtotime( $test_value );
937
+ if( false !== $timestamp ) {
938
+ // date() "Returns a string formatted according to the format string using the integer timestamp"
939
+ $new_text = date( 'Y-m-d H:i:s', $timestamp );
940
+ $new_data['post_date'] = $new_text;
941
+ $new_data['post_date_gmt'] = get_gmt_from_date( $new_text );
942
+ }
943
+ }
944
+ } elseif ( is_null( $test_value ) ) {
945
+ // empty post_date value is not acceptable
946
+ }
947
+ }
948
+
949
  if ( isset( $request['post_parent'] ) ) {
950
  if ( is_numeric( $request['post_parent'] ) ) {
951
  $new_data['post_parent'] = $request['post_parent'];
970
  }
971
  }
972
 
973
+ // Custom field support
 
 
974
  $custom_fields = array();
975
 
976
  if ( is_array( $custom_field_map ) ) {
994
  $new_data[ 'custom_updates' ] = $custom_fields;
995
  }
996
 
997
+ // Taxonomy Support
 
 
998
  $tax_inputs = array();
999
  $tax_actions = array();
1000
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_prepare_bulk_edits( {$post_id} ) tax_input = " . var_export( $request['tax_input'], true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1009
 
1010
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_prepare_bulk_edits( {$post_id}, {$taxonomy}, {$tax_action} ) terms = " . var_export( $terms, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1011
 
1012
+ // Ignore empty updates
 
 
1013
  if ( $hierarchical = is_array( $terms ) ) {
1014
  if ( false !== ( $index = array_search( 0, $terms ) ) ) {
1015
  unset( $terms[ $index ] );
1016
  }
1017
  } else {
1018
+ // Parse out individual terms
 
 
1019
  $comma = _x( ',', 'tag_delimiter', 'media-library-assistant' );
1020
  if ( ',' !== $comma ) {
1021
  $tags = str_replace( $comma, ',', $terms );
1060
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_prepare_bulk_edits( {$post_id}, {$taxonomy}, {$tax_action} ) current_terms = " . var_export( $current_terms, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1061
 
1062
  if ( 'add' == $tax_action ) {
1063
+ // Add new terms; remove existing terms
 
 
1064
  foreach ( $terms as $index => $new_term ) {
1065
  if ( isset( $current_terms[ $new_term ] ) ) {
1066
  unset( $terms[ $index ] );
1069
 
1070
  $do_update = ! empty( $terms );
1071
  } elseif ( 'remove' == $tax_action ) {
1072
+ // Remove only the existing terms
 
 
1073
  foreach ( $terms as $index => $new_term ) {
1074
  if ( ! isset( $current_terms[ $new_term ] ) ) {
1075
  unset( $terms[ $index ] );
1185
 
1186
  foreach ( $request['cb_attachment'] as $index => $post_id ) {
1187
  self::$bulk_edit_data_source['cb_index']++;
1188
+
1189
  if ( ! current_user_can( 'edit_post', $post_id ) ) {
1190
  $page_content['message'] .= __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'You are not allowed to edit Attachment: ', 'media-library-assistant' ) . $post_id . '<br>';
1191
  continue;
1359
  * @return void
1360
  */
1361
  public static function mla_render_admin_page( ) {
1362
+ // Prevent _wp_http_referer recursion with method="get"
1363
+ $_SERVER['REQUEST_URI'] = '/wp-admin/upload.php?page=mla-menu';
1364
+
1365
  /*
1366
  * WordPress class-wp-list-table.php doesn't look in hidden fields to set
1367
  * the month filter dropdown or sorting parameters
1382
  if ( ! empty( $_REQUEST['bulk_refresh'] ) ) {
1383
  unset( $_REQUEST['action'] );
1384
  unset( $_POST['action'] );
1385
+ unset( $_GET['action'] );
1386
  unset( $_REQUEST['action2'] );
1387
  unset( $_POST['action2'] );
1388
+ unset( $_GET['action2'] );
1389
  }
1390
 
1391
  $bulk_action = self::_current_bulk_action();
1396
  }
1397
 
1398
  echo "<div class=\"wrap\">\n";
 
1399
  echo "<h1 class=\"wp-heading-inline\">{$page_title}"; // trailing </h1> is action-specific
1400
 
1401
  if ( !current_user_can( 'upload_files' ) ) {
1427
  unset ( $_REQUEST['post_category'] );
1428
  }
1429
 
1430
+ // Process bulk actions that affect an array of items
 
 
1431
  if ( $bulk_action && ( $bulk_action != 'none' ) ) {
1432
  // bulk_refresh simply refreshes the page, ignoring other bulk actions
1433
  if ( empty( $_REQUEST['bulk_refresh'] ) ) {
1440
  self::mla_clear_filter_by();
1441
  }
1442
 
1443
+ // Empty the Trash?
 
 
1444
  if ( isset( $_REQUEST['delete_all'] ) ) {
1445
  global $wpdb;
1446
 
1464
  }
1465
  }
1466
 
1467
+ // Process row-level actions that affect a single item
 
 
1468
  if ( !empty( $_REQUEST['mla_admin_action'] ) ) {
1469
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
1470
 
1535
  $page_content['message'] = $custom_message . $page_content['message'];
1536
  }
1537
  } // (!empty($_REQUEST['mla_admin_action'])
1538
+
1539
+ // Don't let WPML copy these to language-specific URLs
1540
+ foreach ( array( 'action', 'action2', 'cb_attachment', 'clear_filter_by', 'delete_all', 'mla_admin_action' ) as $argument ) {
1541
+ unset( $_REQUEST[ $argument ] );
1542
+ unset( $_POST[ $argument ] );
1543
+ unset( $_GET[ $argument ] );
1544
+ }
1545
 
1546
  if ( !empty( $page_content['body'] ) ) {
1547
  if ( !empty( $page_content['message'] ) ) {
1558
 
1559
  echo $page_content['body'];
1560
  } else {
1561
+ // Display Attachments list
 
 
1562
  if ( !empty( $_REQUEST['heading_suffix'] ) ) {
1563
  echo ' - ' . esc_html( $_REQUEST['heading_suffix'] ) . $heading_tail;
1564
  } elseif ( !empty( $_REQUEST['mla_terms_search'] ) ) {
1585
  echo " </p></div>\n"; // id="message"
1586
  }
1587
 
1588
+ // Create an instance of our package class...
1589
  $MLAListTable = apply_filters( 'mla_list_table_new_instance', NULL );
1590
  if ( is_null( $MLAListTable ) ) {
1591
  $MLAListTable = new MLA_List_Table();
1592
  }
1593
 
1594
+ // Fetch, prepare, sort, and filter our data...
1595
  $MLAListTable->prepare_items();
1596
  $MLAListTable->views();
1597
 
1598
  $view_arguments = MLA_List_Table::mla_submenu_arguments();
1599
+ if ( isset( $view_arguments['lang'] ) ) { // from WPML/Polylang
1600
  $form_url = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG . '&lang=' . $view_arguments['lang'];
1601
  } else {
1602
  $form_url = 'upload.php?page=' . MLACore::ADMIN_PAGE_SLUG;
1603
  }
1604
 
1605
+ // Forms are NOT created automatically, wrap the table in one to use features like bulk actions
1606
+ // method chnged from post to get fo ACP Export compatibility 20180221
1607
+ // echo "\n" . '<form action="' . admin_url( $form_url ) . '" method="post" id="mla-filter">' . "\n";
1608
+ echo "\n" . '<form action="' . admin_url( $form_url ) . '" method="get" id="mla-filter">' . "\n";
1609
+
1610
+ // Include the Search Media box
1611
  require_once MLA_PLUGIN_PATH . 'includes/mla-main-search-box-template.php';
1612
 
1613
+ // We also need to ensure that the form posts back to our current page and remember all the view arguments
 
 
1614
  echo sprintf( '<input type="hidden" name="page" value="%1$s" />', $_REQUEST['page'] ) . "\n";
1615
 
1616
+ // Pass the WPML/Polylang language in the form
1617
+ if ( isset( $view_arguments['lang'] ) ) {
1618
+ echo sprintf( '<input type="hidden" name="lang" value="%1$s" />', $view_arguments['lang'] ) . "\n";
1619
+ }
1620
+
1621
  foreach ( $view_arguments as $key => $value ) {
1622
  if ( 'meta_query' == $key ) {
1623
  $value = stripslashes( $_REQUEST['meta_query'] );
1639
  }
1640
  }
1641
 
1642
+ // Now we can render the completed list table
1643
  $MLAListTable->display();
1644
  echo "</form><!-- id=mla-filter -->\n";
1645
 
1722
  wp_die( __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'You are not allowed to edit this Attachment.', 'media-library-assistant' ) );
1723
  }
1724
 
1725
+ // Custom field support
 
 
1726
  $custom_fields = array();
1727
  foreach ( MLACore::mla_custom_field_support( 'quick_edit' ) as $slug => $details ) {
1728
  if ( isset( $_REQUEST[ $slug ] ) ) {
1748
  $_REQUEST[ 'custom_updates' ] = $custom_fields;
1749
  }
1750
 
1751
+ // The category taxonomy is a special case because post_categories_meta_box() changes the input name
 
 
1752
  if ( !isset( $_REQUEST['tax_input'] ) ) {
1753
  $_REQUEST['tax_input'] = array();
1754
  }
1759
  }
1760
 
1761
  if ( ! empty( $_REQUEST['tax_input'] ) ) {
1762
+ // Flat taxonomy strings must be cleaned up and duplicates removed
 
 
1763
  $tax_output = array();
1764
  foreach ( $_REQUEST['tax_input'] as $tax_name => $tax_value ) {
1765
  if ( ! is_array( $tax_value ) ) {
1802
 
1803
  if ( ! $prevent_default ) {
1804
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_inline_edit_ajax_action( {$post_id} ) \$_REQUEST = " . var_export( $_REQUEST, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1805
+
1806
+ $new_date = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $_REQUEST['aa'], $_REQUEST['mm'], $_REQUEST['jj'], $_REQUEST['hh'], $_REQUEST['mn'], $_REQUEST['ss'] );
1807
+ if ( wp_checkdate( $_REQUEST['mm'], $_REQUEST['jj'], $_REQUEST['aa'], $new_date ) ) {
1808
+ $_REQUEST['post_date'] = $new_date;
1809
+ $_REQUEST['post_date_gmt'] = get_gmt_from_date( $new_date );
1810
+ }
1811
+
1812
  $results = MLAData::mla_update_single_item( $post_id, $_REQUEST, $_REQUEST['tax_input'] );
1813
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_inline_edit_ajax_action( {$post_id} ) results = " . var_export( $results, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1814
  }
1816
  $new_item = (object) MLAData::mla_get_attachment_by_id( $post_id );
1817
  MLACore::mla_debug_add( __LINE__ . " MLA::mla_inline_edit_ajax_action( {$post_id} ) new_item = " . var_export( $new_item, true ), MLACore::MLA_DEBUG_CATEGORY_AJAX );
1818
 
1819
+ // Create an instance of our package class and echo the new HTML
1820
  $MLAListTable = apply_filters( 'mla_list_table_new_instance', NULL );
1821
  if ( is_null( $MLAListTable ) ) {
1822
  $MLAListTable = new MLA_List_Table();
1927
  return $set_parent_form;
1928
  }
1929
 
1930
+ /**
1931
+ * Generate HTML form elements for editing uploaded on date
1932
+ *
1933
+ * Adapted from /wp-admin/includes/template.php function touch_time()
1934
+ *
1935
+ * @since 2.71
1936
+ *
1937
+ * @global WP_Locale $wp_locale for month name abbreviations
1938
+ *
1939
+ * @return string HTML markup for the Uploaded on edit form
1940
+ */
1941
+ private static function _generate_time_edit_form() {
1942
+ global $wp_locale;
1943
+
1944
+ $current = current_time('timestamp');
1945
+ $jj = gmdate( 'd', $current );
1946
+ $mm = gmdate( 'm', $current );
1947
+ $aa = gmdate( 'Y', $current );
1948
+ $hh = gmdate( 'H', $current );
1949
+ $mn = gmdate( 'i', $current );
1950
+ $ss = gmdate( 's', $current );
1951
+
1952
+ $month = '<label><span class="screen-reader-text">' . __( 'Month' ) . '</span><select name="mm" ' . ">\n";
1953
+ for ( $i = 1; $i < 13; $i = $i +1 ) {
1954
+ $monthnum = zeroise($i, 2);
1955
+ $monthtext = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
1956
+ $month .= ' <option value="' . $monthnum . '" data-text="' . $monthtext . '" ' . selected( $monthnum, $mm, false ) . '>';
1957
+ /* translators: 1: month number (01, 02, etc.), 2: month abbreviation */
1958
+ $month .= sprintf( __( '%1$s-%2$s' ), $monthnum, $monthtext ) . "</option>\n";
1959
+ }
1960
+ $month .= '</select></label>';
1961
+
1962
+ $day = '<label><span class="screen-reader-text">' . __( 'Day' ) . '</span><input type="text" name="jj" value="' . $jj . '" size="2" maxlength="2" autocomplete="off" /></label>';
1963
+ $year = '<label><span class="screen-reader-text">' . __( 'Year' ) . '</span><input type="text" name="aa" value="' . $aa . '" size="4" maxlength="4" autocomplete="off" /></label>';
1964
+ $hour = '<label><span class="screen-reader-text">' . __( 'Hour' ) . '</span><input type="text" name="hh" value="' . $hh . '" size="2" maxlength="2" autocomplete="off" /></label>';
1965
+ $minute = '<label><span class="screen-reader-text">' . __( 'Minute' ) . '</span><input type="text" name="mn" value="' . $mn . '" size="2" maxlength="2" autocomplete="off" /></label>';
1966
+
1967
+ $time_edit_form = '<fieldset class="inline-edit-date">' . "\n";
1968
+ $time_edit_form .= '<legend><span class="title">' . sprintf( __( 'Uploaded on: %s' ), '' ) . '</span></legend>' . "\n";
1969
+ $time_edit_form .= '<div class="timestamp-wrap">' . "\n";
1970
+ $time_edit_form .= sprintf( __( '%1$s %2$s, %3$s @ %4$s:%5$s' ), $month, $day, $year, $hour, $minute );
1971
+
1972
+ $time_edit_form .= "</div>\n";
1973
+ $time_edit_form .= '<input type="hidden" name="ss" value="' . $ss . '" />' . "\n";
1974
+ $time_edit_form .= "</fieldset>\n";
1975
+
1976
+ return $time_edit_form;
1977
+ }
1978
+
1979
  /**
1980
  * Build the hidden row templates for inline editing (quick and bulk edit)
1981
  *
2148
  'Description' => __( 'Description', 'media-library-assistant' ),
2149
  'description_field' => $description_field,
2150
  'ALT Text' => __( 'ALT Text', 'media-library-assistant' ),
2151
+ 'Uploaded on' => self::_generate_time_edit_form(),
2152
+ 'Bulk Uploaded on' => __( 'Uploaded on', 'media-library-assistant' ),
2153
  'Parent ID' => __( 'Parent ID', 'media-library-assistant' ),
2154
  'Select' => __( 'Select', 'media-library-assistant' ),
2155
  'Menu Order' => __( 'Menu Order', 'media-library-assistant' ),
includes/class-mla-mime-types.php CHANGED
@@ -26,9 +26,13 @@ class MLAMime {
26
  self::_localize_default_upload_optional_columns();
27
  self::_localize_default_view_columns();
28
 
29
- // add_filter( 'sanitize_mime_type', 'MLAMime::mla_sanitize_mime_type_filter', 0x7FFFFFFF, 2 );
30
  add_filter( 'ext2type', 'MLAMime::mla_ext2type_filter', 0x7FFFFFFF, 1 );
31
- // add_filter( 'wp_check_filetype_and_ext', 'MLAMime::mla_wp_check_filetype_and_ext_filter', 0x7FFFFFFF, 4 );
 
 
 
 
 
32
 
33
  // Handle WP 4.6.2, 4.7.x SVG bug
34
  add_filter( 'getimagesize_mimes_to_exts', 'MLAMime::mla_getimagesize_mimes_to_exts_filter', 0x7FFFFFFF, 1 );
@@ -102,9 +106,8 @@ class MLAMime {
102
  */
103
  public static function mla_sanitize_mime_type_filter( $sanitized_mime_type, $raw_mime_type ) {
104
  global $wp_filter;
105
- // error_log( 'DEBUG: mla_sanitize_mime_type_filter $sanitized_mime_type = ' . var_export( $sanitized_mime_type, true ), 0 );
106
- // error_log( 'DEBUG: mla_sanitize_mime_type_filter $raw_mime_type = ' . var_export( $raw_mime_type, true ), 0 );
107
- // error_log( 'DEBUG: $wp_filter[sanitize_mime_type] = ' . var_export( $wp_filter['sanitize_mime_type'], true ), 0 );
108
  return $sanitized_mime_type;
109
  } // mla_sanitize_mime_type_filter
110
 
@@ -141,6 +144,9 @@ class MLAMime {
141
  public static function mla_ext2type_filter( $standard_types ) {
142
  global $wp_filter;
143
 
 
 
 
144
  if ( self::$disable_mla_filtering ) {
145
  self::$mla_core_icon_types = $standard_types;
146
  return $standard_types;
@@ -154,9 +160,7 @@ class MLAMime {
154
  return $standard_types;
155
  }
156
 
157
- /*
158
- * Build and sort the type => extensions list
159
- */
160
  $items = self::mla_query_upload_items( array( 'mla_upload_view' => 'active' ), 0, 0 );
161
  $pairs = array();
162
  foreach ( $items as $value )
@@ -168,9 +172,7 @@ class MLAMime {
168
 
169
  asort( $pairs );
170
 
171
- /*
172
- * Compress the list, grouping by icon_type
173
- */
174
  self::$mla_icon_type_associations = array();
175
  $icon_type = '.bad.value.'; // prime the pump
176
  $extensions = array ( 'xxx' );
@@ -187,6 +189,7 @@ class MLAMime {
187
  self::$mla_icon_type_associations[ $icon_type ] = $extensions;
188
  unset( self::$mla_icon_type_associations['.bad.value.'] );
189
 
 
190
  return self::$mla_icon_type_associations;
191
  } // mla_ext2type_filter
192
 
@@ -207,11 +210,10 @@ class MLAMime {
207
  */
208
  public static function mla_wp_check_filetype_and_ext_filter( $validate, $file, $filename, $mimes ) {
209
  global $wp_filter;
210
- // error_log( 'DEBUG: mla_wp_check_filetype_and_ext_filter $validate = ' . var_export( $validate, true ), 0 );
211
- // error_log( 'DEBUG: mla_wp_check_filetype_and_ext_filter $file = ' . var_export( $file, true ), 0 );
212
- // error_log( 'DEBUG: mla_wp_check_filetype_and_ext_filter $filename = ' . var_export( $filename, true ), 0 );
213
- // error_log( 'DEBUG: mla_wp_check_filetype_and_ext_filter $mimes = ' . var_export( $mimes, true ), 0 );
214
- // error_log( 'DEBUG: $wp_filter[wp_check_filetype_and_ext] = ' . var_export( $wp_filter['wp_check_filetype_and_ext'], true ), 0 );
215
  return $validate;
216
  } // mla_wp_check_filetype_and_ext_filter
217
 
@@ -233,29 +235,45 @@ class MLAMime {
233
  */
234
  public static function mla_mime_types_filter( $mime_types ) {
235
  global $wp_filter;
 
 
 
 
 
 
236
 
237
  if ( self::$disable_mla_filtering || ! self::_get_upload_mime_templates() ) {
 
238
  return $mime_types;
239
  }
240
 
241
- /*
242
- * Build and sort the extension => type list
243
- */
244
  $items = self::mla_query_upload_items( array( 'mla_upload_view' => 'active' ), 0, 0 );
245
  $pairs = array();
246
- foreach ( $items as $value )
247
  $pairs[ $value->slug ] = $value->mime_type;
 
248
 
249
  asort( $pairs );
250
 
251
- /*
252
- * Compress the list, grouping my mime_type
253
- */
254
  $items = array();
255
  $extensions = '.bad.value.'; // prime the pump
256
  $mime_type = '';
257
  foreach ( $pairs as $this_extension => $this_type ) {
258
  if ( $this_type != $mime_type ) {
 
 
 
 
 
 
 
 
 
 
 
 
259
  $items[ $extensions ] = $mime_type;
260
  $extensions = $this_extension;
261
  $mime_type = $this_type;
@@ -264,9 +282,15 @@ class MLAMime {
264
  }
265
  }
266
 
 
267
  $items[ $extensions ] = $mime_type;
268
  unset( $items['.bad.value.'] );
269
 
 
 
 
 
 
270
  return $items; // $mime_types;
271
  } // mla_mime_types_filter
272
 
@@ -294,14 +318,19 @@ class MLAMime {
294
  */
295
  public static function mla_upload_mimes_filter( $mime_types, $user = NULL ) {
296
  global $wp_filter;
 
 
 
 
 
 
297
 
298
  if ( self::$disable_mla_filtering || ! self::_get_upload_mime_templates() ) {
 
299
  return $mime_types;
300
  }
301
 
302
- /*
303
- * Build and sort the extension => type list
304
- */
305
  $items = self::mla_query_upload_items( array( 'mla_upload_view' => 'active' ), 0, 0 );
306
  $pairs = array();
307
  foreach ( $items as $value )
@@ -309,9 +338,7 @@ class MLAMime {
309
 
310
  asort( $pairs );
311
 
312
- /*
313
- * Compress the list, grouping by mime_type
314
- */
315
  $items = array();
316
  $extensions = '.bad.value.'; // prime the pump
317
  $mime_type = '';
@@ -328,9 +355,7 @@ class MLAMime {
328
  $items[ $extensions ] = $mime_type;
329
  unset( $items['.bad.value.'] );
330
 
331
- /*
332
- * Respect the WordPress per-user 'unfiltered_html' capability test
333
- */
334
  if ( function_exists( 'current_user_can' ) ) {
335
  $unfiltered = $user ? user_can( $user, 'unfiltered_html' ) : current_user_can( 'unfiltered_html' );
336
  } else {
@@ -343,6 +368,11 @@ class MLAMime {
343
  unset( $items['html'] );
344
  }
345
 
 
 
 
 
 
346
  return $items;
347
  } // mla_upload_mimes_filter
348
 
@@ -370,14 +400,19 @@ class MLAMime {
370
  */
371
  public static function mla_post_mime_types_filter( $post_mime_types ) {
372
  global $wp_filter;
 
 
 
 
 
 
373
 
374
  if ( self::$disable_mla_filtering || ! self::_get_post_mime_templates() ) {
 
375
  return $post_mime_types;
376
  }
377
 
378
- /*
379
- * Filter the list and sort by menu_order
380
- */
381
  $minor_sort = 0;
382
  $sorted_types = array();
383
  foreach ( self::$mla_post_mime_templates as $slug => $value )
@@ -407,6 +442,11 @@ class MLAMime {
407
  );
408
  }
409
 
 
 
 
 
 
410
  return $new_mime_types;
411
  } // mla_post_mime_types_filter
412
 
26
  self::_localize_default_upload_optional_columns();
27
  self::_localize_default_view_columns();
28
 
 
29
  add_filter( 'ext2type', 'MLAMime::mla_ext2type_filter', 0x7FFFFFFF, 1 );
30
+
31
+ // Check for active debug setting
32
+ if ( ( MLACore::$mla_debug_level & 1 ) && ( MLACore::$mla_debug_level & MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE ) ) {
33
+ add_filter( 'sanitize_mime_type', 'MLAMime::mla_sanitize_mime_type_filter', 0x7FFFFFFF, 2 );
34
+ add_filter( 'wp_check_filetype_and_ext', 'MLAMime::mla_wp_check_filetype_and_ext_filter', 0x7FFFFFFF, 4 );
35
+ }
36
 
37
  // Handle WP 4.6.2, 4.7.x SVG bug
38
  add_filter( 'getimagesize_mimes_to_exts', 'MLAMime::mla_getimagesize_mimes_to_exts_filter', 0x7FFFFFFF, 1 );
106
  */
107
  public static function mla_sanitize_mime_type_filter( $sanitized_mime_type, $raw_mime_type ) {
108
  global $wp_filter;
109
+ //MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_sanitize_mime_type_filter( $sanitized_mime_type, $raw_mime_type ) wp_filter = " . var_export( $wp_filter['sanitize_mime_type'], true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
110
+
 
111
  return $sanitized_mime_type;
112
  } // mla_sanitize_mime_type_filter
113
 
144
  public static function mla_ext2type_filter( $standard_types ) {
145
  global $wp_filter;
146
 
147
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_ext2type_filter standard_types = " . var_export( $standard_types, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
148
+ //MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_ext2type_filter wp_filter = " . var_export( $wp_filter['ext2type'], true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
149
+
150
  if ( self::$disable_mla_filtering ) {
151
  self::$mla_core_icon_types = $standard_types;
152
  return $standard_types;
160
  return $standard_types;
161
  }
162
 
163
+ // Build and sort the type => extensions list
 
 
164
  $items = self::mla_query_upload_items( array( 'mla_upload_view' => 'active' ), 0, 0 );
165
  $pairs = array();
166
  foreach ( $items as $value )
172
 
173
  asort( $pairs );
174
 
175
+ // Compress the list, grouping by icon_type
 
 
176
  self::$mla_icon_type_associations = array();
177
  $icon_type = '.bad.value.'; // prime the pump
178
  $extensions = array ( 'xxx' );
189
  self::$mla_icon_type_associations[ $icon_type ] = $extensions;
190
  unset( self::$mla_icon_type_associations['.bad.value.'] );
191
 
192
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_ext2type_filter mla_icon_type_associations = " . var_export( self::$mla_icon_type_associations, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
193
  return self::$mla_icon_type_associations;
194
  } // mla_ext2type_filter
195
 
210
  */
211
  public static function mla_wp_check_filetype_and_ext_filter( $validate, $file, $filename, $mimes ) {
212
  global $wp_filter;
213
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_wp_check_filetype_and_ext_filter( $file, $filename ) validate = " . var_export( $validate, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
214
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_wp_check_filetype_and_ext_filter mimes = " . var_export( $mimes, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
215
+ //MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_wp_check_filetype_and_ext_filter wp_filter = " . var_export( $wp_filter['wp_check_filetype_and_ext'], true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
216
+
 
217
  return $validate;
218
  } // mla_wp_check_filetype_and_ext_filter
219
 
235
  */
236
  public static function mla_mime_types_filter( $mime_types ) {
237
  global $wp_filter;
238
+ static $first_call = true;
239
+
240
+ if ( $first_call ) {
241
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_mime_types_filter mime_types = " . var_export( $mime_types, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
242
+ //MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_mime_types_filter wp_filter = " . var_export( $wp_filter['mime_types'], true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
243
+ }
244
 
245
  if ( self::$disable_mla_filtering || ! self::_get_upload_mime_templates() ) {
246
+ $first_call = false;
247
  return $mime_types;
248
  }
249
 
250
+ // Build and sort the extension => type list
 
 
251
  $items = self::mla_query_upload_items( array( 'mla_upload_view' => 'active' ), 0, 0 );
252
  $pairs = array();
253
+ foreach ( $items as $value ) {
254
  $pairs[ $value->slug ] = $value->mime_type;
255
+ }
256
 
257
  asort( $pairs );
258
 
259
+ // Compress the list, grouping my mime_type
 
 
260
  $items = array();
261
  $extensions = '.bad.value.'; // prime the pump
262
  $mime_type = '';
263
  foreach ( $pairs as $this_extension => $this_type ) {
264
  if ( $this_type != $mime_type ) {
265
+ // WP_Image_Editor::get_extension always takes the first array entry; must be jpg!
266
+ if ( 'image/jpeg' === $mime_type && ( 0 !== strpos( $extensions, 'jpg' ) ) ) {
267
+ $extensions = explode( '|', $extensions );
268
+
269
+ if ( false !== ( $jpg_index = array_search( 'jpg', $extensions ) ) ) {
270
+ unset( $extensions[ $jpg_index ] );
271
+ array_unshift( $extensions, 'jpg' );
272
+ }
273
+
274
+ $extensions = implode( '|', $extensions );
275
+ }
276
+
277
  $items[ $extensions ] = $mime_type;
278
  $extensions = $this_extension;
279
  $mime_type = $this_type;
282
  }
283
  }
284
 
285
+ // Finish off the last entry, then remove the pump-primer
286
  $items[ $extensions ] = $mime_type;
287
  unset( $items['.bad.value.'] );
288
 
289
+ if ( $first_call ) {
290
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_mime_types_filter items = " . var_export( $items, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
291
+ $first_call = false;
292
+ }
293
+
294
  return $items; // $mime_types;
295
  } // mla_mime_types_filter
296
 
318
  */
319
  public static function mla_upload_mimes_filter( $mime_types, $user = NULL ) {
320
  global $wp_filter;
321
+ static $first_call = false;
322
+
323
+ if ( $first_call ) {
324
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_upload_mimes_filter mime_types = " . var_export( $mime_types, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
325
+ //MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_upload_mimes_filter wp_filter = " . var_export( $wp_filter['upload_mimes'], true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
326
+ }
327
 
328
  if ( self::$disable_mla_filtering || ! self::_get_upload_mime_templates() ) {
329
+ $first_call = false;
330
  return $mime_types;
331
  }
332
 
333
+ // Build and sort the extension => type list
 
 
334
  $items = self::mla_query_upload_items( array( 'mla_upload_view' => 'active' ), 0, 0 );
335
  $pairs = array();
336
  foreach ( $items as $value )
338
 
339
  asort( $pairs );
340
 
341
+ // Compress the list, grouping by mime_type
 
 
342
  $items = array();
343
  $extensions = '.bad.value.'; // prime the pump
344
  $mime_type = '';
355
  $items[ $extensions ] = $mime_type;
356
  unset( $items['.bad.value.'] );
357
 
358
+ // Respect the WordPress per-user 'unfiltered_html' capability test
 
 
359
  if ( function_exists( 'current_user_can' ) ) {
360
  $unfiltered = $user ? user_can( $user, 'unfiltered_html' ) : current_user_can( 'unfiltered_html' );
361
  } else {
368
  unset( $items['html'] );
369
  }
370
 
371
+ if ( $first_call ) {
372
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_upload_mimes_filter( $unfiltered ) items = " . var_export( $items, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
373
+ $first_call = false;
374
+ }
375
+
376
  return $items;
377
  } // mla_upload_mimes_filter
378
 
400
  */
401
  public static function mla_post_mime_types_filter( $post_mime_types ) {
402
  global $wp_filter;
403
+ static $first_call = false;
404
+
405
+ if ( $first_call ) {
406
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_post_mime_types_filter post_mime_types = " . var_export( $post_mime_types, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
407
+ //MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_post_mime_types_filter wp_filter = " . var_export( $wp_filter['upload_mimes'], true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
408
+ }
409
 
410
  if ( self::$disable_mla_filtering || ! self::_get_post_mime_templates() ) {
411
+ $first_call = false;
412
  return $post_mime_types;
413
  }
414
 
415
+ // Filter the list and sort by menu_order
 
 
416
  $minor_sort = 0;
417
  $sorted_types = array();
418
  foreach ( self::$mla_post_mime_templates as $slug => $value )
442
  );
443
  }
444
 
445
+ if ( $first_call ) {
446
+ MLACore::mla_debug_add( __LINE__ . " MLAMime::mla_post_mime_types_filter new_mime_types = " . var_export( $new_mime_types, true ), MLACore::MLA_DEBUG_CATEGORY_MIME_TYPE );
447
+ $first_call = false;
448
+ }
449
+
450
  return $new_mime_types;
451
  } // mla_post_mime_types_filter
452
 
includes/class-mla-objects.php CHANGED
@@ -34,7 +34,7 @@ class MLAObjects {
34
  public static function mla_build_taxonomies( ) {
35
  if ( MLACore::mla_taxonomy_support('attachment_category') ) {
36
  $object_type = apply_filters( 'mla_attachment_category_types', array(
37
- 'attachment'
38
  ) );
39
 
40
  $labels = apply_filters( 'mla_attachment_category_labels', array(
@@ -112,8 +112,8 @@ class MLAObjects {
112
  foreach ( $taxonomies as $tax_name ) {
113
  if ( MLACore::mla_taxonomy_support( $tax_name ) ) {
114
  register_taxonomy_for_object_type( $tax_name, 'attachment');
115
- add_filter( "manage_edit-{$tax_name}_columns", 'MLAObjects::mla_taxonomy_get_columns_filter', 0x7FFFFFFF, 1 ); // $columns
116
- add_filter( "manage_{$tax_name}_custom_column", 'MLAObjects::mla_taxonomy_column_filter', 0x7FFFFFFF, 3 ); // $place_holder, $column_name, $tag->term_id
117
  } // taxonomy support
118
  } // foreach
119
  } // _add_taxonomy_support
@@ -129,9 +129,7 @@ class MLAObjects {
129
  * @return array updated column definitions for the edit taxonomy list table
130
  */
131
  public static function mla_taxonomy_get_columns_filter( $columns ) {
132
- /*
133
- * Adding or inline-editing a tag is done with AJAX, and there's no current screen object
134
- */
135
  if ( isset( $_POST['action'] ) && in_array( $_POST['action'], array( 'add-tag', 'inline-save-tax' ) ) ) {
136
  $post_type = !empty($_POST['post_type']) ? $_POST['post_type'] : 'post';
137
  $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
@@ -176,13 +174,9 @@ class MLAObjects {
176
  public static function mla_taxonomy_column_filter( $current_value, $column_name, $term_id ) {
177
  static $taxonomy = NULL, $tax_object = NULL, $count_terms = false, $terms = array();
178
 
179
- /*
180
- * Do setup tasks once per page load
181
- */
182
  if ( NULL == $taxonomy ) {
183
- /*
184
- * Adding or inline-editing a tag is done with AJAX, and there's no current screen object
185
- */
186
  if ( defined('DOING_AJAX') && DOING_AJAX ) {
187
  $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
188
  } else {
@@ -200,13 +194,9 @@ class MLAObjects {
200
  return $current_value;
201
  }
202
 
203
- /*
204
- * Do setup tasks once per page load
205
- */
206
  if ( NULL == $tax_object ) {
207
- /*
208
- * Adding or inline-editing a tag is done with AJAX, and there's no current screen object
209
- */
210
  if ( defined('DOING_AJAX') && DOING_AJAX ) {
211
  $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
212
  } else {
34
  public static function mla_build_taxonomies( ) {
35
  if ( MLACore::mla_taxonomy_support('attachment_category') ) {
36
  $object_type = apply_filters( 'mla_attachment_category_types', array(
37
+ 'attachment',
38
  ) );
39
 
40
  $labels = apply_filters( 'mla_attachment_category_labels', array(
112
  foreach ( $taxonomies as $tax_name ) {
113
  if ( MLACore::mla_taxonomy_support( $tax_name ) ) {
114
  register_taxonomy_for_object_type( $tax_name, 'attachment');
115
+ add_filter( "manage_edit-{$tax_name}_columns", 'MLAObjects::mla_taxonomy_get_columns_filter', 0x7FFFFFFF, 1 );
116
+ add_filter( "manage_{$tax_name}_custom_column", 'MLAObjects::mla_taxonomy_column_filter', 0x7FFFFFFF, 3 );
117
  } // taxonomy support
118
  } // foreach
119
  } // _add_taxonomy_support
129
  * @return array updated column definitions for the edit taxonomy list table
130
  */
131
  public static function mla_taxonomy_get_columns_filter( $columns ) {
132
+ // Adding or inline-editing a tag is done with AJAX, and there's no current screen object
 
 
133
  if ( isset( $_POST['action'] ) && in_array( $_POST['action'], array( 'add-tag', 'inline-save-tax' ) ) ) {
134
  $post_type = !empty($_POST['post_type']) ? $_POST['post_type'] : 'post';
135
  $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
174
  public static function mla_taxonomy_column_filter( $current_value, $column_name, $term_id ) {
175
  static $taxonomy = NULL, $tax_object = NULL, $count_terms = false, $terms = array();
176
 
177
+ // Do setup tasks once per page load
 
 
178
  if ( NULL == $taxonomy ) {
179
+ // Adding or inline-editing a tag is done with AJAX, and there's no current screen object
 
 
180
  if ( defined('DOING_AJAX') && DOING_AJAX ) {
181
  $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
182
  } else {
194
  return $current_value;
195
  }
196
 
197
+ // Do setup tasks once per page load
 
 
198
  if ( NULL == $tax_object ) {
199
+ // Adding or inline-editing a tag is done with AJAX, and there's no current screen object
 
 
200
  if ( defined('DOING_AJAX') && DOING_AJAX ) {
201
  $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag';
202
  } else {
includes/class-mla-options.php CHANGED
@@ -502,6 +502,62 @@ class MLAOptions {
502
  return '<br>' . sprintf( __( '%1$s: Custom %2$s unknown action "%3$s"', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), $key, $action ) . "\r\n";
503
  }
504
  } // mla_search_option_handler
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
505
  /**
506
  * Examine or alter the filename before the file is made permanent
507
  *
@@ -787,6 +843,7 @@ class MLAOptions {
787
  */
788
  $setting_value['no_null'] = isset( $setting_value['no_null'] ) && ( false !== $setting_value['no_null'] );
789
 
 
790
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post_id, $category, $attachment_metadata );
791
  if ( NULL === $setting_value ) {
792
  continue;
@@ -1207,6 +1264,26 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1207
  $current_values = MLACore::mla_get_option( 'custom_field_mapping' );
1208
  } // mla_custom_field_option_handler
1209
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1210
  /**
1211
  * Build and search a cache of taxonomy and term name to term ID mappings
1212
  *
@@ -1220,21 +1297,19 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1220
  * @return integer term_id for the term name
1221
  */
1222
  private static function _get_term_id( $term_name, $term_parent, $taxonomy, &$post_terms ) {
1223
- static $term_cache = array(); // [ $taxonomy ][ $term_parent ][ $term_name ]
1224
-
1225
  // WordPress encodes special characters, e.g., "&" as HTML entities in term names
1226
  $term_name = _wp_specialchars( $term_name );
1227
 
1228
- // Is this term alerady in the cache?
1229
- if ( isset( $term_cache[ $taxonomy ] ) && isset( $term_cache[ $taxonomy ][ $term_parent ] ) && isset( $term_cache[ $taxonomy ][ $term_parent ][ $term_name ] ) ) {
1230
- return $term_cache[ $taxonomy ][ $term_parent ][ $term_name ];
1231
  }
1232
 
1233
  // Is this term already assigned to the item?
1234
  if ( is_array( $post_terms ) ) {
1235
  $term_id = 0;
1236
  foreach( $post_terms as $post_term ) {
1237
- $term_cache[ $taxonomy ][ $post_term->parent ][ $post_term->name ] = $post_term->term_id;
1238
  if ( $term_name == $post_term->name && $term_parent == $post_term->parent ) {
1239
  $term_id = $post_term->term_id;
1240
  }
@@ -1249,20 +1324,20 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1249
  if ( 0 === $term_parent ) {
1250
  $post_term = get_term_by( 'name', $term_name, $taxonomy ); // Consider get_terms() for identical names
1251
  if ( false !== $post_term ) {
1252
- $term_cache[ $taxonomy ][ $term_parent ][ $term_name ] = $post_term->term_id;
1253
  return $post_term->term_id;
1254
  }
1255
  } else {
1256
  $post_term = term_exists( $term_name, $taxonomy, $term_parent );
1257
  if ( $post_term !== 0 && $post_term !== NULL ) {
1258
- $term_cache[ $taxonomy ][ $term_parent ][ $term_name ] = absint( $post_term['term_id'] );
1259
  return absint( $post_term['term_id'] );
1260
  }
1261
  }
1262
 
1263
  $post_term = wp_insert_term( $term_name, $taxonomy, array( 'parent' => $term_parent ) );
1264
  if ( ( ! is_wp_error( $post_term ) ) && isset( $post_term['term_id'] ) ) {
1265
- $term_cache[ $taxonomy ][ $term_parent ][ $term_name ] = $post_term['term_id'];
1266
  return $post_term['term_id'];
1267
  }
1268
 
@@ -1289,9 +1364,7 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1289
 
1290
  $image_metadata = MLAData::mla_fetch_attachment_image_metadata( $post->ID );
1291
 
1292
- /*
1293
- * Make the PDF/XMP metadata available as EXIF values so simple rules like "EXIF:Keywords" will work
1294
- */
1295
  if ( empty( $image_metadata['mla_exif_metadata'] ) ) {
1296
  if ( ! empty( $image_metadata['mla_xmp_metadata'] ) ) {
1297
  $image_metadata['mla_exif_metadata'] = $image_metadata['mla_xmp_metadata'];
@@ -1314,6 +1387,7 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1314
 
1315
  if ( $update_all || ( 'iptc_exif_standard_mapping' == $category ) ) {
1316
  foreach ( $settings['standard'] as $setting_key => $setting_value ) {
 
1317
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post->ID, 'iptc_exif_standard_mapping', $attachment_metadata );
1318
  if ( NULL === $setting_value ) {
1319
  continue;
@@ -1413,6 +1487,18 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1413
  $updates[ $setting_key ] = $new_text;
1414
  }
1415
  break;
 
 
 
 
 
 
 
 
 
 
 
 
1416
  default:
1417
  // ignore anything else
1418
  } // $setting_key
@@ -1429,11 +1515,10 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1429
  continue;
1430
  }
1431
 
1432
- /*
1433
- * Convert checkbox value(s)
1434
- */
1435
  $hierarchical = $setting_value['hierarchical'] = (boolean) $setting_value['hierarchical'];
1436
 
 
1437
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post->ID, 'iptc_exif_taxonomy_mapping', $attachment_metadata );
1438
  if ( NULL === $setting_value ) {
1439
  continue;
@@ -1611,6 +1696,7 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1611
  $setting_value['no_null'] = isset( $setting_value['no_null'] );
1612
 
1613
  $setting_name = $setting_value['name'];
 
1614
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post->ID, 'iptc_exif_custom_mapping', $attachment_metadata );
1615
  if ( NULL === $setting_value ) {
1616
  continue;
@@ -1782,7 +1868,7 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1782
  'name' => 'mla_filter_term',
1783
  'id' => 'name',
1784
  'class' => 'postform',
1785
- 'selected' => ( 0 == $selection) ? -1 : $selection,
1786
  'hierarchical' => true,
1787
  'pad_counts' => false,
1788
  'taxonomy' => $taxonomy,
@@ -1796,7 +1882,8 @@ return "MLAOptions::mla_custom_field_option_handler( $action, $key ) deprecated.
1796
 
1797
  $dropdown_options = substr( $dropdown, strpos( $dropdown, ' >' ) + 2 );
1798
  $dropdown_options = substr( $dropdown_options, 0, strpos( $dropdown_options, '</select>' ) );
1799
- $dropdown_options = str_replace( "value='-1' ", 'value="0"', $dropdown_options );
 
1800
 
1801
  return $dropdown_options;
1802
  } // mla_compose_parent_option_list
502
  return '<br>' . sprintf( __( '%1$s: Custom %2$s unknown action "%3$s"', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), $key, $action ) . "\r\n";
503
  }
504
  } // mla_search_option_handler
505
+
506
+ /**
507
+ * Render and manage Entries per page screen option for Media/Assistant admin submenu table
508
+ *
509
+ * @since 2.71
510
+ *
511
+ * @param string 'render', 'update', 'delete', or 'reset'
512
+ * @param string option name; 'mla_entries_per_page'
513
+ * @param array option parameters
514
+ * @param array Optional. null (default) for 'render' else option data, e.g., $_REQUEST
515
+ *
516
+ * @return string HTML table row markup for 'render' else message(s) reflecting the results of the operation.
517
+ */
518
+ public static function mla_entries_per_page_handler( $action, $key, $value, $args = NULL ) {
519
+ MLAOptions::_load_option_templates();
520
+
521
+ $key = MLA_OPTION_PREFIX . $key;
522
+
523
+ switch ( $action ) {
524
+ case 'render':
525
+ $current_value = get_user_option( $key );
526
+
527
+ if ( false === $current_value ) {
528
+ $current_value = get_option( 'posts_per_page', $value['std'] );
529
+ }
530
+
531
+ $option_values = array(
532
+ 'key' => $key,
533
+ 'value' => $value['name'],
534
+ 'help' => $value['help'],
535
+ 'size' => $value['size'],
536
+ 'text' => $current_value,
537
+ );
538
+
539
+ return MLAData::mla_parse_template( MLAOptions::$mla_option_templates['text'], $option_values );
540
+ case 'update':
541
+ $user_id = get_current_user_id();
542
+ $new_value = isset( $args[ $key ] ) ? $args[ $key ] : get_option( 'posts_per_page', $value['std'] );
543
+
544
+ $result = update_user_option( $user_id, $key, $new_value, true );
545
+
546
+ /* translators: 1: option name, e.g., taxonomy_support */
547
+ return '<br>' . sprintf( __( 'Update custom %1$s', 'media-library-assistant' ), $key ) . "\r\n";
548
+ case 'delete':
549
+ case 'reset':
550
+ $user_id = get_current_user_id();
551
+ delete_user_option( $user_id, $key, true );
552
+
553
+ /* translators: 1: option name, e.g., taxonomy_support */
554
+ return '<br>' . sprintf( __( 'Reset custom %1$s', 'media-library-assistant' ), $key ) . "\r\n";
555
+ default:
556
+ /* translators: 1: ERROR tag 2: option name 3: action, e.g., update, delete, reset */
557
+ return '<br>' . sprintf( __( '%1$s: Custom %2$s unknown action "%3$s"', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), $key, $action ) . "\r\n";
558
+ }
559
+ } // mla_entries_per_page_handler
560
+
561
  /**
562
  * Examine or alter the filename before the file is made permanent
563
  *
843
  */
844
  $setting_value['no_null'] = isset( $setting_value['no_null'] ) && ( false !== $setting_value['no_null'] );
845
 
846
+ $setting_value['key'] = $setting_key;
847
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post_id, $category, $attachment_metadata );
848
  if ( NULL === $setting_value ) {
849
  continue;
1264
  $current_values = MLACore::mla_get_option( 'custom_field_mapping' );
1265
  } // mla_custom_field_option_handler
1266
 
1267
+ /**
1268
+ * Term ID cache for (hierarchical) taxonomy mapping rules
1269
+ *
1270
+ * Locates term name within the hierarchy.
1271
+ *
1272
+ * @since 2.71
1273
+ *
1274
+ * @access public
1275
+ * @var array $mla_term_cache {
1276
+ * @type array $$taxonomy {
1277
+ * @type array $$term_parent {
1278
+ * @type array $$term_name {
1279
+ * @type integer $term_id Term ID within the specific taxonomy and parent term.
1280
+ * }
1281
+ * }
1282
+ * }
1283
+ * }
1284
+ */
1285
+ public static $mla_term_cache = array(); // [ $taxonomy ][ $term_parent ][ $term_name ] => $term_id
1286
+
1287
  /**
1288
  * Build and search a cache of taxonomy and term name to term ID mappings
1289
  *
1297
  * @return integer term_id for the term name
1298
  */
1299
  private static function _get_term_id( $term_name, $term_parent, $taxonomy, &$post_terms ) {
 
 
1300
  // WordPress encodes special characters, e.g., "&" as HTML entities in term names
1301
  $term_name = _wp_specialchars( $term_name );
1302
 
1303
+ // Is this term already in the cache?
1304
+ if ( isset( MLAOptions::$mla_term_cache[ $taxonomy ] ) && isset( MLAOptions::$mla_term_cache[ $taxonomy ][ $term_parent ] ) && isset( MLAOptions::$mla_term_cache[ $taxonomy ][ $term_parent ][ $term_name ] ) ) {
1305
+ return MLAOptions::$mla_term_cache[ $taxonomy ][ $term_parent ][ $term_name ];
1306
  }
1307
 
1308
  // Is this term already assigned to the item?
1309
  if ( is_array( $post_terms ) ) {
1310
  $term_id = 0;
1311
  foreach( $post_terms as $post_term ) {
1312
+ MLAOptions::$mla_term_cache[ $taxonomy ][ $post_term->parent ][ $post_term->name ] = $post_term->term_id;
1313
  if ( $term_name == $post_term->name && $term_parent == $post_term->parent ) {
1314
  $term_id = $post_term->term_id;
1315
  }
1324
  if ( 0 === $term_parent ) {
1325
  $post_term = get_term_by( 'name', $term_name, $taxonomy ); // Consider get_terms() for identical names
1326
  if ( false !== $post_term ) {
1327
+ MLAOptions::$mla_term_cache[ $taxonomy ][ $term_parent ][ $term_name ] = $post_term->term_id;
1328
  return $post_term->term_id;
1329
  }
1330
  } else {
1331
  $post_term = term_exists( $term_name, $taxonomy, $term_parent );
1332
  if ( $post_term !== 0 && $post_term !== NULL ) {
1333
+ MLAOptions::$mla_term_cache[ $taxonomy ][ $term_parent ][ $term_name ] = absint( $post_term['term_id'] );
1334
  return absint( $post_term['term_id'] );
1335
  }
1336
  }
1337
 
1338
  $post_term = wp_insert_term( $term_name, $taxonomy, array( 'parent' => $term_parent ) );
1339
  if ( ( ! is_wp_error( $post_term ) ) && isset( $post_term['term_id'] ) ) {
1340
+ MLAOptions::$mla_term_cache[ $taxonomy ][ $term_parent ][ $term_name ] = $post_term['term_id'];
1341
  return $post_term['term_id'];
1342
  }
1343
 
1364
 
1365
  $image_metadata = MLAData::mla_fetch_attachment_image_metadata( $post->ID );
1366
 
1367
+ // Make the PDF/XMP metadata available as EXIF values so simple rules like "EXIF:Keywords" will work
 
 
1368
  if ( empty( $image_metadata['mla_exif_metadata'] ) ) {
1369
  if ( ! empty( $image_metadata['mla_xmp_metadata'] ) ) {
1370
  $image_metadata['mla_exif_metadata'] = $image_metadata['mla_xmp_metadata'];
1387
 
1388
  if ( $update_all || ( 'iptc_exif_standard_mapping' == $category ) ) {
1389
  foreach ( $settings['standard'] as $setting_key => $setting_value ) {
1390
+ $setting_value['key'] = $setting_key;
1391
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post->ID, 'iptc_exif_standard_mapping', $attachment_metadata );
1392
  if ( NULL === $setting_value ) {
1393
  continue;
1487
  $updates[ $setting_key ] = $new_text;
1488
  }
1489
  break;
1490
+ case 'post_date':
1491
+ if ( empty( $post->post_date ) || !$keep_existing ) {
1492
+ // strtotime() will "Parse about any English textual datetime description into a Unix timestamp"
1493
+ $timestamp = strtotime( $new_text );
1494
+ if( false !== $timestamp ) {
1495
+ // date() "Returns a string formatted according to the format string using the integer timestamp"
1496
+ $new_text = date( 'Y-m-d H:i:s', $timestamp );
1497
+ $updates[ $setting_key ] = $new_text;
1498
+ $updates['post_date_gmt'] = get_gmt_from_date( $new_text );
1499
+ }
1500
+ }
1501
+ break;
1502
  default:
1503
  // ignore anything else
1504
  } // $setting_key
1515
  continue;
1516
  }
1517
 
1518
+ // Convert checkbox value(s)
 
 
1519
  $hierarchical = $setting_value['hierarchical'] = (boolean) $setting_value['hierarchical'];
1520
 
1521
+ $setting_value['key'] = $setting_key;
1522
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post->ID, 'iptc_exif_taxonomy_mapping', $attachment_metadata );
1523
  if ( NULL === $setting_value ) {
1524
  continue;
1696
  $setting_value['no_null'] = isset( $setting_value['no_null'] );
1697
 
1698
  $setting_name = $setting_value['name'];
1699
+ $setting_value['key'] = $setting_key;
1700
  $setting_value = apply_filters( 'mla_mapping_rule', $setting_value, $post->ID, 'iptc_exif_custom_mapping', $attachment_metadata );
1701
  if ( NULL === $setting_value ) {
1702
  continue;
1868
  'name' => 'mla_filter_term',
1869
  'id' => 'name',
1870
  'class' => 'postform',
1871
+ 'selected' => ( 0 == $selection ) ? -1 : $selection,
1872
  'hierarchical' => true,
1873
  'pad_counts' => false,
1874
  'taxonomy' => $taxonomy,
1882
 
1883
  $dropdown_options = substr( $dropdown, strpos( $dropdown, ' >' ) + 2 );
1884
  $dropdown_options = substr( $dropdown_options, 0, strpos( $dropdown_options, '</select>' ) );
1885
+ $dropdown_options = str_replace( "value='-1'", 'value="0"', $dropdown_options );
1886
+ $dropdown_options = str_replace( 'value="-1"', 'value="0"', $dropdown_options );
1887
 
1888
  return $dropdown_options;
1889
  } // mla_compose_parent_option_list
includes/class-mla-settings-custom-fields-tab.php CHANGED
@@ -227,7 +227,7 @@ class MLASettings_CustomFields {
227
  * @return string Message(s) reflecting the results of the operation
228
  */
229
  private static function _add_custom_field_rule() {
230
- $mla_custom_field = isset( $_REQUEST['mla_custom_field'] ) ? $_REQUEST['mla_custom_field'] : array();
231
 
232
  // Validate new rule name
233
  if ( !empty( $mla_custom_field['new_field'] ) ) {
@@ -1341,7 +1341,7 @@ class MLA_Custom_Fields_List_Table extends WP_List_Table {
1341
  $view_args['orderby'] = $_REQUEST['orderby'];
1342
  }
1343
 
1344
- $actions['edit'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
1345
 
1346
  if ( !$item->read_only ) {
1347
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
@@ -1349,10 +1349,10 @@ class MLA_Custom_Fields_List_Table extends WP_List_Table {
1349
  $actions['execute hide-if-no-js'] = '<a class="execute" id="' .
1350
  MLACore::MLA_ADMIN_SINGLE_CUSTOM_FIELD_MAP . '[' . $item->post_ID . ']" href="#" title="' . __( 'Map All Attachments', 'media-library-assistant' ) . '">' . __( 'Execute', 'media-library-assistant' ) . '</a>';
1351
 
1352
- $actions['purge'] = '<a class="purge"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_CUSTOM_FIELD_PURGE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Purge custom field values', 'media-library-assistant' ) . '">' . __( 'Purge Values', 'media-library-assistant' ) . '</a>';
1353
  }
1354
 
1355
- $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
1356
 
1357
  return $actions;
1358
  }
227
  * @return string Message(s) reflecting the results of the operation
228
  */
229
  private static function _add_custom_field_rule() {
230
+ $mla_custom_field = isset( $_REQUEST['mla_custom_field'] ) ? stripslashes_deep( $_REQUEST['mla_custom_field'] ) : array();
231
 
232
  // Validate new rule name
233
  if ( !empty( $mla_custom_field['new_field'] ) ) {
1341
  $view_args['orderby'] = $_REQUEST['orderby'];
1342
  }
1343
 
1344
+ $actions['edit'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
1345
 
1346
  if ( !$item->read_only ) {
1347
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
1349
  $actions['execute hide-if-no-js'] = '<a class="execute" id="' .
1350
  MLACore::MLA_ADMIN_SINGLE_CUSTOM_FIELD_MAP . '[' . $item->post_ID . ']" href="#" title="' . __( 'Map All Attachments', 'media-library-assistant' ) . '">' . __( 'Execute', 'media-library-assistant' ) . '</a>';
1351
 
1352
+ $actions['purge'] = '<a class="purge"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_CUSTOM_FIELD_PURGE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Purge custom field values', 'media-library-assistant' ) . '">' . __( 'Purge Values', 'media-library-assistant' ) . '</a>';
1353
  }
1354
 
1355
+ $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
1356
 
1357
  return $actions;
1358
  }
includes/class-mla-settings-documentation-tab.php CHANGED
@@ -174,7 +174,7 @@ class MLASettings_Documentation {
174
 
175
  $page_content['body'] = MLAData::mla_parse_template( $page_template_array['before-example-table'], $page_values );
176
 
177
- // Now we can render the completed list table
178
  ob_start();
179
  $MLAListExampleTable->display();
180
  $page_content['body'] .= ob_get_contents();
@@ -194,9 +194,7 @@ class MLASettings_Documentation {
194
  * @return array 'message' => status/error messages, 'body' => tab content
195
  */
196
  public static function mla_compose_documentation_tab( ) {
197
- /*
198
- * Display or Cancel the Example Plugins submenu, if requested
199
- */
200
  if ( !empty( $_REQUEST['mla-example-search'] ) ) {
201
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
202
  $page_content = self::_compose_example_tab();
@@ -217,9 +215,7 @@ class MLASettings_Documentation {
217
  );
218
  }
219
 
220
- /*
221
- * Process bulk actions that affect an array of items
222
- */
223
  $bulk_action = MLASettings::mla_current_bulk_action();
224
  if ( $bulk_action && ( $bulk_action != 'none' ) ) {
225
  $bulk_message = '';
@@ -251,9 +247,7 @@ class MLASettings_Documentation {
251
  $page_content['message'] = $bulk_message;
252
  } // $bulk_action
253
 
254
- /*
255
- * Process row-level actions that affect a single item
256
- */
257
  if ( !empty( $_REQUEST['mla_admin_action'] ) ) {
258
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
259
  $action_content = array( 'message' => '' );
@@ -298,13 +292,10 @@ class MLASettings_Documentation {
298
  return '';
299
  }
300
 
301
- /*
302
- * Display the Documentation tab
303
- */
304
  $page_values = array(
305
- 'example_url' => wp_nonce_url( '?page=mla-settings-menu-documentation&mla_tab=documentation&mla-example-search=Search', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ),
306
  'translate_url' => MLA_PLUGIN_URL . 'languages/MLA Internationalization Guide.pdf',
307
- // 'phpDocs_url' => MLA_PLUGIN_URL . 'phpDocs/index.html',
308
  'phpDocs_url' => 'http://fairtradejudaica.org/wp-content/uploads/' . 'phpDocs/index.html',
309
  );
310
 
@@ -637,11 +628,11 @@ class MLA_Example_List_Table extends WP_List_Table {
637
 
638
  if ( empty( $item->installed_version ) ) {
639
  if ( current_user_can( 'install_plugins' ) ) {
640
- $actions['install'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_INSTALL, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Install this plugin', 'media-library-assistant' ) . '">' . __( 'Install', 'media-library-assistant' ) . '</a>';
641
  }
642
  } else {
643
  if ( current_user_can( 'update_plugins' ) ) {
644
- $actions['update'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_UPDATE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Update this plugin', 'media-library-assistant' ) . '">' . __( 'Update', 'media-library-assistant' ) . '</a>';
645
  }
646
  }
647
 
@@ -651,10 +642,10 @@ class MLA_Example_List_Table extends WP_List_Table {
651
  'mla_download_file' => urlencode( MLA_PLUGIN_PATH . 'examples/plugins/' . $item->file ),
652
  'mla_download_type' => 'text/plain'
653
  );
654
- $actions['download'] = '<a href="' . add_query_arg( $args, wp_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' &#8220;' . esc_attr( $item->file ) . '&#8221;">' . __( 'Download', 'media-library-assistant' ) . '</a>';
655
  }
656
 
657
- $actions['view'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'View this item', 'media-library-assistant' ) . '">' . __( 'View', 'media-library-assistant' ) . '</a>';
658
 
659
  return $actions;
660
  }
@@ -798,7 +789,7 @@ class MLA_Example_List_Table extends WP_List_Table {
798
  /*
799
  * Remember the view filters
800
  */
801
- $base_url = wp_nonce_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation&mla-example-search=Search', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
802
 
803
  if ( isset( $_REQUEST['s'] ) ) {
804
  $base_url = add_query_arg( array( 's' => $_REQUEST['s'] ), $base_url );
174
 
175
  $page_content['body'] = MLAData::mla_parse_template( $page_template_array['before-example-table'], $page_values );
176
 
177
+ // Now we can render the completed list table
178
  ob_start();
179
  $MLAListExampleTable->display();
180
  $page_content['body'] .= ob_get_contents();
194
  * @return array 'message' => status/error messages, 'body' => tab content
195
  */
196
  public static function mla_compose_documentation_tab( ) {
197
+ // Display or Cancel the Example Plugins submenu, if requested
 
 
198
  if ( !empty( $_REQUEST['mla-example-search'] ) ) {
199
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
200
  $page_content = self::_compose_example_tab();
215
  );
216
  }
217
 
218
+ // Process bulk actions that affect an array of items
 
 
219
  $bulk_action = MLASettings::mla_current_bulk_action();
220
  if ( $bulk_action && ( $bulk_action != 'none' ) ) {
221
  $bulk_message = '';
247
  $page_content['message'] = $bulk_message;
248
  } // $bulk_action
249
 
250
+ // Process row-level actions that affect a single item
 
 
251
  if ( !empty( $_REQUEST['mla_admin_action'] ) ) {
252
  check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
253
  $action_content = array( 'message' => '' );
292
  return '';
293
  }
294
 
295
+ // Display the Documentation tab
 
 
296
  $page_values = array(
297
+ 'example_url' => MLACore::mla_nonce_url( '?page=mla-settings-menu-documentation&mla_tab=documentation&mla-example-search=Search', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ),
298
  'translate_url' => MLA_PLUGIN_URL . 'languages/MLA Internationalization Guide.pdf',
 
299
  'phpDocs_url' => 'http://fairtradejudaica.org/wp-content/uploads/' . 'phpDocs/index.html',
300
  );
301
 
628
 
629
  if ( empty( $item->installed_version ) ) {
630
  if ( current_user_can( 'install_plugins' ) ) {
631
+ $actions['install'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_INSTALL, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Install this plugin', 'media-library-assistant' ) . '">' . __( 'Install', 'media-library-assistant' ) . '</a>';
632
  }
633
  } else {
634
  if ( current_user_can( 'update_plugins' ) ) {
635
+ $actions['update'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_UPDATE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Update this plugin', 'media-library-assistant' ) . '">' . __( 'Update', 'media-library-assistant' ) . '</a>';
636
  }
637
  }
638
 
642
  'mla_download_file' => urlencode( MLA_PLUGIN_PATH . 'examples/plugins/' . $item->file ),
643
  'mla_download_type' => 'text/plain'
644
  );
645
+ $actions['download'] = '<a href="' . add_query_arg( $args, MLACore::mla_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' &#8220;' . esc_attr( $item->file ) . '&#8221;">' . __( 'Download', 'media-library-assistant' ) . '</a>';
646
  }
647
 
648
+ $actions['view'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'View this item', 'media-library-assistant' ) . '">' . __( 'View', 'media-library-assistant' ) . '</a>';
649
 
650
  return $actions;
651
  }
789
  /*
790
  * Remember the view filters
791
  */
792
+ $base_url = MLACore::mla_nonce_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation&mla-example-search=Search', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
793
 
794
  if ( isset( $_REQUEST['s'] ) ) {
795
  $base_url = add_query_arg( array( 's' => $_REQUEST['s'] ), $base_url );
includes/class-mla-settings-iptc-exif-tab.php CHANGED
@@ -230,7 +230,7 @@ class MLASettings_IPTCEXIF {
230
  * @return string Message(s) reflecting the results of the operation
231
  */
232
  private static function _add_iptc_exif_rule() {
233
- $mla_iptc_exif_rule = isset( $_REQUEST['mla_iptc_exif_rule'] ) ? $_REQUEST['mla_iptc_exif_rule'] : array();
234
 
235
  // Validate new rule name
236
  if ( !empty( $mla_iptc_exif_rule['new_field'] ) ) {
@@ -334,12 +334,11 @@ class MLASettings_IPTCEXIF {
334
  'option' => $mla_iptc_exif_rule['option'],
335
  'no_null' => $mla_iptc_exif_rule['no_null'],
336
  'delimiters' => $mla_iptc_exif_rule['delimiters'],
337
- 'parent' => !empty( $mla_iptc_exif_rule['parent'] ) && ( '-1' !== $mla_iptc_exif_rule['parent'] ) ? absint( $mla_iptc_exif_rule['parent'] ) : 0,
338
  'active' => $mla_iptc_exif_rule['active'],
339
  'read_only' => false,
340
  'changed' => true,
341
  'deleted' => false,
342
-
343
  );
344
 
345
  if ( empty( $error_message ) ) {
@@ -466,7 +465,7 @@ class MLASettings_IPTCEXIF {
466
  'EXIF/Template Value' => __( 'EXIF/Template Value', 'media-library-assistant' ),
467
  'exif_size' => MLACoreOptions::MLA_EXIF_SIZE,
468
  'exif_text' => esc_attr( $item['exif_value'] ),
469
- 'Enter EXIF/Template' => __( 'EXIF element name or Content Template', 'media-library-assistant' ),
470
  'Priority' => __( 'Priority', 'media-library-assistant' ),
471
  'iptc_selected' => '', // Set below
472
  'IPTC' => __( 'IPTC', 'media-library-assistant' ),
@@ -1420,7 +1419,7 @@ class MLA_IPTC_EXIF_List_Table extends WP_List_Table {
1420
  $view_args['orderby'] = $_REQUEST['orderby'];
1421
  }
1422
 
1423
- $actions['edit'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
1424
 
1425
  if ( !$item->read_only ) {
1426
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
@@ -1429,11 +1428,11 @@ class MLA_IPTC_EXIF_List_Table extends WP_List_Table {
1429
  MLACore::MLA_ADMIN_SINGLE_MAP . '[' . $item->post_ID . ']" href="#" title="' . __( 'Map All Attachments', 'media-library-assistant' ) . '">' . __( 'Execute', 'media-library-assistant' ) . '</a>';
1430
 
1431
  if ( 'custom' === $item->type ) {
1432
- $actions['purge'] = '<a class="purge"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_PURGE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Purge IPTC EXIF values', 'media-library-assistant' ) . '">' . __( 'Purge Values', 'media-library-assistant' ) . '</a>';
1433
  }
1434
  }
1435
 
1436
- $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
1437
 
1438
  return $actions;
1439
  }
@@ -2097,7 +2096,7 @@ class MLA_IPTC_EXIF_Query {
2097
  'keep_existing' => true,
2098
  'delimiters' => '',
2099
  'parent' => 0,
2100
- 'active' => true,
2101
  ) );
2102
  }
2103
 
230
  * @return string Message(s) reflecting the results of the operation
231
  */
232
  private static function _add_iptc_exif_rule() {
233
+ $mla_iptc_exif_rule = isset( $_REQUEST['mla_iptc_exif_rule'] ) ? stripslashes_deep( $_REQUEST['mla_iptc_exif_rule'] ) : array();
234
 
235
  // Validate new rule name
236
  if ( !empty( $mla_iptc_exif_rule['new_field'] ) ) {
334
  'option' => $mla_iptc_exif_rule['option'],
335
  'no_null' => $mla_iptc_exif_rule['no_null'],
336
  'delimiters' => $mla_iptc_exif_rule['delimiters'],
337
+ 'parent' => !empty( $mla_iptc_exif_rule['parent'] ) && ( '0' !== $mla_iptc_exif_rule['parent'] ) ? absint( $mla_iptc_exif_rule['parent'] ) : 0,
338
  'active' => $mla_iptc_exif_rule['active'],
339
  'read_only' => false,
340
  'changed' => true,
341
  'deleted' => false,
 
342
  );
343
 
344
  if ( empty( $error_message ) ) {
465
  'EXIF/Template Value' => __( 'EXIF/Template Value', 'media-library-assistant' ),
466
  'exif_size' => MLACoreOptions::MLA_EXIF_SIZE,
467
  'exif_text' => esc_attr( $item['exif_value'] ),
468
+ 'Enter EXIF/Template' => __( 'EXIF element name or Content Template', 'media-library-assistant' ) . __( ' (starting with "template:")', 'media-library-assistant' ),
469
  'Priority' => __( 'Priority', 'media-library-assistant' ),
470
  'iptc_selected' => '', // Set below
471
  'IPTC' => __( 'IPTC', 'media-library-assistant' ),
1419
  $view_args['orderby'] = $_REQUEST['orderby'];
1420
  }
1421
 
1422
+ $actions['edit'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
1423
 
1424
  if ( !$item->read_only ) {
1425
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
1428
  MLACore::MLA_ADMIN_SINGLE_MAP . '[' . $item->post_ID . ']" href="#" title="' . __( 'Map All Attachments', 'media-library-assistant' ) . '">' . __( 'Execute', 'media-library-assistant' ) . '</a>';
1429
 
1430
  if ( 'custom' === $item->type ) {
1431
+ $actions['purge'] = '<a class="purge"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_PURGE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Purge IPTC EXIF values', 'media-library-assistant' ) . '">' . __( 'Purge Values', 'media-library-assistant' ) . '</a>';
1432
  }
1433
  }
1434
 
1435
+ $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
1436
 
1437
  return $actions;
1438
  }
2096
  'keep_existing' => true,
2097
  'delimiters' => '',
2098
  'parent' => 0,
2099
+ 'active' => false,
2100
  ) );
2101
  }
2102
 
includes/class-mla-settings-shortcodes-tab.php CHANGED
@@ -457,7 +457,7 @@ class MLASettings_Shortcodes {
457
  'mla_tab' => 'shortcodes',
458
  'mla_item_ID' => $item['post_ID']
459
  );
460
- $copy_href = add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_COPY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) );
461
 
462
  $page_values = array(
463
  'Edit Template' => $item['default'] ? __( 'View Template', 'media-library-assistant' ) : __( 'Edit Template', 'media-library-assistant' ),
@@ -1066,15 +1066,15 @@ class MLA_Template_List_Table extends WP_List_Table {
1066
  }
1067
 
1068
  if ( $item->default ) {
1069
- $actions['view'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'View this item', 'media-library-assistant' ) . '">' . __( 'View', 'media-library-assistant' ) . '</a>';
1070
  } else {
1071
- $actions['edit'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
1072
  }
1073
 
1074
- $actions['copy'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_COPY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Make a copy', 'media-library-assistant' ) . '">' . __( 'Copy', 'media-library-assistant' ) . '</a>';
1075
 
1076
  if ( ! $item->default ) {
1077
- $actions['delete'] = '<a class="delete-tag" href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
1078
  }
1079
 
1080
  return $actions;
@@ -1228,7 +1228,7 @@ class MLA_Template_List_Table extends WP_List_Table {
1228
  /*
1229
  * Remember the view filters
1230
  */
1231
- $base_url = wp_nonce_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-shortcodes&mla_tab=shortcodes', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
1232
 
1233
  if ( isset( $_REQUEST['s'] ) ) {
1234
  $base_url = add_query_arg( array( 's' => $_REQUEST['s'] ), $base_url );
457
  'mla_tab' => 'shortcodes',
458
  'mla_item_ID' => $item['post_ID']
459
  );
460
+ $copy_href = add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_COPY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) );
461
 
462
  $page_values = array(
463
  'Edit Template' => $item['default'] ? __( 'View Template', 'media-library-assistant' ) : __( 'Edit Template', 'media-library-assistant' ),
1066
  }
1067
 
1068
  if ( $item->default ) {
1069
+ $actions['view'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'View this item', 'media-library-assistant' ) . '">' . __( 'View', 'media-library-assistant' ) . '</a>';
1070
  } else {
1071
+ $actions['edit'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
1072
  }
1073
 
1074
+ $actions['copy'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_COPY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Make a copy', 'media-library-assistant' ) . '">' . __( 'Copy', 'media-library-assistant' ) . '</a>';
1075
 
1076
  if ( ! $item->default ) {
1077
+ $actions['delete'] = '<a class="delete-tag" href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
1078
  }
1079
 
1080
  return $actions;
1228
  /*
1229
  * Remember the view filters
1230
  */
1231
+ $base_url = MLACore::mla_nonce_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-shortcodes&mla_tab=shortcodes', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
1232
 
1233
  if ( isset( $_REQUEST['s'] ) ) {
1234
  $base_url = add_query_arg( array( 's' => $_REQUEST['s'] ), $base_url );
includes/class-mla-settings-upload-tab.php CHANGED
@@ -542,7 +542,7 @@ class MLASettings_Upload {
542
  'Description' => __( 'Description', 'media-library-assistant' ),
543
  'The description can' => __( 'The description can contain any documentation or notes you need to understand or use the item.', 'media-library-assistant' ),
544
  'Add Upload MIME' => __( 'Add Upload MIME Type', 'media-library-assistant' ),
545
- 'search_url' => wp_nonce_url( '?page=mla-settings-menu-upload&mla_tab=upload&mla-optional-uploads-search=Search', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ),
546
  'Search Known Types' => __( 'Search Known Types', 'media-library-assistant' ),
547
  'colspan' => $MLAListUploadTable->get_column_count(),
548
  'Quick Edit' => __( '<strong>Quick Edit</strong>', 'media-library-assistant' ),
@@ -920,15 +920,15 @@ class MLA_Upload_List_Table extends WP_List_Table {
920
  $view_args['orderby'] = $_REQUEST['orderby'];
921
  }
922
 
923
- $actions['edit'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
924
 
925
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
926
 
927
  if ( 'custom' == $item->source ) {
928
  if ( empty( $item->standard_source ) ) {
929
- $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
930
  } else {
931
- $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Revert to standard item', 'media-library-assistant' ) . '">' . __( 'Revert to Standard', 'media-library-assistant' ) . '</a>';
932
  }
933
  }
934
 
@@ -1466,7 +1466,7 @@ class MLA_Upload_Optional_List_Table extends WP_List_Table {
1466
  $view_args['orderby'] = $_REQUEST['orderby'];
1467
  }
1468
 
1469
- $actions['select'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_UPDATE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Select this entry', 'media-library-assistant' ) . '">' . __( 'Select', 'media-library-assistant' ) . '</a>';
1470
 
1471
  return $actions;
1472
  }
542
  'Description' => __( 'Description', 'media-library-assistant' ),
543
  'The description can' => __( 'The description can contain any documentation or notes you need to understand or use the item.', 'media-library-assistant' ),
544
  'Add Upload MIME' => __( 'Add Upload MIME Type', 'media-library-assistant' ),
545
+ 'search_url' => MLACore::mla_nonce_url( '?page=mla-settings-menu-upload&mla_tab=upload&mla-optional-uploads-search=Search', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ),
546
  'Search Known Types' => __( 'Search Known Types', 'media-library-assistant' ),
547
  'colspan' => $MLAListUploadTable->get_column_count(),
548
  'Quick Edit' => __( '<strong>Quick Edit</strong>', 'media-library-assistant' ),
920
  $view_args['orderby'] = $_REQUEST['orderby'];
921
  }
922
 
923
+ $actions['edit'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
924
 
925
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
926
 
927
  if ( 'custom' == $item->source ) {
928
  if ( empty( $item->standard_source ) ) {
929
+ $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
930
  } else {
931
+ $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Revert to standard item', 'media-library-assistant' ) . '">' . __( 'Revert to Standard', 'media-library-assistant' ) . '</a>';
932
  }
933
  }
934
 
1466
  $view_args['orderby'] = $_REQUEST['orderby'];
1467
  }
1468
 
1469
+ $actions['select'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_UPDATE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Select this entry', 'media-library-assistant' ) . '">' . __( 'Select', 'media-library-assistant' ) . '</a>';
1470
 
1471
  return $actions;
1472
  }
includes/class-mla-settings-view-tab.php CHANGED
@@ -717,15 +717,15 @@ class MLA_View_List_Table extends WP_List_Table {
717
  $custom_types = array ();
718
  }
719
 
720
- $actions['edit'] = '<a href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
721
 
722
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
723
 
724
  if ( isset( $custom_types[ $item->slug ] ) ) {
725
  if ( isset( $mla_types[ $item->slug ] ) ) {
726
- $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Revert to standard item', 'media-library-assistant' ) . '">' . __( 'Revert to Standard', 'media-library-assistant' ) . '</a>';
727
  } else {
728
- $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, wp_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
729
  }
730
  } // custom type
731
 
717
  $custom_types = array ();
718
  }
719
 
720
+ $actions['edit'] = '<a href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Edit this item', 'media-library-assistant' ) . '">' . __( 'Edit', 'media-library-assistant' ) . '</a>';
721
 
722
  $actions['inline hide-if-no-js'] = '<a class="editinline" href="#" title="' . __( 'Edit this item inline', 'media-library-assistant' ) . '">' . __( 'Quick Edit', 'media-library-assistant' ) . '</a>';
723
 
724
  if ( isset( $custom_types[ $item->slug ] ) ) {
725
  if ( isset( $mla_types[ $item->slug ] ) ) {
726
+ $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Revert to standard item', 'media-library-assistant' ) . '">' . __( 'Revert to Standard', 'media-library-assistant' ) . '</a>';
727
  } else {
728
+ $actions['delete'] = '<a class="delete-tag"' . ' href="' . add_query_arg( $view_args, MLACore::mla_nonce_url( '?mla_admin_action=' . MLACore::MLA_ADMIN_SINGLE_DELETE, MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Delete this item Permanently', 'media-library-assistant' ) . '">' . __( 'Delete Permanently', 'media-library-assistant' ) . '</a>';
729
  }
730
  } // custom type
731
 
includes/class-mla-settings.php CHANGED
@@ -650,6 +650,8 @@ class MLASettings {
650
  */
651
  public static function mla_add_plugin_settings_link_filter( $links, $file ) {
652
  if ( $file == 'media-library-assistant/index.php' && current_user_can( 'manage_options' ) ) {
 
 
653
  $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-general' ), __( 'Settings', 'media-library-assistant' ) );
654
  array_unshift( $links, $settings_link );
655
  }
@@ -1385,10 +1387,9 @@ class MLASettings {
1385
  if ( $error_log_exists ) {
1386
  $args = array(
1387
  'page' => MLACore::ADMIN_PAGE_SLUG,
1388
- 'mla_download_file' => urlencode( $error_log_name ),
1389
- 'mla_download_type' => 'text/plain'
1390
  );
1391
- $download_link = '<a class="button-secondary" href="' . add_query_arg( $args, wp_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' &#8220;' . __( 'Error Log', 'media-library-assistant' ) . '&#8221;">' . __( 'Download', 'media-library-assistant' ) . '</a>';
1392
  } else {
1393
  $download_link = '';
1394
  }
@@ -1398,7 +1399,7 @@ class MLASettings {
1398
  'mla_tab' => 'debug',
1399
  'mla_reset_log' => 'true'
1400
  );
1401
- $reset_link = '<a class="button-secondary" href="' . add_query_arg( $args, wp_nonce_url( 'options-general.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Reset', 'media-library-assistant' ) . ' &#8220;' . __( 'Error Log', 'media-library-assistant' ) . '&#8221;">' . __( 'Reset', 'media-library-assistant' ) . '</a>';
1402
  }
1403
 
1404
  $settings_list = self::_compose_settings_row( 'Display Limit', $display_limit );
650
  */
651
  public static function mla_add_plugin_settings_link_filter( $links, $file ) {
652
  if ( $file == 'media-library-assistant/index.php' && current_user_can( 'manage_options' ) ) {
653
+ $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation' ), __( 'Guide', 'media-library-assistant' ) );
654
+ array_unshift( $links, $settings_link );
655
  $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-general' ), __( 'Settings', 'media-library-assistant' ) );
656
  array_unshift( $links, $settings_link );
657
  }
1387
  if ( $error_log_exists ) {
1388
  $args = array(
1389
  'page' => MLACore::ADMIN_PAGE_SLUG,
1390
+ 'mla_download_error_log' => 'true',
 
1391
  );
1392
+ $download_link = '<a class="button-secondary" href="' . add_query_arg( $args, MLACore::mla_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' &#8220;' . __( 'Error Log', 'media-library-assistant' ) . '&#8221;">' . __( 'Download', 'media-library-assistant' ) . '</a>';
1393
  } else {
1394
  $download_link = '';
1395
  }
1399
  'mla_tab' => 'debug',
1400
  'mla_reset_log' => 'true'
1401
  );
1402
+ $reset_link = '<a class="button-secondary" href="' . add_query_arg( $args, MLACore::mla_nonce_url( 'options-general.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Reset', 'media-library-assistant' ) . ' &#8220;' . __( 'Error Log', 'media-library-assistant' ) . '&#8221;">' . __( 'Reset', 'media-library-assistant' ) . '</a>';
1403
  }
1404
 
1405
  $settings_list = self::_compose_settings_row( 'Display Limit', $display_limit );
includes/class-mla-shortcode-support.php CHANGED
@@ -242,7 +242,7 @@ class MLAShortcode_Support {
242
  * Look for parameters in an enclosing shortcode
243
  */
244
  if ( ! ( empty( $content ) || isset( $attr['mla_alt_shortcode'] ) ) ) {
245
- $content = str_replace( array( '&#8216;', '&#8217;', '&#8221;', '&#8243;', '<br />', '<p>', '</p>', "\r", "\n" ), array( '\'', '\'', '"', '"', ' ', ' ', ' ', ' ', ' ' ), $content );
246
  $new_attr = shortcode_parse_atts( $content );
247
  if ( is_array( $new_attr ) ) {
248
  $attr = array_merge( $attr, $new_attr );
@@ -1047,7 +1047,7 @@ class MLAShortcode_Support {
1047
  $item_values['path'] = '';
1048
  $item_values['file'] = '';
1049
  $item_values['description'] = wptexturize( $attachment->post_content );
1050
- $item_values['file_url'] = wp_get_attachment_url( $attachment->ID ); // $attachment->guid;
1051
  $item_values['author_id'] = $attachment->post_author;
1052
  $item_values['author'] = '';
1053
  $item_values['caption'] = '';
@@ -1344,7 +1344,7 @@ class MLAShortcode_Support {
1344
  }
1345
 
1346
  $item_values['downloadlink_url'] = add_query_arg( $args, MLA_PLUGIN_URL . 'includes/mla-file-downloader.php' );
1347
- $item_values['downloadlink'] = preg_replace( '#' . $matches[0][0] . '#', sprintf( 'href=\'%1$s\'', $item_values['downloadlink_url'] ), $item_values['filelink'] );
1348
 
1349
  // AJAX-based Named Transfer link
1350
  $args = array(
@@ -1358,7 +1358,7 @@ class MLAShortcode_Support {
1358
  }
1359
 
1360
  $item_values['transferlink_url'] = add_query_arg( $args, admin_url( 'admin-ajax.php' ) );
1361
- $item_values['transferlink'] = preg_replace( '#' . $matches[0][0] . '#', sprintf( 'href=\'%1$s\'', $item_values['transferlink_url'] ), $item_values['filelink'] );
1362
  } else {
1363
  $item_values['downloadlink_url'] = $item_values['filelink_url'];
1364
  $item_values['downloadlink'] = $item_values['filelink'];
@@ -1571,7 +1571,7 @@ class MLAShortcode_Support {
1571
  /*
1572
  * For efficiency, image streaming is done outside WordPress
1573
  */
1574
- $icon_url = add_query_arg( $args, wp_nonce_url( MLA_PLUGIN_URL . 'includes/mla-stream-image.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) );
1575
  }
1576
  }
1577
 
@@ -4107,7 +4107,6 @@ class MLAShortcode_Support {
4107
  }
4108
 
4109
  $markup_values['http_host'] = $_SERVER['HTTP_HOST'];
4110
-
4111
  if ( 0 < $new_page ) {
4112
  $new_uri = remove_query_arg( $mla_page_parameter, $_SERVER['REQUEST_URI'] );
4113
  $markup_values['request_uri'] = add_query_arg( array( $mla_page_parameter => $new_page ), $new_uri );
242
  * Look for parameters in an enclosing shortcode
243
  */
244
  if ( ! ( empty( $content ) || isset( $attr['mla_alt_shortcode'] ) ) ) {
245
+ $content = str_replace( array( '&#038;', '&#8216;', '&#8217;', '&#8221;', '&#8243;', '<br />', '<p>', '</p>', "\r", "\n" ), array( '&', '\'', '\'', '"', '"', ' ', ' ', ' ', ' ', ' ' ), $content );
246
  $new_attr = shortcode_parse_atts( $content );
247
  if ( is_array( $new_attr ) ) {
248
  $attr = array_merge( $attr, $new_attr );
1047
  $item_values['path'] = '';
1048
  $item_values['file'] = '';
1049
  $item_values['description'] = wptexturize( $attachment->post_content );
1050
+ $item_values['file_url'] = wp_get_attachment_url( $attachment->ID );
1051
  $item_values['author_id'] = $attachment->post_author;
1052
  $item_values['author'] = '';
1053
  $item_values['caption'] = '';
1344
  }
1345
 
1346
  $item_values['downloadlink_url'] = add_query_arg( $args, MLA_PLUGIN_URL . 'includes/mla-file-downloader.php' );
1347
+ $item_values['downloadlink'] = preg_replace( '"' . $matches[0][0] . '"', sprintf( 'href=\'%1$s\'', $item_values['downloadlink_url'] ), $item_values['filelink'] );
1348
 
1349
  // AJAX-based Named Transfer link
1350
  $args = array(
1358
  }
1359
 
1360
  $item_values['transferlink_url'] = add_query_arg( $args, admin_url( 'admin-ajax.php' ) );
1361
+ $item_values['transferlink'] = preg_replace( '"' . $matches[0][0] . '"', sprintf( 'href=\'%1$s\'', $item_values['transferlink_url'] ), $item_values['filelink'] );
1362
  } else {
1363
  $item_values['downloadlink_url'] = $item_values['filelink_url'];
1364
  $item_values['downloadlink'] = $item_values['filelink'];
1571
  /*
1572
  * For efficiency, image streaming is done outside WordPress
1573
  */
1574
+ $icon_url = add_query_arg( $args, MLACore::mla_nonce_url( MLA_PLUGIN_URL . 'includes/mla-stream-image.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) );
1575
  }
1576
  }
1577
 
4107
  }
4108
 
4109
  $markup_values['http_host'] = $_SERVER['HTTP_HOST'];
 
4110
  if ( 0 < $new_page ) {
4111
  $new_uri = remove_query_arg( $mla_page_parameter, $_SERVER['REQUEST_URI'] );
4112
  $markup_values['request_uri'] = add_query_arg( array( $mla_page_parameter => $new_page ), $new_uri );
includes/class-mla-thumbnail-generation.php CHANGED
@@ -205,7 +205,7 @@ class MLA_Thumbnail {
205
  } // mla_list_table_begin_bulk_action
206
 
207
  /**
208
- * Add a subdirectory to the wp_upload_dir results
209
  *
210
  * @since 2.54
211
  *
@@ -214,10 +214,17 @@ class MLA_Thumbnail {
214
  */
215
  public static function upload_dir( $uploads ) {
216
  $subdir = self::$bulk_action_options['item_subdir'];
217
- if ( !empty( $subdir ) ) {
 
 
 
 
 
 
 
218
  $uploads['path'] .= $subdir;
219
  $uploads['url'] .= $subdir;
220
- $uploads['subdir'] .= $subdir;
221
  }
222
 
223
  return $uploads;
@@ -236,6 +243,7 @@ class MLA_Thumbnail {
236
  * @return boolean true, to bypass PHP error handler
237
  */
238
  public static function unlink_error_handler( $type, $string, $file, $line ) {
 
239
  // Don't execute PHP internal error handler
240
  return true;
241
  }
@@ -324,12 +332,15 @@ class MLA_Thumbnail {
324
  add_filter( 'upload_dir', 'MLA_Thumbnail::upload_dir', 10, 1 );
325
  $results = wp_handle_sideload( $args, $overrides );
326
  remove_filter( 'upload_dir', 'MLA_Thumbnail::upload_dir', 10 );
 
327
  if ( ! empty( $results['error'] ) ) {
328
  return $results['error'];
329
  }
330
 
331
- $editor = wp_get_image_editor( $results['file'] );
 
332
  if ( is_wp_error( $editor ) ) {
 
333
  return implode( ',', $editor->get_error_messages() );
334
  }
335
 
@@ -343,6 +354,7 @@ class MLA_Thumbnail {
343
 
344
  // Update the metadata for the original (PDF) attachment.
345
  $item_data['sizes'] = $results;
 
346
  wp_update_attachment_metadata( $post_id, $item_data );
347
 
348
  return true;
205
  } // mla_list_table_begin_bulk_action
206
 
207
  /**
208
+ * Adjust wp_upload_dir results to match the original PDF location
209
  *
210
  * @since 2.54
211
  *
214
  */
215
  public static function upload_dir( $uploads ) {
216
  $subdir = self::$bulk_action_options['item_subdir'];
217
+ if ( $subdir !== $uploads['subdir'] ) {
218
+ // Remove the old subdir, if present
219
+ if ( !empty( $uploads['subdir'] ) ) {
220
+ $uploads['path'] = substr( $uploads['path'], 0, strpos( $uploads['path'], $uploads['subdir'] ) );
221
+ $uploads['url'] = substr( $uploads['url'], 0, strpos( $uploads['url'], $uploads['subdir'] ) );
222
+ }
223
+
224
+ // Add the new subdir
225
  $uploads['path'] .= $subdir;
226
  $uploads['url'] .= $subdir;
227
+ $uploads['subdir'] = $subdir;
228
  }
229
 
230
  return $uploads;
243
  * @return boolean true, to bypass PHP error handler
244
  */
245
  public static function unlink_error_handler( $type, $string, $file, $line ) {
246
+ MLACore::mla_debug_add( __LINE__ . " MLA_Thumbnail::unlink_error_handler( $type, $string, $file, $line )", MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL );
247
  // Don't execute PHP internal error handler
248
  return true;
249
  }
332
  add_filter( 'upload_dir', 'MLA_Thumbnail::upload_dir', 10, 1 );
333
  $results = wp_handle_sideload( $args, $overrides );
334
  remove_filter( 'upload_dir', 'MLA_Thumbnail::upload_dir', 10 );
335
+ MLACore::mla_debug_add( __LINE__ . " MLA_Thumbnail::_generate_wordpress_thumbnail( $post_id, $file ) sideload results = " . var_export( $results, true ), MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL );
336
  if ( ! empty( $results['error'] ) ) {
337
  return $results['error'];
338
  }
339
 
340
+ $editor_args = isset( $results['type'] ) ? array( 'mime_type' => $results['type'] ) : array();
341
+ $editor = wp_get_image_editor( $results['file'], $editor_args );
342
  if ( is_wp_error( $editor ) ) {
343
+ MLACore::mla_debug_add( __LINE__ . " MLA_Thumbnail::_generate_wordpress_thumbnail editor = " . var_export( $editor, true ), MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL );
344
  return implode( ',', $editor->get_error_messages() );
345
  }
346
 
354
 
355
  // Update the metadata for the original (PDF) attachment.
356
  $item_data['sizes'] = $results;
357
+ MLACore::mla_debug_add( __LINE__ . " MLA_Thumbnail::_generate_wordpress_thumbnail item_data = " . var_export( $item_data, true ), MLACore::MLA_DEBUG_CATEGORY_THUMBNAIL );
358
  wp_update_attachment_metadata( $post_id, $item_data );
359
 
360
  return true;
includes/class-mla-wpml-support.php CHANGED
@@ -2081,12 +2081,49 @@ class MLA_WPML_Table {
2081
  if ( isset( $_REQUEST['lang'] ) ) {
2082
  $submenu_arguments['lang'] = $_REQUEST['lang'];
2083
  } else {
2084
- $submenu_arguments['lang'] = $sitepress->get_current_language();
2085
  }
2086
 
2087
  return $submenu_arguments;
2088
  }
2089
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2090
  /**
2091
  * Filter the MLA_List_Table columns
2092
  *
@@ -2107,19 +2144,7 @@ class MLA_WPML_Table {
2107
  if ( is_null( self::$language_columns ) && $sitepress->is_translated_post_type( 'attachment' ) ) {
2108
  // Build language management columns
2109
  $show_language = 'checked' == MLACore::mla_get_option( 'language_column', false, false, MLA_WPML::$mla_language_option_definitions );
2110
-
2111
- // $current_language is item-specific, $table_laguage is for the entire table
2112
- $current_language = $sitepress->get_current_language();
2113
- $table_language = $current_language;
2114
- if ( ! empty( $_SERVER[ 'HTTP_REFERER' ] ) ) {
2115
- $query_string = parse_url( $_SERVER[ 'HTTP_REFERER' ], PHP_URL_QUERY );
2116
- $query = array();
2117
- parse_str( strval( $query_string ), $query );
2118
- if ( !empty( $query['lang'] ) ) {
2119
- $table_language = $query['lang'];
2120
- }
2121
- }
2122
-
2123
  $languages = $sitepress->get_active_languages();
2124
  $view_status = isset( $_REQUEST['status'] ) ? $_REQUEST['status'] : '';
2125
  if ( 1 < count( $languages ) && $view_status != 'trash' ) {
@@ -2189,7 +2214,7 @@ class MLA_WPML_Table {
2189
  public static function mla_list_table_add_icl_styles() {
2190
  global $sitepress;
2191
 
2192
- $current_language = $sitepress->get_current_language();
2193
  $languages = count( $sitepress->get_active_languages() );
2194
  $view_status = isset( $_REQUEST['status'] ) ? $_REQUEST['status'] : '';
2195
 
@@ -2226,19 +2251,11 @@ class MLA_WPML_Table {
2226
  $content = $sitepress->get_display_language_name( $item_language, $display_language );
2227
  } elseif ('icl_translations' == $column_name ) {
2228
  if ( is_null( $languages ) ) {
 
2229
  $default_language = $sitepress->get_default_language();
2230
  $current_language = $sitepress->get_current_language();
2231
- $languages = $sitepress->get_active_languages();
2232
- // $current_language is item-specific, $table_laguage is for the entire table
2233
- $table_language = $current_language;
2234
- if ( ! empty( $_SERVER[ 'HTTP_REFERER' ] ) ) {
2235
- $query_string = parse_url( $_SERVER[ 'HTTP_REFERER' ], PHP_URL_QUERY );
2236
- $query = array();
2237
- parse_str( strval( $query_string ), $query );
2238
- if ( !empty( $query['lang'] ) ) {
2239
- $table_language = $query['lang'];
2240
- }
2241
- }
2242
  }
2243
 
2244
  $trid = $sitepress->get_element_trid( $item->ID, 'post_attachment' );
@@ -2278,7 +2295,7 @@ class MLA_WPML_Table {
2278
  }
2279
 
2280
  $args = array ( 'page' => MLACore::ADMIN_PAGE_SLUG, 'mla_admin_action' => 'wpml_create_translation', 'mla_item_ID' => $item->ID, 'mla_parent_ID' => $item->post_parent, 'lang' => $language['code'] );
2281
- $link = add_query_arg( $args, wp_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) );
2282
  }
2283
 
2284
  $link = apply_filters( 'wpml_link_to_translation', $link, false, $language['code'], $trid );
2081
  if ( isset( $_REQUEST['lang'] ) ) {
2082
  $submenu_arguments['lang'] = $_REQUEST['lang'];
2083
  } else {
2084
+ $submenu_arguments['lang'] = self::mla_get_table_language();
2085
  }
2086
 
2087
  return $submenu_arguments;
2088
  }
2089
 
2090
+ /**
2091
+ * Get the table-level language code
2092
+ *
2093
+ * This function is used for column-level operations, because
2094
+ * $sitepress->get_current_language() is item-specific.
2095
+ *
2096
+ * @since 2.71
2097
+ *
2098
+ * @return string table-level language code
2099
+ */
2100
+ private static function mla_get_table_language() {
2101
+ global $sitepress;
2102
+
2103
+ if ( !empty( $_REQUEST['lang'] ) ) {
2104
+ $table_language = $_REQUEST['lang'];
2105
+ } else {
2106
+ if ( empty( $table_language ) && ( ! empty( $_SERVER[ 'HTTP_REFERER' ] ) ) ) {
2107
+ $query_string = parse_url( $_SERVER[ 'HTTP_REFERER' ], PHP_URL_QUERY );
2108
+ $query = array();
2109
+ parse_str( strval( $query_string ), $query );
2110
+ if ( !empty( $query['lang'] ) ) {
2111
+ $table_language = $query['lang'];
2112
+ }
2113
+ }
2114
+
2115
+ if ( empty( $table_language ) && method_exists( $sitepress, 'get_admin_language_cookie' ) ) {
2116
+ $table_language = $sitepress->get_admin_language_cookie();
2117
+ }
2118
+
2119
+ if ( empty( $table_language ) ) {
2120
+ $table_language = $sitepress->get_default_language();
2121
+ }
2122
+ }
2123
+
2124
+ return $table_language;
2125
+ }
2126
+
2127
  /**
2128
  * Filter the MLA_List_Table columns
2129
  *
2144
  if ( is_null( self::$language_columns ) && $sitepress->is_translated_post_type( 'attachment' ) ) {
2145
  // Build language management columns
2146
  $show_language = 'checked' == MLACore::mla_get_option( 'language_column', false, false, MLA_WPML::$mla_language_option_definitions );
2147
+ $table_language = self::mla_get_table_language();
 
 
 
 
 
 
 
 
 
 
 
 
2148
  $languages = $sitepress->get_active_languages();
2149
  $view_status = isset( $_REQUEST['status'] ) ? $_REQUEST['status'] : '';
2150
  if ( 1 < count( $languages ) && $view_status != 'trash' ) {
2214
  public static function mla_list_table_add_icl_styles() {
2215
  global $sitepress;
2216
 
2217
+ $current_language = self::mla_get_table_language();
2218
  $languages = count( $sitepress->get_active_languages() );
2219
  $view_status = isset( $_REQUEST['status'] ) ? $_REQUEST['status'] : '';
2220
 
2251
  $content = $sitepress->get_display_language_name( $item_language, $display_language );
2252
  } elseif ('icl_translations' == $column_name ) {
2253
  if ( is_null( $languages ) ) {
2254
+ $languages = $sitepress->get_active_languages();
2255
  $default_language = $sitepress->get_default_language();
2256
  $current_language = $sitepress->get_current_language();
2257
+ // $current_language is item-specific, $table_language is for the entire table
2258
+ $table_language = self::mla_get_table_language();
 
 
 
 
 
 
 
 
 
2259
  }
2260
 
2261
  $trid = $sitepress->get_element_trid( $item->ID, 'post_attachment' );
2295
  }
2296
 
2297
  $args = array ( 'page' => MLACore::ADMIN_PAGE_SLUG, 'mla_admin_action' => 'wpml_create_translation', 'mla_item_ID' => $item->ID, 'mla_parent_ID' => $item->post_parent, 'lang' => $language['code'] );
2298
+ $link = add_query_arg( $args, MLACore::mla_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) );
2299
  }
2300
 
2301
  $link = apply_filters( 'wpml_link_to_translation', $link, false, $language['code'], $trid );
includes/mla-plugin-loader.php CHANGED
@@ -94,9 +94,9 @@ if ( ! empty( $mla_plugin_loader_error_messages ) ) {
94
  }
95
 
96
  if( defined('DOING_AJAX') && DOING_AJAX ) {
97
- /*
98
- * Ajax handlers
99
- */
100
  require_once( MLA_PLUGIN_PATH . 'includes/class-mla-ajax.php' );
101
  add_action( 'init', 'MLA_Ajax::initialize', 0x7FFFFFFF );
102
 
94
  }
95
 
96
  if( defined('DOING_AJAX') && DOING_AJAX ) {
97
+ //error_log( __LINE__ . " mla-plugin-loader.php DOING_AJAX \$_REQUEST = " . var_export( $_REQUEST, true ), 0 );
98
+
99
+ // Ajax handlers
100
  require_once( MLA_PLUGIN_PATH . 'includes/class-mla-ajax.php' );
101
  add_action( 'init', 'MLA_Ajax::initialize', 0x7FFFFFFF );
102
 
index.php CHANGED
@@ -6,7 +6,7 @@
6
  * will the rest of the plugin be loaded and run.
7
  *
8
  * @package Media Library Assistant
9
- * @version 2.70
10
  */
11
 
12
  /*
@@ -16,10 +16,10 @@ Description: Enhances the Media Library; powerful [mla_gallery] [mla_tag_cloud]
16
  Author: David Lingren, Fair Trade Judaica
17
  Text Domain: media-library-assistant
18
  Domain Path: /languages
19
- Version: 2.70
20
  Author URI: http://fairtradejudaica.org/our-story/staff/
21
 
22
- Copyright 2011-2017 David Lingren
23
 
24
  This program is free software; you can redistribute it and/or modify
25
  it under the terms of the GNU General Public License as published by
6
  * will the rest of the plugin be loaded and run.
7
  *
8
  * @package Media Library Assistant
9
+ * @version 2.72
10
  */
11
 
12
  /*
16
  Author: David Lingren, Fair Trade Judaica
17
  Text Domain: media-library-assistant
18
  Domain Path: /languages
19
+ Version: 2.72
20
  Author URI: http://fairtradejudaica.org/our-story/staff/
21
 
22
+ Copyright 2011-2018 David Lingren
23
 
24
  This program is free software; you can redistribute it and/or modify
25
  it under the terms of the GNU General Public License as published by
js/mla-edit-media-scripts.js CHANGED
@@ -22,6 +22,11 @@ var jQuery,
22
 
23
  // The mlaEditAttachment functions are adapted from wp-admin/js/post.js
24
  mla.mlaEditAttachment = {
 
 
 
 
 
25
  init : function(){
26
  $( '#mla_set_parent' ).on( 'click', function(){
27
  return mla.mlaEditAttachment.setParentOpen();
@@ -110,6 +115,62 @@ var jQuery,
110
  return false;
111
  });
112
  }); // .categorydiv.each,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  }, // function init
114
 
115
  setParentOpen : function() {
@@ -144,6 +205,53 @@ var jQuery,
144
  }
145
 
146
  $( '#mla-set-parent-submit' ).off( 'click' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  }
148
  }; // mla.mlaEditAttachment
149
 
22
 
23
  // The mlaEditAttachment functions are adapted from wp-admin/js/post.js
24
  mla.mlaEditAttachment = {
25
+ $uploaddiv : null,
26
+ uploadtimestamp : '',
27
+ $modifydiv : null,
28
+ modifytimestamp : '',
29
+
30
  init : function(){
31
  $( '#mla_set_parent' ).on( 'click', function(){
32
  return mla.mlaEditAttachment.setParentOpen();
115
  return false;
116
  });
117
  }); // .categorydiv.each,
118
+
119
+ /*
120
+ * Save Post box (#submitdiv), for Uploaded on and Last modified dates
121
+ */
122
+ if ( $('#submitdiv').length ) {
123
+ mla.mlaEditAttachment.uploadtimestamp = $('#upload-timestamp').html();
124
+ mla.mlaEditAttachment.$uploaddiv = $('#timestampdiv');
125
+ //mla.mlaEditAttachment.modifytimestamp = $('#modify-timestamp').html();
126
+ //mla.mlaEditAttachment.$modifydiv = $('#modifytimestampdiv');
127
+
128
+ // Edit Uploaded on click.
129
+ mla.mlaEditAttachment.$uploaddiv.siblings('a.edit-timestamp').click( function( event ) {
130
+ if ( mla.mlaEditAttachment.$uploaddiv.is( ':hidden' ) ) {
131
+ mla.mlaEditAttachment.$uploaddiv.slideDown( 'fast', function() {
132
+ $( 'input, select', mla.mlaEditAttachment.$uploaddiv.find( '.timestamp-wrap' ) ).first().focus();
133
+ } );
134
+ $(this).hide();
135
+ }
136
+ event.preventDefault();
137
+ });
138
+
139
+ // Cancel editing the Uploaded on time and hide the settings.
140
+ mla.mlaEditAttachment.$uploaddiv.find('.cancel-timestamp').click( function( event ) {
141
+ mla.mlaEditAttachment.$uploaddiv.slideUp('fast').siblings('a.edit-timestamp').show().focus();
142
+ $( '#mm', mla.mlaEditAttachment.$uploaddiv ).val($( '#hidden_mm', mla.mlaEditAttachment.$uploaddiv ).val());
143
+ $( '#jj', mla.mlaEditAttachment.$uploaddiv ).val($( '#hidden_jj', mla.mlaEditAttachment.$uploaddiv ).val());
144
+ $( '#aa', mla.mlaEditAttachment.$uploaddiv ).val($( '#hidden_aa', mla.mlaEditAttachment.$uploaddiv ).val());
145
+ $( '#hh', mla.mlaEditAttachment.$uploaddiv ).val($( '#hidden_hh', mla.mlaEditAttachment.$uploaddiv ).val());
146
+ $( '#mn', mla.mlaEditAttachment.$uploaddiv ).val($( '#hidden_mn', mla.mlaEditAttachment.$uploaddiv ).val());
147
+ mla.mlaEditAttachment.updateText( mla.mlaEditAttachment.$uploaddiv, mla.mlaEditAttachment.uploadtimestamp, '#upload-timestamp' );
148
+ event.preventDefault();
149
+ });
150
+
151
+ // Save the changed Uploaded on timestamp.
152
+ mla.mlaEditAttachment.$uploaddiv.find('.save-timestamp').click( function( event ) { // crazyhorse - multiple ok cancels
153
+ if ( mla.mlaEditAttachment.updateText( mla.mlaEditAttachment.$uploaddiv, mla.mlaEditAttachment.uploadtimestamp, '#upload-timestamp' ) ) {
154
+ mla.mlaEditAttachment.$uploaddiv.slideUp('fast');
155
+ mla.mlaEditAttachment.$uploaddiv.siblings('a.edit-timestamp').show().focus();
156
+ }
157
+ event.preventDefault();
158
+ });
159
+
160
+ // Cancel submit when an invalid Uploaded on timestamp has been selected.
161
+ $('#post').on( 'submit', function( event ) {
162
+ if ( ! mla.mlaEditAttachment.updateText( mla.mlaEditAttachment.$uploaddiv, mla.mlaEditAttachment.uploadtimestamp, '#upload-timestamp' ) ) {
163
+ event.preventDefault();
164
+ mla.mlaEditAttachment.$uploaddiv.show();
165
+
166
+ if ( wp.autosave ) {
167
+ wp.autosave.enableButtons();
168
+ }
169
+
170
+ $( '#publishing-action .spinner' ).removeClass( 'is-active' );
171
+ }
172
+ });
173
+ } // $('#submitdiv').length
174
  }, // function init
175
 
176
  setParentOpen : function() {
205
  }
206
 
207
  $( '#mla-set-parent-submit' ).off( 'click' );
208
+ },
209
+
210
+ /**
211
+ * Make sure all Uploaded on or Last Modified labels represent the current settings.
212
+ *
213
+ * @returns {boolean} False when an invalid timestamp has been selected, otherwise True.
214
+ */
215
+ updateText : function( $div, stamp, stampdiv ) {
216
+
217
+ if ( ! $div.length )
218
+ return true;
219
+
220
+ var attemptedDate, originalDate, currentDate,
221
+ aa = $( '#aa', $div ).val(), mm = $( '#mm', $div ).val(), jj = $( '#jj', $div ).val(),
222
+ hh = $( '#hh', $div ).val(), mn = $( '#mn', $div ).val();
223
+
224
+ attemptedDate = new Date( aa, mm - 1, jj, hh, mn );
225
+ originalDate = new Date( $( '#hidden_aa', $div ).val(), $( '#hidden_mm', $div ).val() -1, $( '#hidden_jj', $div ).val(), $( '#hidden_hh', $div ).val(), $( '#hidden_mn', $div ).val() );
226
+ currentDate = new Date( $( '#cur_aa', $div ).val(), $( '#cur_mm', $div ).val() -1, $( '#cur_jj', $div ).val(), $( '#cur_hh', $div ).val(), $( '#cur_mn', $div ).val() );
227
+
228
+ // Catch unexpected date problems.
229
+ if ( attemptedDate.getFullYear() != aa || (1 + attemptedDate.getMonth()) != mm || attemptedDate.getDate() != jj || attemptedDate.getMinutes() != mn ) {
230
+ $div.find('.timestamp-wrap').addClass('form-invalid');
231
+ return false;
232
+ } else {
233
+ $div.find('.timestamp-wrap').removeClass('form-invalid');
234
+ }
235
+
236
+ // If the date is the same, set it to trigger update events.
237
+ if ( originalDate.toUTCString() == attemptedDate.toUTCString() ) {
238
+ // Re-set to the current value.
239
+ $( stampdiv ).html( stamp );
240
+ } else {
241
+ label = '#upload-timestamp' == stampdiv ? mla.settings.uploadLabel : mla.settings.modifyLabel;
242
+ $( stampdiv ).html(
243
+ label + '<b>' +
244
+ postL10n.dateFormat
245
+ .replace( '%1$s', $( 'option[value="' + mm + '"]', '#mm' ).attr( 'data-text' ) )
246
+ .replace( '%2$s', parseInt( jj, 10 ) )
247
+ .replace( '%3$s', aa )
248
+ .replace( '%4$s', ( '00' + hh ).slice( -2 ) )
249
+ .replace( '%5$s', ( '00' + mn ).slice( -2 ) ) +
250
+ '</b> '
251
+ );
252
+ }
253
+
254
+ return true;
255
  }
256
  }; // mla.mlaEditAttachment
257
 
js/mla-edit-media-scripts.min.js CHANGED
@@ -1 +1 @@
1
- var jQuery,mla_edit_media_vars,mla={settings:{},utility:{},setParent:null,mlaEditAttachment:null};(function(a){mla.settings=typeof mla_edit_media_vars==="undefined"?{}:mla_edit_media_vars;mla_edit_media_vars=void 0;mla.mlaEditAttachment={init:function(){a("#mla_set_parent").on("click",function(){return mla.mlaEditAttachment.setParentOpen()});a(".categorydiv").each(function(){var e=a(this).attr("id"),d,b,c;d=e.split("-");d.shift();b=d.join("-");c=b+"_tab";if(b=="category"){c="cats"}a.extend(a.expr[":"],{matchTerms:function(h,g,f,j){return(h.textContent||h.innerText||"").toLowerCase().indexOf((f[3]||"").toLowerCase())>=0}});a("#search-"+b).keypress(function(f){if(13===f.keyCode){f.preventDefault();a("#search-"+b).val("");a("#"+b+"-searcher").addClass("wp-hidden-children");a("#"+b+"checklist li").show();a("#"+b+"checklist-pop li").show();return}});a("#search-"+b).keyup(function(h){var j,i,k,g,f;if(13===h.keyCode){h.preventDefault();a("#"+b+"-search-toggle").focus();return}j=a("#search-"+b).val();i=a("#"+b+"checklist li");k=a("#"+b+"checklist-pop li");if(0<j.length){i.hide();k.hide()}else{i.show();k.show()}g=a("#"+b+"checklist label:matchTerms('"+j+"')");g.closest("li").find("li").andSelf().show();g.parents("#"+b+"checklist li").show();f=a("#"+b+"checklist-pop label:matchTerms('"+j+"')");f.closest("li").find("li").andSelf().show();f.parents("#"+b+"checklist li").show()});a("#"+b+"-search-toggle").click(function(){a("#"+b+"-adder ").addClass("wp-hidden-children");a("#"+b+"-searcher").toggleClass("wp-hidden-children");a('a[href="#'+b+'-all"]',"#"+b+"-tabs").click();a("#"+b+"checklist li").show();a("#"+b+"checklist-pop li").show();if(false===a("#"+b+"-searcher").hasClass("wp-hidden-children")){a("#search-"+b).val("").removeClass("form-input-tip");a("#search-"+b).focus()}return false});a("#"+b+"-add-toggle").click(function(){a("#"+b+"-searcher").addClass("wp-hidden-children");return false})})},setParentOpen:function(){var d,b,c;d=a("#mla_post_parent").val()||"";b=a("#post_ID").val()||"";c=a("#title").val()||"";mla.setParent.open(d,b,c);a("#mla-set-parent-submit").on("click",function(e){e.preventDefault();mla.mlaEditAttachment.setParentSave();return false})},setParentSave:function(){var d=a("#mla-set-parent-response-div input:checked").closest("tr"),f,c,b,e;if(d.length){f=a(":radio",d).val()||"";c=a("label",d).html()||"";b=a("#mla_post_parent").clone(true).val(f);e=a("#mla_parent_info").clone(true).val(c);a("#mla_post_parent").replaceWith(b);a("#mla_parent_info").replaceWith(e);mla.setParent.close()}a("#mla-set-parent-submit").off("click")}};a(document).ready(function(){mla.mlaEditAttachment.init()})})(jQuery);
1
+ var jQuery,mla_edit_media_vars,mla={settings:{},utility:{},setParent:null,mlaEditAttachment:null};(function(a){mla.settings=typeof mla_edit_media_vars==="undefined"?{}:mla_edit_media_vars;mla_edit_media_vars=void 0;mla.mlaEditAttachment={$uploaddiv:null,uploadtimestamp:"",$modifydiv:null,modifytimestamp:"",init:function(){a("#mla_set_parent").on("click",function(){return mla.mlaEditAttachment.setParentOpen()});a(".categorydiv").each(function(){var e=a(this).attr("id"),d,b,c;d=e.split("-");d.shift();b=d.join("-");c=b+"_tab";if(b=="category"){c="cats"}a.extend(a.expr[":"],{matchTerms:function(h,g,f,j){return(h.textContent||h.innerText||"").toLowerCase().indexOf((f[3]||"").toLowerCase())>=0}});a("#search-"+b).keypress(function(f){if(13===f.keyCode){f.preventDefault();a("#search-"+b).val("");a("#"+b+"-searcher").addClass("wp-hidden-children");a("#"+b+"checklist li").show();a("#"+b+"checklist-pop li").show();return}});a("#search-"+b).keyup(function(h){var j,i,k,g,f;if(13===h.keyCode){h.preventDefault();a("#"+b+"-search-toggle").focus();return}j=a("#search-"+b).val();i=a("#"+b+"checklist li");k=a("#"+b+"checklist-pop li");if(0<j.length){i.hide();k.hide()}else{i.show();k.show()}g=a("#"+b+"checklist label:matchTerms('"+j+"')");g.closest("li").find("li").andSelf().show();g.parents("#"+b+"checklist li").show();f=a("#"+b+"checklist-pop label:matchTerms('"+j+"')");f.closest("li").find("li").andSelf().show();f.parents("#"+b+"checklist li").show()});a("#"+b+"-search-toggle").click(function(){a("#"+b+"-adder ").addClass("wp-hidden-children");a("#"+b+"-searcher").toggleClass("wp-hidden-children");a('a[href="#'+b+'-all"]',"#"+b+"-tabs").click();a("#"+b+"checklist li").show();a("#"+b+"checklist-pop li").show();if(false===a("#"+b+"-searcher").hasClass("wp-hidden-children")){a("#search-"+b).val("").removeClass("form-input-tip");a("#search-"+b).focus()}return false});a("#"+b+"-add-toggle").click(function(){a("#"+b+"-searcher").addClass("wp-hidden-children");return false})});if(a("#submitdiv").length){mla.mlaEditAttachment.uploadtimestamp=a("#upload-timestamp").html();mla.mlaEditAttachment.$uploaddiv=a("#timestampdiv");mla.mlaEditAttachment.$uploaddiv.siblings("a.edit-timestamp").click(function(b){if(mla.mlaEditAttachment.$uploaddiv.is(":hidden")){mla.mlaEditAttachment.$uploaddiv.slideDown("fast",function(){a("input, select",mla.mlaEditAttachment.$uploaddiv.find(".timestamp-wrap")).first().focus()});a(this).hide()}b.preventDefault()});mla.mlaEditAttachment.$uploaddiv.find(".cancel-timestamp").click(function(b){mla.mlaEditAttachment.$uploaddiv.slideUp("fast").siblings("a.edit-timestamp").show().focus();a("#mm",mla.mlaEditAttachment.$uploaddiv).val(a("#hidden_mm",mla.mlaEditAttachment.$uploaddiv).val());a("#jj",mla.mlaEditAttachment.$uploaddiv).val(a("#hidden_jj",mla.mlaEditAttachment.$uploaddiv).val());a("#aa",mla.mlaEditAttachment.$uploaddiv).val(a("#hidden_aa",mla.mlaEditAttachment.$uploaddiv).val());a("#hh",mla.mlaEditAttachment.$uploaddiv).val(a("#hidden_hh",mla.mlaEditAttachment.$uploaddiv).val());a("#mn",mla.mlaEditAttachment.$uploaddiv).val(a("#hidden_mn",mla.mlaEditAttachment.$uploaddiv).val());mla.mlaEditAttachment.updateText(mla.mlaEditAttachment.$uploaddiv,mla.mlaEditAttachment.uploadtimestamp,"#upload-timestamp");b.preventDefault()});mla.mlaEditAttachment.$uploaddiv.find(".save-timestamp").click(function(b){if(mla.mlaEditAttachment.updateText(mla.mlaEditAttachment.$uploaddiv,mla.mlaEditAttachment.uploadtimestamp,"#upload-timestamp")){mla.mlaEditAttachment.$uploaddiv.slideUp("fast");mla.mlaEditAttachment.$uploaddiv.siblings("a.edit-timestamp").show().focus()}b.preventDefault()});a("#post").on("submit",function(b){if(!mla.mlaEditAttachment.updateText(mla.mlaEditAttachment.$uploaddiv,mla.mlaEditAttachment.uploadtimestamp,"#upload-timestamp")){b.preventDefault();mla.mlaEditAttachment.$uploaddiv.show();if(wp.autosave){wp.autosave.enableButtons()}a("#publishing-action .spinner").removeClass("is-active")}})}},setParentOpen:function(){var d,b,c;d=a("#mla_post_parent").val()||"";b=a("#post_ID").val()||"";c=a("#title").val()||"";mla.setParent.open(d,b,c);a("#mla-set-parent-submit").on("click",function(e){e.preventDefault();mla.mlaEditAttachment.setParentSave();return false})},setParentSave:function(){var d=a("#mla-set-parent-response-div input:checked").closest("tr"),f,c,b,e;if(d.length){f=a(":radio",d).val()||"";c=a("label",d).html()||"";b=a("#mla_post_parent").clone(true).val(f);e=a("#mla_parent_info").clone(true).val(c);a("#mla_post_parent").replaceWith(b);a("#mla_parent_info").replaceWith(e);mla.setParent.close()}a("#mla-set-parent-submit").off("click")},updateText:function(k,c,h){if(!k.length){return true}var j,l,d,b=a("#aa",k).val(),g=a("#mm",k).val(),i=a("#jj",k).val(),f=a("#hh",k).val(),e=a("#mn",k).val();j=new Date(b,g-1,i,f,e);l=new Date(a("#hidden_aa",k).val(),a("#hidden_mm",k).val()-1,a("#hidden_jj",k).val(),a("#hidden_hh",k).val(),a("#hidden_mn",k).val());d=new Date(a("#cur_aa",k).val(),a("#cur_mm",k).val()-1,a("#cur_jj",k).val(),a("#cur_hh",k).val(),a("#cur_mn",k).val());if(j.getFullYear()!=b||(1+j.getMonth())!=g||j.getDate()!=i||j.getMinutes()!=e){k.find(".timestamp-wrap").addClass("form-invalid");return false}else{k.find(".timestamp-wrap").removeClass("form-invalid")}if(l.toUTCString()==j.toUTCString()){a(h).html(c)}else{label="#upload-timestamp"==h?mla.settings.uploadLabel:mla.settings.modifyLabel;a(h).html(label+"<b>"+postL10n.dateFormat.replace("%1$s",a('option[value="'+g+'"]',"#mm").attr("data-text")).replace("%2$s",parseInt(i,10)).replace("%3$s",b).replace("%4$s",("00"+f).slice(-2)).replace("%5$s",("00"+e).slice(-2))+"</b> ")}return true}};a(document).ready(function(){mla.mlaEditAttachment.init()})})(jQuery);
languages/media-library-assistant-en_US - References.pot CHANGED
@@ -2,7 +2,7 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Media Library Assistant\n"
5
- "POT-Creation-Date: 2017-11-29 16:07-0800\n"
6
  "PO-Revision-Date: 2015-08-21 21:38-0800\n"
7
  "Last-Translator: David Lingren <david@fairtradejudaica.org>\n"
8
  "Language-Team: David Lingren <david@fairtradejudaica.org>\n"
@@ -20,128 +20,204 @@ msgstr ""
20
  "X-Poedit-SearchPath-1: tests\n"
21
  "X-Poedit-SearchPath-2: index.php\n"
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  #: includes/class-mla-admin-columns-support-deprecated.php:33
24
- #: includes/class-mla-admin-columns-support.php:55
25
  #: includes/class-mla-core-options.php:553 includes/class-mla-settings.php:429
26
- #: includes/class-mla-settings.php:1456 includes/class-mla-settings.php:1476
27
  #: index.php:48
28
  msgid "Media Library Assistant"
29
  msgstr ""
30
 
31
  #: includes/class-mla-admin-columns-support-deprecated.php:34
32
- #: includes/class-mla-admin-columns-support.php:56
33
  #: includes/class-mla-core-options.php:562
34
  msgid "Assistant"
35
  msgstr ""
36
 
37
- #: includes/class-mla-ajax.php:238 includes/class-mla-core-options.php:1170
38
- #: includes/class-mla-data.php:3768 includes/class-mla-edit-media.php:426
39
- #: includes/class-mla-main.php:1843 includes/class-mla-main.php:2043
40
- #: includes/class-mla-objects.php:356 includes/class-mla-options.php:453
41
  #: includes/mla-main-search-box-template.php:47
42
  #: includes/mla-media-modal-js-template.php:40
43
  msgid "Title"
44
  msgstr ""
45
 
46
- #: includes/class-mla-ajax.php:238 includes/class-mla-main.php:1844
47
- #: includes/class-mla-thumbnail-generation.php:625
48
  msgid "Type"
49
  msgstr ""
50
 
51
- #: includes/class-mla-ajax.php:238 includes/class-mla-main.php:1845
52
  msgid "Date"
53
  msgstr ""
54
 
55
- #: includes/class-mla-ajax.php:238 includes/class-mla-main.php:1846
56
  #: includes/class-mla-settings-custom-fields-tab.php:503
57
  #: includes/class-mla-settings-custom-fields-tab.php:803
58
- #: includes/class-mla-settings-iptc-exif-tab.php:512
59
- #: includes/class-mla-settings-iptc-exif-tab.php:886
60
  #: includes/class-mla-settings-upload-tab.php:552
61
  msgid "Status"
62
  msgstr ""
63
 
64
- #: includes/class-mla-ajax.php:242 includes/class-mla-list-table.php:864
65
- #: includes/class-mla-list-table.php:1030 includes/class-mla-main.php:402
66
  #: includes/class-mla-polylang-support.php:363
67
  #: includes/class-mla-thumbnail-generation.php:97
68
  msgid "(no title)"
69
  msgstr ""
70
 
71
- #: includes/class-mla-ajax.php:248
72
  msgid "Published"
73
  msgstr ""
74
 
75
- #: includes/class-mla-ajax.php:251 includes/class-mla-edit-media.php:829
76
- #: includes/class-mla-list-table.php:631
77
- msgid "Scheduled"
78
- msgstr ""
79
-
80
- #: includes/class-mla-ajax.php:254
81
  msgid "Pending Review"
82
  msgstr ""
83
 
84
- #: includes/class-mla-ajax.php:257 includes/class-mla-edit-media.php:835
85
- #: includes/class-mla-list-table.php:628
86
- msgid "Draft"
87
- msgstr ""
88
-
89
- #: includes/class-mla-ajax.php:267 includes/class-mla-list-table.php:1439
90
- #: includes/class-mla-list-table.php:1468
91
- #: includes/class-mla-list-table.php:1532
92
- msgid "Y/m/d"
93
- msgstr ""
94
-
95
- #: includes/class-mla-ajax.php:296 includes/class-mla-ajax.php:303
96
- #: includes/class-mla-ajax.php:312 includes/class-mla-core.php:805
97
- #: includes/class-mla-core.php:823 includes/class-mla-core.php:1231
98
- #: includes/class-mla-core.php:1237 includes/class-mla-core.php:1241
99
  #: includes/class-mla-data-pdf.php:216 includes/class-mla-data-pdf.php:517
100
  #: includes/class-mla-data-pdf.php:519 includes/class-mla-data-pdf.php:565
101
- #: includes/class-mla-data-pdf.php:749 includes/class-mla-data-query.php:674
102
  #: includes/class-mla-data.php:50 includes/class-mla-data.php:108
103
  #: includes/class-mla-data.php:196 includes/class-mla-data.php:242
104
  #: includes/class-mla-data.php:345 includes/class-mla-data.php:501
105
- #: includes/class-mla-data.php:564 includes/class-mla-data.php:1282
106
- #: includes/class-mla-data.php:1480 includes/class-mla-data.php:1486
107
- #: includes/class-mla-data.php:1883 includes/class-mla-data.php:1887
108
- #: includes/class-mla-data.php:3030 includes/class-mla-data.php:3072
109
- #: includes/class-mla-data.php:3116 includes/class-mla-data.php:3496
110
- #: includes/class-mla-data.php:3509 includes/class-mla-data.php:3531
111
- #: includes/class-mla-data.php:3745 includes/class-mla-data.php:3791
112
- #: includes/class-mla-data.php:3824 includes/class-mla-data.php:3840
113
- #: includes/class-mla-data.php:4066 includes/class-mla-edit-media.php:316
114
- #: includes/class-mla-edit-media.php:743 includes/class-mla-edit-media.php:783
115
- #: includes/class-mla-main.php:635 includes/class-mla-main.php:783
116
- #: includes/class-mla-main.php:1145 includes/class-mla-main.php:1201
117
- #: includes/class-mla-main.php:1226 includes/class-mla-main.php:1353
118
- #: includes/class-mla-main.php:1407 includes/class-mla-main.php:1498
119
- #: includes/class-mla-main.php:1529 includes/class-mla-main.php:1663
120
- #: includes/class-mla-main.php:1670 includes/class-mla-main.php:1829
121
- #: includes/class-mla-main.php:1904 includes/class-mla-main.php:2173
122
- #: includes/class-mla-main.php:2181 includes/class-mla-main.php:2205
123
- #: includes/class-mla-main.php:2213 includes/class-mla-main.php:2245
124
- #: includes/class-mla-main.php:2253 includes/class-mla-media-modal.php:577
125
- #: includes/class-mla-mime-types.php:749 includes/class-mla-mime-types.php:1141
126
- #: includes/class-mla-mime-types.php:1229
127
- #: includes/class-mla-mime-types.php:1375
128
- #: includes/class-mla-mime-types.php:1398
129
- #: includes/class-mla-mime-types.php:2197
130
- #: includes/class-mla-mime-types.php:2208
131
- #: includes/class-mla-mime-types.php:2221
132
- #: includes/class-mla-mime-types.php:2229
133
- #: includes/class-mla-mime-types.php:2234
134
- #: includes/class-mla-mime-types.php:2277
135
- #: includes/class-mla-mime-types.php:2296
136
- #: includes/class-mla-mime-types.php:2347
137
- #: includes/class-mla-mime-types.php:2381
138
- #: includes/class-mla-mime-types.php:2466
139
- #: includes/class-mla-mime-types.php:2545
140
- #: includes/class-mla-mime-types.php:2554
141
- #: includes/class-mla-mime-types.php:2586 includes/class-mla-objects.php:253
 
142
  #: includes/class-mla-options.php:217 includes/class-mla-options.php:421
143
- #: includes/class-mla-options.php:502 includes/class-mla-options.php:1015
144
- #: includes/class-mla-options.php:1823 includes/class-mla-options.php:2049
 
145
  #: includes/class-mla-settings-custom-fields-tab.php:173
146
  #: includes/class-mla-settings-custom-fields-tab.php:238
147
  #: includes/class-mla-settings-custom-fields-tab.php:242
@@ -157,22 +233,22 @@ msgstr ""
157
  #: includes/class-mla-settings-custom-fields-tab.php:956
158
  #: includes/class-mla-settings-custom-fields-tab.php:2029
159
  #: includes/class-mla-settings-documentation-tab.php:97
160
- #: includes/class-mla-settings-documentation-tab.php:297
161
- #: includes/class-mla-settings-documentation-tab.php:1269
162
  #: includes/class-mla-settings-iptc-exif-tab.php:175
163
  #: includes/class-mla-settings-iptc-exif-tab.php:241
164
  #: includes/class-mla-settings-iptc-exif-tab.php:245
165
  #: includes/class-mla-settings-iptc-exif-tab.php:280
166
  #: includes/class-mla-settings-iptc-exif-tab.php:308
167
  #: includes/class-mla-settings-iptc-exif-tab.php:312
168
- #: includes/class-mla-settings-iptc-exif-tab.php:347
169
- #: includes/class-mla-settings-iptc-exif-tab.php:423
170
- #: includes/class-mla-settings-iptc-exif-tab.php:632
171
- #: includes/class-mla-settings-iptc-exif-tab.php:800
172
- #: includes/class-mla-settings-iptc-exif-tab.php:1001
173
- #: includes/class-mla-settings-iptc-exif-tab.php:1005
174
- #: includes/class-mla-settings-iptc-exif-tab.php:1029
175
- #: includes/class-mla-settings-iptc-exif-tab.php:2260
176
  #: includes/class-mla-settings-shortcodes-tab.php:79
177
  #: includes/class-mla-settings-shortcodes-tab.php:90
178
  #: includes/class-mla-settings-shortcodes-tab.php:94
@@ -193,35 +269,35 @@ msgstr ""
193
  #: includes/class-mla-settings-view-tab.php:275
194
  #: includes/class-mla-settings-view-tab.php:433
195
  #: includes/class-mla-settings-view-tab.php:447
196
- #: includes/class-mla-settings.php:589 includes/class-mla-settings.php:725
197
- #: includes/class-mla-settings.php:762 includes/class-mla-settings.php:902
198
- #: includes/class-mla-settings.php:1316 includes/class-mla-settings.php:1367
199
- #: includes/class-mla-settings.php:1456 includes/class-mla-settings.php:1489
200
- #: includes/class-mla-settings.php:1492 includes/class-mla-settings.php:1496
201
- #: includes/class-mla-settings.php:1789 includes/class-mla-settings.php:1793
202
- #: includes/class-mla-settings.php:1804 includes/class-mla-settings.php:1811
203
- #: includes/class-mla-settings.php:1820 includes/class-mla-settings.php:1857
204
- #: includes/class-mla-settings.php:1865 includes/class-mla-settings.php:1874
205
  #: includes/class-mla-shortcode-support.php:2059
206
  #: includes/class-mla-shortcode-support.php:2150
207
  #: includes/class-mla-shortcode-support.php:3416
208
  #: includes/class-mla-shortcode-support.php:3543
209
  #: includes/class-mla-shortcode-support.php:3575
210
- #: includes/class-mla-shortcode-support.php:4610
211
- #: includes/class-mla-shortcode-support.php:5014
212
- #: includes/class-mla-shortcode-support.php:5051
213
- #: includes/class-mla-thumbnail-generation.php:416
214
  #: includes/class-mla-thumbnail-generation.php:428
215
  #: includes/class-mla-thumbnail-generation.php:440
216
- #: includes/class-mla-thumbnail-generation.php:484
 
217
  msgid "ERROR"
218
  msgstr ""
219
 
220
- #: includes/class-mla-ajax.php:296 includes/class-mla-main.php:1663
221
  msgid "No post ID found"
222
  msgstr ""
223
 
224
- #: includes/class-mla-ajax.php:303 includes/class-mla-main.php:1670
225
  #: includes/class-mla-polylang-support.php:260
226
  msgid "You are not allowed to edit this Attachment."
227
  msgstr ""
@@ -242,7 +318,7 @@ msgstr ""
242
  msgid "Check this option to add support for Attachment Tags."
243
  msgstr ""
244
 
245
- #: includes/class-mla-core-options.php:424 includes/class-mla-settings.php:1060
246
  msgid "Where-used Reporting"
247
  msgstr ""
248
 
@@ -259,7 +335,7 @@ msgid "Where-used database access tuning"
259
  msgstr ""
260
 
261
  #: includes/class-mla-core-options.php:442
262
- #: includes/class-mla-edit-media.php:678 includes/class-mla-edit-media.php:928
263
  msgid "Featured in"
264
  msgstr ""
265
 
@@ -268,23 +344,12 @@ msgstr ""
268
  msgid "Enabled"
269
  msgstr ""
270
 
271
- #: includes/class-mla-core-options.php:447
272
- #: includes/class-mla-core-options.php:457
273
- #: includes/class-mla-core-options.php:467
274
- #: includes/class-mla-core-options.php:477
275
- #: includes/class-mla-list-table.php:1136
276
- #: includes/class-mla-list-table.php:1181
277
- #: includes/class-mla-list-table.php:1231
278
- #: includes/class-mla-list-table.php:1276
279
- msgid "Disabled"
280
- msgstr ""
281
-
282
  #: includes/class-mla-core-options.php:448
283
  msgid "Search database posts and pages for Featured Image attachments."
284
  msgstr ""
285
 
286
  #: includes/class-mla-core-options.php:452
287
- #: includes/class-mla-edit-media.php:682 includes/class-mla-edit-media.php:967
288
  msgid "Inserted in"
289
  msgstr ""
290
 
@@ -300,8 +365,8 @@ msgid ""
300
  msgstr ""
301
 
302
  #: includes/class-mla-core-options.php:462
303
- #: includes/class-mla-edit-media.php:686 includes/class-mla-edit-media.php:1002
304
- #: includes/class-mla-settings.php:1570
305
  msgid "Gallery in"
306
  msgstr ""
307
 
@@ -311,9 +376,9 @@ msgid "Dynamic"
311
  msgstr ""
312
 
313
  #: includes/class-mla-core-options.php:467
314
- #: includes/class-mla-core-options.php:477 includes/class-mla-main.php:2076
315
  #: includes/class-mla-settings-custom-fields-tab.php:733
316
- #: includes/class-mla-settings-iptc-exif-tab.php:815
317
  msgid "Refresh"
318
  msgstr ""
319
 
@@ -330,8 +395,8 @@ msgid ""
330
  msgstr ""
331
 
332
  #: includes/class-mla-core-options.php:472
333
- #: includes/class-mla-edit-media.php:690 includes/class-mla-edit-media.php:1037
334
- #: includes/class-mla-settings.php:1580
335
  msgid "MLA Gallery in"
336
  msgstr ""
337
 
@@ -343,7 +408,7 @@ msgid ""
343
  "Cached."
344
  msgstr ""
345
 
346
- #: includes/class-mla-core-options.php:482 includes/class-mla-settings.php:1060
347
  msgid "Taxonomy Support"
348
  msgstr ""
349
 
@@ -386,14 +451,14 @@ msgid ""
386
  msgstr ""
387
 
388
  #: includes/class-mla-core-options.php:506
389
- #: includes/class-mla-core-options.php:729 includes/class-mla-settings.php:1091
390
- #: includes/class-mla-settings.php:1092 includes/class-mla-settings.php:1093
391
  msgid "For complete documentation"
392
  msgstr ""
393
 
394
  #: includes/class-mla-core-options.php:506
395
- #: includes/class-mla-core-options.php:729 includes/class-mla-settings.php:1091
396
- #: includes/class-mla-settings.php:1092 includes/class-mla-settings.php:1093
397
  msgid "click here"
398
  msgstr ""
399
 
@@ -491,15 +556,6 @@ msgstr ""
491
  msgid "Order By"
492
  msgstr ""
493
 
494
- #: includes/class-mla-core-options.php:603
495
- #: includes/class-mla-core-options.php:847
496
- #: includes/class-mla-core-options.php:878
497
- #: includes/class-mla-core-options.php:892
498
- #: includes/class-mla-list-table.php:486 includes/class-mla-list-table.php:1389
499
- #: includes/class-mla-settings-shortcodes-tab.php:629
500
- msgid "None"
501
- msgstr ""
502
-
503
  #: includes/class-mla-core-options.php:603
504
  msgid "ID/Parent"
505
  msgstr ""
@@ -521,247 +577,255 @@ msgid "Descending"
521
  msgstr ""
522
 
523
  #: includes/class-mla-core-options.php:614
524
- #: includes/class-mla-core-options.php:857
525
  msgid "Choose the sort order."
526
  msgstr ""
527
 
528
- #: includes/class-mla-core-options.php:618
 
 
 
 
 
 
 
 
529
  msgid "Views Width"
530
  msgstr ""
531
 
532
- #: includes/class-mla-core-options.php:623
533
  msgid "Enter the width for the views list, in pixels (px) or percent (%)"
534
  msgstr ""
535
 
536
- #: includes/class-mla-core-options.php:627
537
  msgid "Icon Size"
538
  msgstr ""
539
 
540
- #: includes/class-mla-core-options.php:632
541
  msgid "Enter the size of the thumbnail/icon images, in pixels"
542
  msgstr ""
543
 
544
- #: includes/class-mla-core-options.php:636
545
  msgid "Show Primary Column File Name"
546
  msgstr ""
547
 
548
- #: includes/class-mla-core-options.php:640
549
  msgid ""
550
  "Check/uncheck this option to show/omit the file name from the primary column."
551
  msgstr ""
552
 
553
- #: includes/class-mla-core-options.php:644
554
  msgid "QuickTags editor for bulk description"
555
  msgstr ""
556
 
557
- #: includes/class-mla-core-options.php:648
558
  msgid ""
559
  "Check this option to use the QuickTags editor for the Description field in "
560
  "the Bulk Edit area."
561
  msgstr ""
562
 
563
- #: includes/class-mla-core-options.php:652
564
  msgid "Bulk Chunk Size"
565
  msgstr ""
566
 
567
- #: includes/class-mla-core-options.php:657
568
  msgid "Enter the size of the Bulk Edit and Map All processing chunks"
569
  msgstr ""
570
 
571
- #: includes/class-mla-core-options.php:661
572
  msgid "Taxonomy Filter parameters"
573
  msgstr ""
574
 
575
- #: includes/class-mla-core-options.php:666
576
  msgid "Maximum Depth"
577
  msgstr ""
578
 
579
- #: includes/class-mla-core-options.php:671
580
  msgid ""
581
  "Enter the number of levels displayed for hierarchial taxonomies; enter zero "
582
  "for no limit."
583
  msgstr ""
584
 
585
- #: includes/class-mla-core-options.php:675
586
  msgid "Include Children"
587
  msgstr ""
588
 
589
- #: includes/class-mla-core-options.php:679
590
  msgid ""
591
  "Check/uncheck this option to include/exclude children for hierarchical "
592
  "taxonomies."
593
  msgstr ""
594
 
595
- #: includes/class-mla-core-options.php:683
596
  msgid "Search Media Defaults"
597
  msgstr ""
598
 
599
- #: includes/class-mla-core-options.php:688
600
  msgid "Display Search Controls"
601
  msgstr ""
602
 
603
- #: includes/class-mla-core-options.php:692
604
- #: includes/class-mla-core-options.php:818
605
  msgid ""
606
  "Check/uncheck this option to display/hide the and/or connector and search "
607
  "fields controls."
608
  msgstr ""
609
 
610
- #: includes/class-mla-core-options.php:696
611
  msgid ""
612
  "Use these controls to set defaults for the and/or connector and search "
613
  "fields controls.<br>These defaults will be used for the Search Media boxes "
614
  "on both the Media/Assistant submenu<br>and the Media Manager Modal Window."
615
  msgstr ""
616
 
617
- #: includes/class-mla-core-options.php:710
618
  msgid "Media/Edit Media Enhancements"
619
  msgstr ""
620
 
621
- #: includes/class-mla-core-options.php:715
622
  msgid "Enable &quot;enhanced checklist&quot; taxonomies"
623
  msgstr ""
624
 
625
- #: includes/class-mla-core-options.php:719
626
  msgid ""
627
  "Check this option to enable the \"? Search\" feature for hierarchical "
628
  "taxonomies, e.g., Att. Categories.<br>&nbsp;&nbsp;This option also enables "
629
  "the \"checklist-style\" support for flat taxonomies, e.g., Att. Tags."
630
  msgstr ""
631
 
632
- #: includes/class-mla-core-options.php:723
633
  msgid "Enable Edit Media additional meta boxes"
634
  msgstr ""
635
 
636
- #: includes/class-mla-core-options.php:727
637
  msgid ""
638
  "Check this option to add \"Parent Info\", \"Menu Order\", \"Attachment "
639
  "Metadata\" and four \"where-used\" meta boxes to the Edit Media screen."
640
  msgstr ""
641
 
642
- #: includes/class-mla-core-options.php:728
643
  msgid "You can also use Filters to customize the meta boxes."
644
  msgstr ""
645
 
646
- #: includes/class-mla-core-options.php:733
647
  msgid "Media/Add New Enhancements"
648
  msgstr ""
649
 
650
- #: includes/class-mla-core-options.php:738
651
  msgid "Enable &quot;bulk edit&quot; area"
652
  msgstr ""
653
 
654
- #: includes/class-mla-core-options.php:742
655
  msgid ""
656
  "Check this option to enable the \"Bulk Edit area\" feature on the Media/Add "
657
  "New screen."
658
  msgstr ""
659
 
660
- #: includes/class-mla-core-options.php:746
661
  msgid "&quot;bulk edit&quot; area on top"
662
  msgstr ""
663
 
664
- #: includes/class-mla-core-options.php:750
665
  msgid ""
666
  "Check this option to move the \"Bulk Edit area\" to the top of the Media/Add "
667
  "New screen."
668
  msgstr ""
669
 
670
- #: includes/class-mla-core-options.php:754
671
  msgid "&quot;bulk edit&quot; area initially open"
672
  msgstr ""
673
 
674
- #: includes/class-mla-core-options.php:757
675
  msgid ""
676
  "Check this option to automatically open the \"Bulk Edit area\" when the "
677
  "Media/Add New screen is displayed."
678
  msgstr ""
679
 
680
- #: includes/class-mla-core-options.php:761
681
  msgid "Media Manager/Media Grid Enhancements"
682
  msgstr ""
683
 
684
- #: includes/class-mla-core-options.php:766
685
  msgid "Enable Media Grid Enhancements"
686
  msgstr ""
687
 
688
- #: includes/class-mla-core-options.php:769
689
  msgid ""
690
  "Check/uncheck this option to enable/disable Media Library Grid View "
691
  "Enhancements."
692
  msgstr ""
693
 
694
- #: includes/class-mla-core-options.php:773
695
  msgid "Enable Media Manager Enhancements"
696
  msgstr ""
697
 
698
- #: includes/class-mla-core-options.php:776
699
  msgid ""
700
  "Check/uncheck this option to enable/disable Media Manager Modal Window "
701
  "Enhancements."
702
  msgstr ""
703
 
704
- #: includes/class-mla-core-options.php:780
705
  msgid "Media Manager Enhanced MIME Type filter"
706
  msgstr ""
707
 
708
- #: includes/class-mla-core-options.php:783
709
  msgid ""
710
  "Check this option to filter by more MIME Types, e.g., text, applications."
711
  msgstr ""
712
 
713
- #: includes/class-mla-core-options.php:787
714
  msgid "Media Manager Month and Year filter"
715
  msgstr ""
716
 
717
- #: includes/class-mla-core-options.php:790
718
  msgid "Check this option to filter by month and year uploaded."
719
  msgstr ""
720
 
721
- #: includes/class-mla-core-options.php:794
722
  msgid "Media Manager Category/Tag filter"
723
  msgstr ""
724
 
725
- #: includes/class-mla-core-options.php:797
726
  msgid "Check this option to filter by taxonomy terms."
727
  msgstr ""
728
 
729
- #: includes/class-mla-core-options.php:801
730
  msgid "Media Manager Terms Search popup"
731
  msgstr ""
732
 
733
- #: includes/class-mla-core-options.php:804
734
  msgid "Check this option to enable the \"Terms Search\" popup window."
735
  msgstr ""
736
 
737
- #: includes/class-mla-core-options.php:808
738
  msgid "Media Manager Enhanced Search Media box"
739
  msgstr ""
740
 
741
- #: includes/class-mla-core-options.php:811
742
  msgid "Check this option to enable search box enhancements."
743
  msgstr ""
744
 
745
- #: includes/class-mla-core-options.php:815
746
  msgid "Media Manager Enhanced Search Media Controls"
747
  msgstr ""
748
 
749
- #: includes/class-mla-core-options.php:822
750
  msgid "Media Manager Checklist meta boxes"
751
  msgstr ""
752
 
753
- #: includes/class-mla-core-options.php:825
754
  msgid ""
755
  "Check this option to enable MLA-enhanced meta boxes in the \"ATTACHMENT "
756
  "DETAILS\" pane.<br>&nbsp;&nbsp;This option is for any taxonomy that uses a "
757
  "<strong>\"checklist-style\"</strong> meta box."
758
  msgstr ""
759
 
760
- #: includes/class-mla-core-options.php:829
761
  msgid "Media Manager Flat meta boxes"
762
  msgstr ""
763
 
764
- #: includes/class-mla-core-options.php:832
765
  msgid ""
766
  "Check this option to enable MLA-enhanced meta boxes in the \"ATTACHMENT "
767
  "DETAILS\" pane.<br>&nbsp;&nbsp;This option is for <strong>flat taxonomies</"
@@ -769,211 +833,211 @@ msgid ""
769
  "style\" meta box."
770
  msgstr ""
771
 
772
- #: includes/class-mla-core-options.php:836
773
  msgid "Media Manager auto-fill meta boxes"
774
  msgstr ""
775
 
776
- #: includes/class-mla-core-options.php:839
777
  msgid ""
778
  "Check this option to automatically fill MLA-enhanced meta boxes in the "
779
  "\"ATTACHMENT DETAILS\" pane<br>&nbsp;&nbsp;when the item is selected."
780
  msgstr ""
781
 
782
- #: includes/class-mla-core-options.php:843
783
  msgid "Media Manager Order By"
784
  msgstr ""
785
 
786
- #: includes/class-mla-core-options.php:847
787
- #: includes/class-mla-core-options.php:856
788
- #: includes/class-mla-core-options.php:878
789
- #: includes/class-mla-core-options.php:892
790
- #: includes/class-mla-core-options.php:906 includes/class-mla-settings.php:1142
791
  msgid "Media Manager Default"
792
  msgstr ""
793
 
794
- #: includes/class-mla-core-options.php:847
795
  msgid "Title/Name"
796
  msgstr ""
797
 
798
- #: includes/class-mla-core-options.php:848
799
  msgid ""
800
  "If you want to override the Media Manager default,<br>&nbsp;&nbsp;select a "
801
  "column for the sort order of the Media Library listing."
802
  msgstr ""
803
 
804
- #: includes/class-mla-core-options.php:852
805
  msgid "Media Manager Order"
806
  msgstr ""
807
 
808
- #: includes/class-mla-core-options.php:861
809
  msgid "Attachment Display Settings"
810
  msgstr ""
811
 
812
- #: includes/class-mla-core-options.php:866
813
  msgid "Media Manager Apply Display Settings"
814
  msgstr ""
815
 
816
- #: includes/class-mla-core-options.php:869
817
  msgid ""
818
  "Check this option to always start with the Attachment Display Settings set "
819
  "here,<br>&nbsp;&nbsp;overriding browser-/cookie-based defaults."
820
  msgstr ""
821
 
822
- #: includes/class-mla-core-options.php:873
823
- #: includes/class-mla-core-options.php:875
824
  msgid "Alignment"
825
  msgstr ""
826
 
827
- #: includes/class-mla-core-options.php:875
828
- #: includes/class-mla-core-options.php:889
829
- #: includes/class-mla-core-options.php:903
830
  #, php-format
831
  msgid ""
832
  "Select a value for the default %1$s option in the Attachment Display "
833
  "Settings."
834
  msgstr ""
835
 
836
- #: includes/class-mla-core-options.php:878
837
  msgid "Left"
838
  msgstr ""
839
 
840
- #: includes/class-mla-core-options.php:878
841
  msgid "Center"
842
  msgstr ""
843
 
844
- #: includes/class-mla-core-options.php:878
845
  msgid "Right"
846
  msgstr ""
847
 
848
- #: includes/class-mla-core-options.php:887
849
- #: includes/class-mla-core-options.php:889
850
  msgid "Link To"
851
  msgstr ""
852
 
853
- #: includes/class-mla-core-options.php:892
854
  msgid "Media File"
855
  msgstr ""
856
 
857
- #: includes/class-mla-core-options.php:892
858
  msgid "Attachment Page"
859
  msgstr ""
860
 
861
- #: includes/class-mla-core-options.php:892
862
  msgid "Custom URL"
863
  msgstr ""
864
 
865
- #: includes/class-mla-core-options.php:901
866
- #: includes/class-mla-core-options.php:903
867
  msgid "Size"
868
  msgstr ""
869
 
870
- #: includes/class-mla-core-options.php:906
871
- #: includes/class-mla-thumbnail-generation.php:570
872
- #: includes/class-mla-thumbnail-generation.php:636
873
  msgid "Thumbnail"
874
  msgstr ""
875
 
876
- #: includes/class-mla-core-options.php:906
877
  msgid "Medium"
878
  msgstr ""
879
 
880
- #: includes/class-mla-core-options.php:906
881
  msgid "Large"
882
  msgstr ""
883
 
884
- #: includes/class-mla-core-options.php:906
885
  msgid "Full Size"
886
  msgstr ""
887
 
888
- #: includes/class-mla-core-options.php:915
889
  msgid "Uninstall (Delete) Plugin Settings"
890
  msgstr ""
891
 
892
- #: includes/class-mla-core-options.php:920
893
  msgid "Delete Option Settings"
894
  msgstr ""
895
 
896
- #: includes/class-mla-core-options.php:923
897
  msgid ""
898
  "Check this option to remove all MLA option settings from the database when "
899
  "the plugin is deleted.<br>&nbsp;&nbsp;<strong>You can make a backup copy</"
900
  "strong> of your settings below by clicking \""
901
  msgstr ""
902
 
903
- #: includes/class-mla-core-options.php:923 includes/class-mla-settings.php:1062
904
  msgid "Export ALL Settings"
905
  msgstr ""
906
 
907
- #: includes/class-mla-core-options.php:927
908
  msgid "Delete Option Settings Backups"
909
  msgstr ""
910
 
911
- #: includes/class-mla-core-options.php:930
912
  msgid ""
913
  "Check this option to remove the <code>/wp-content/mla-backup</code> "
914
  "directory and its contents when the plugin is deleted."
915
  msgstr ""
916
 
917
- #: includes/class-mla-core-options.php:934
918
  msgid "Default [mla_gallery] Templates and Settings"
919
  msgstr ""
920
 
921
- #: includes/class-mla-core-options.php:939
922
- #: includes/class-mla-core-options.php:945
923
- #: includes/class-mla-core-options.php:983
924
- #: includes/class-mla-core-options.php:989
925
  msgid "Style Template"
926
  msgstr ""
927
 
928
- #: includes/class-mla-core-options.php:945
929
- #: includes/class-mla-core-options.php:955
930
- #: includes/class-mla-core-options.php:989
931
- #: includes/class-mla-core-options.php:999
932
  #, php-format
933
  msgid "Select the default %1$s for your %2$s shortcodes."
934
  msgstr ""
935
 
936
- #: includes/class-mla-core-options.php:949
937
- #: includes/class-mla-core-options.php:993
938
  msgid "Markup Template"
939
  msgstr ""
940
 
941
- #: includes/class-mla-core-options.php:955
942
- #: includes/class-mla-core-options.php:999
943
  #: includes/class-mla-settings-shortcodes-tab.php:85
944
  msgid "markup template"
945
  msgstr ""
946
 
947
- #: includes/class-mla-core-options.php:959
948
- #: includes/class-mla-core-options.php:1003
949
  msgid "Default columns"
950
  msgstr ""
951
 
952
- #: includes/class-mla-core-options.php:963
953
  msgid ""
954
  "Enter the number of [mla_tag_cloud] columns; must be a positive integer."
955
  msgstr ""
956
 
957
- #: includes/class-mla-core-options.php:967
958
- #: includes/class-mla-core-options.php:1011
959
  msgid "Default mla_margin"
960
  msgstr ""
961
 
962
- #: includes/class-mla-core-options.php:971
963
- #: includes/class-mla-core-options.php:1015
964
  msgid ""
965
  "Enter the CSS \"margin\" property value, in length (px, em, pt, etc.), "
966
  "percent (%), \"auto\" or \"inherit\".<br>&nbsp;&nbsp;Enter \"none\" to "
967
  "remove the property entirely."
968
  msgstr ""
969
 
970
- #: includes/class-mla-core-options.php:975
971
- #: includes/class-mla-core-options.php:1019
972
  msgid "Default mla_itemwidth"
973
  msgstr ""
974
 
975
- #: includes/class-mla-core-options.php:979
976
- #: includes/class-mla-core-options.php:1023
977
  msgid ""
978
  "Enter the CSS \"width\" property value, in length (px, em, pt, etc.), "
979
  "percent (%), \"auto\" or \"inherit\".<br>&nbsp;&nbsp;Enter \"calculate"
@@ -983,19 +1047,19 @@ msgid ""
983
  "the property entirely."
984
  msgstr ""
985
 
986
- #: includes/class-mla-core-options.php:1007
987
  msgid "Enter the number of [mla_gallery] columns; must be a positive integer."
988
  msgstr ""
989
 
990
- #: includes/class-mla-core-options.php:1027
991
  msgid "Thumbnail Substitution Support, mla_viewer"
992
  msgstr ""
993
 
994
- #: includes/class-mla-core-options.php:1032
995
  msgid "Enable thumbnail substitution"
996
  msgstr ""
997
 
998
- #: includes/class-mla-core-options.php:1035
999
  msgid ""
1000
  "Check this option to allow the \"mla_viewer\" to generate thumbnail images "
1001
  "for PDF documents. Thumbnails are generated dynamically, each time the item "
@@ -1004,32 +1068,32 @@ msgid ""
1004
  "strong>"
1005
  msgstr ""
1006
 
1007
- #: includes/class-mla-core-options.php:1039
1008
  msgid "Enable Featured Images"
1009
  msgstr ""
1010
 
1011
- #: includes/class-mla-core-options.php:1042
1012
  msgid ""
1013
  "Check this option to extend Featured Image support to all Media Library "
1014
  "items. The Featured Image can be used as a thumbnail image for the item in "
1015
  "an [mla_gallery] display."
1016
  msgstr ""
1017
 
1018
- #: includes/class-mla-core-options.php:1046
1019
  msgid "Enable Featured Image Generation"
1020
  msgstr ""
1021
 
1022
- #: includes/class-mla-core-options.php:1049
1023
  msgid ""
1024
  "Check this option to enable the \"Thumbnail\" generation action in the Media/"
1025
  "Assistant submenu Bulk Actions dropdown."
1026
  msgstr ""
1027
 
1028
- #: includes/class-mla-core-options.php:1053
1029
  msgid "Enable explicit Ghostscript check"
1030
  msgstr ""
1031
 
1032
- #: includes/class-mla-core-options.php:1056
1033
  msgid ""
1034
  "Check this option to enable the explicit check for Ghostscript support "
1035
  "required for thumbnail generation. If your Ghostscript software is in a non-"
@@ -1038,37 +1102,37 @@ msgid ""
1038
  "leave this option checked unless you know it is safe to turn it off."
1039
  msgstr ""
1040
 
1041
- #: includes/class-mla-core-options.php:1060
1042
  msgid "Ghostscript path"
1043
  msgstr ""
1044
 
1045
- #: includes/class-mla-core-options.php:1064
1046
  msgid ""
1047
  "If your &ldquo;gs&rdquo; executable is in a non-standard location, enter the "
1048
  "full path and filename here, e.g., &ldquo;/usr/bin/gs&rdquo;. It will "
1049
  "override the search for Ghostscript in other places."
1050
  msgstr ""
1051
 
1052
- #: includes/class-mla-core-options.php:1084
1053
  msgid "Enable custom field mapping"
1054
  msgstr ""
1055
 
1056
- #: includes/class-mla-core-options.php:1087
1057
- #: includes/class-mla-core-options.php:1094
1058
- #: includes/class-mla-core-options.php:1101
1059
- #: includes/class-mla-core-options.php:1118
1060
  msgid "See Help menu."
1061
  msgstr ""
1062
 
1063
- #: includes/class-mla-core-options.php:1091
1064
  msgid "Enable custom field mapping when adding new media"
1065
  msgstr ""
1066
 
1067
- #: includes/class-mla-core-options.php:1098
1068
  msgid "Enable custom field mapping when updating media metadata"
1069
  msgstr ""
1070
 
1071
- #: includes/class-mla-core-options.php:1105
1072
  msgid ""
1073
  "Update the custom field mapping values above, then click Save Changes to "
1074
  "make the updates permanent.<br>You can also make temporary updates and click "
@@ -1076,33 +1140,33 @@ msgid ""
1076
  "saving any rule changes."
1077
  msgstr ""
1078
 
1079
- #: includes/class-mla-core-options.php:1115
1080
  msgid "Enable IPTC/EXIF Mapping"
1081
  msgstr ""
1082
 
1083
- #: includes/class-mla-core-options.php:1122
1084
  msgid "Enable IPTC/EXIF Mapping when adding new media"
1085
  msgstr ""
1086
 
1087
- #: includes/class-mla-core-options.php:1125
1088
  msgid ""
1089
  "Check this option to enable mapping when uploading new media (attachments)."
1090
  "<br>&nbsp;&nbsp;Does NOT affect the operation of the \"Map\" buttons on the "
1091
  "bulk edit, single edit and settings screens."
1092
  msgstr ""
1093
 
1094
- #: includes/class-mla-core-options.php:1129
1095
  msgid "Enable IPTC/EXIF Mapping when updating media metadata"
1096
  msgstr ""
1097
 
1098
- #: includes/class-mla-core-options.php:1132
1099
  msgid ""
1100
  "Check this option to enable mapping when media (attachments) metadata is "
1101
  "regenerated,<br>&nbsp;&nbsp;e.g., when the Media/Edit Media \"Edit Image\" "
1102
  "functions are used."
1103
  msgstr ""
1104
 
1105
- #: includes/class-mla-core-options.php:1136
1106
  msgid ""
1107
  "Update the standard field mapping values above, then click <strong>Save "
1108
  "Changes</strong> to make the updates permanent.<br>You can also make "
@@ -1111,13 +1175,13 @@ msgid ""
1111
  "changes."
1112
  msgstr ""
1113
 
1114
- #: includes/class-mla-core-options.php:1146
1115
  msgid ""
1116
  "Update the taxonomy term mapping values above, then click <strong>Save "
1117
  "Changes</strong> or <strong>Map All Attachments, Taxonomy Terms Now</strong>."
1118
  msgstr ""
1119
 
1120
- #: includes/class-mla-core-options.php:1156
1121
  msgid ""
1122
  "<strong>Update</strong> individual custom field mapping values above, or "
1123
  "make several updates and click <strong>Save Changes</strong> below to apply "
@@ -1128,33 +1192,33 @@ msgid ""
1128
  "changes."
1129
  msgstr ""
1130
 
1131
- #: includes/class-mla-core-options.php:1166
1132
  msgid "IPTC/EXIF Mapping help"
1133
  msgstr ""
1134
 
1135
- #: includes/class-mla-core-options.php:1177 includes/class-mla-data.php:3794
1136
- #: includes/class-mla-edit-media.php:427 includes/class-mla-main.php:2044
1137
  msgid "Name/Slug"
1138
  msgstr ""
1139
 
1140
- #: includes/class-mla-core-options.php:1184 includes/class-mla-data.php:3837
1141
- #: includes/class-mla-edit-media.php:430 includes/class-mla-list-table.php:1331
1142
- #: includes/class-mla-main.php:2048 includes/class-mla-options.php:459
1143
  #: includes/mla-main-search-box-template.php:51
1144
  #: includes/mla-media-modal-js-template.php:48
1145
  msgid "ALT Text"
1146
  msgstr ""
1147
 
1148
- #: includes/class-mla-core-options.php:1191 includes/class-mla-data.php:3850
1149
- #: includes/class-mla-edit-media.php:428 includes/class-mla-main.php:2045
1150
  #: includes/class-mla-options.php:462
1151
  #: includes/mla-main-search-box-template.php:53
1152
  #: includes/mla-media-modal-js-template.php:53
1153
  msgid "Caption"
1154
  msgstr ""
1155
 
1156
- #: includes/class-mla-core-options.php:1198 includes/class-mla-data.php:3859
1157
- #: includes/class-mla-edit-media.php:429 includes/class-mla-main.php:2046
1158
  #: includes/class-mla-options.php:465
1159
  #: includes/class-mla-settings-upload-tab.php:174
1160
  #: includes/class-mla-settings-upload-tab.php:542
@@ -1171,266 +1235,268 @@ msgstr ""
1171
  msgid "Description"
1172
  msgstr ""
1173
 
1174
- #: includes/class-mla-core-options.php:1218
 
 
 
 
 
 
1175
  msgid "Enable View and Post MIME Type Support"
1176
  msgstr ""
1177
 
1178
- #: includes/class-mla-core-options.php:1221
1179
  msgid ""
1180
  "Check/uncheck this option to enable/disable Post MIME Type Support, then "
1181
  "click <strong>Save Changes</strong> to record the new setting."
1182
  msgstr ""
1183
 
1184
- #: includes/class-mla-core-options.php:1230
1185
  msgid "Post MIME Types help."
1186
  msgstr ""
1187
 
1188
- #: includes/class-mla-core-options.php:1233
1189
- #: includes/class-mla-mime-types.php:1630
1190
  #: includes/class-mla-settings-custom-fields-tab.php:2454
1191
- #: includes/class-mla-settings-documentation-tab.php:1544
1192
- #: includes/class-mla-settings-iptc-exif-tab.php:2723
1193
  #: includes/class-mla-settings-shortcodes-tab.php:1970
1194
  msgctxt "table_view_singular"
1195
  msgid "All"
1196
  msgstr ""
1197
 
1198
- #: includes/class-mla-core-options.php:1234
1199
- #: includes/class-mla-mime-types.php:1631
1200
  #: includes/class-mla-settings-custom-fields-tab.php:2455
1201
- #: includes/class-mla-settings-documentation-tab.php:1545
1202
- #: includes/class-mla-settings-iptc-exif-tab.php:2724
1203
  #: includes/class-mla-settings-shortcodes-tab.php:1971
1204
  msgctxt "table_view_plural"
1205
  msgid "All"
1206
  msgstr ""
1207
 
1208
- #: includes/class-mla-core-options.php:1239
1209
- #: includes/class-mla-core-options.php:1293
1210
- #: includes/class-mla-core-options.php:1302
1211
- #: includes/class-mla-core-options.php:1311
1212
  msgctxt "post_mime_types_description"
1213
  msgid "Built-in view"
1214
  msgstr ""
1215
 
1216
- #: includes/class-mla-core-options.php:1242
1217
  msgctxt "table_view_singular"
1218
  msgid "Image"
1219
  msgstr ""
1220
 
1221
- #: includes/class-mla-core-options.php:1243
1222
  msgctxt "table_view_plural"
1223
  msgid "Images"
1224
  msgstr ""
1225
 
1226
- #: includes/class-mla-core-options.php:1248
1227
  msgctxt "post_mime_types_description"
1228
  msgid "All image subtypes"
1229
  msgstr ""
1230
 
1231
- #: includes/class-mla-core-options.php:1251
1232
  msgctxt "table_view_singular"
1233
  msgid "Audio"
1234
  msgstr ""
1235
 
1236
- #: includes/class-mla-core-options.php:1252
1237
  msgctxt "table_view_plural"
1238
  msgid "Audio"
1239
  msgstr ""
1240
 
1241
- #: includes/class-mla-core-options.php:1257
1242
  msgctxt "post_mime_types_description"
1243
  msgid "All audio subtypes"
1244
  msgstr ""
1245
 
1246
- #: includes/class-mla-core-options.php:1260
1247
  msgctxt "table_view_singular"
1248
  msgid "Video"
1249
  msgstr ""
1250
 
1251
- #: includes/class-mla-core-options.php:1261
1252
  msgctxt "table_view_plural"
1253
  msgid "Video"
1254
  msgstr ""
1255
 
1256
- #: includes/class-mla-core-options.php:1266
1257
  msgctxt "post_mime_types_description"
1258
  msgid "All video subtypes"
1259
  msgstr ""
1260
 
1261
- #: includes/class-mla-core-options.php:1269
1262
  msgctxt "table_view_singular"
1263
  msgid "Text"
1264
  msgstr ""
1265
 
1266
- #: includes/class-mla-core-options.php:1270
1267
  msgctxt "table_view_plural"
1268
  msgid "Text"
1269
  msgstr ""
1270
 
1271
- #: includes/class-mla-core-options.php:1275
1272
  msgctxt "post_mime_types_description"
1273
  msgid "All text subtypes"
1274
  msgstr ""
1275
 
1276
- #: includes/class-mla-core-options.php:1278
1277
  msgctxt "table_view_singular"
1278
  msgid "Application"
1279
  msgstr ""
1280
 
1281
- #: includes/class-mla-core-options.php:1279
1282
  msgctxt "table_view_plural"
1283
  msgid "Applications"
1284
  msgstr ""
1285
 
1286
- #: includes/class-mla-core-options.php:1284
1287
  msgctxt "post_mime_types_description"
1288
  msgid "All application subtypes"
1289
  msgstr ""
1290
 
1291
- #: includes/class-mla-core-options.php:1287
1292
- #: includes/class-mla-list-table.php:1545
1293
- msgctxt "table_view_singular"
1294
- msgid "Unattached"
1295
- msgstr ""
1296
-
1297
- #: includes/class-mla-core-options.php:1288
1298
  msgctxt "table_view_plural"
1299
  msgid "Unattached"
1300
  msgstr ""
1301
 
1302
- #: includes/class-mla-core-options.php:1296
1303
  msgctxt "table_view_singular"
1304
  msgid "Attached"
1305
  msgstr ""
1306
 
1307
- #: includes/class-mla-core-options.php:1297
1308
  msgctxt "table_view_plural"
1309
  msgid "Attached"
1310
  msgstr ""
1311
 
1312
- #: includes/class-mla-core-options.php:1305
1313
  msgctxt "table_view_singular"
1314
  msgid "Trash"
1315
  msgstr ""
1316
 
1317
- #: includes/class-mla-core-options.php:1306
1318
  msgctxt "table_view_plural"
1319
  msgid "Trash"
1320
  msgstr ""
1321
 
1322
- #: includes/class-mla-core-options.php:1317
1323
  msgid "Enable Upload MIME Type Support"
1324
  msgstr ""
1325
 
1326
- #: includes/class-mla-core-options.php:1320
1327
  msgid ""
1328
  "Check/uncheck this option to enable/disable Upload MIME Type Support, then "
1329
  "click <strong>Save Changes</strong> to record the new setting."
1330
  msgstr ""
1331
 
1332
- #: includes/class-mla-core-options.php:1329
1333
  msgid "Upload MIME Types help."
1334
  msgstr ""
1335
 
1336
- #: includes/class-mla-core-options.php:1334
1337
  msgid "Enable MLA File Type Icons Support"
1338
  msgstr ""
1339
 
1340
- #: includes/class-mla-core-options.php:1337
1341
  msgid ""
1342
  "Check/uncheck this option to enable/disable MLA File Type Icons Support, "
1343
  "then click <strong>Save Changes</strong> to record the new setting."
1344
  msgstr ""
1345
 
1346
- #: includes/class-mla-core-options.php:1341
1347
  msgid "Display Limit"
1348
  msgstr ""
1349
 
1350
- #: includes/class-mla-core-options.php:1345
1351
  msgid ""
1352
  "Enter the maximum number of debug log characters to display; enter zero or "
1353
  "leave blank for no limit."
1354
  msgstr ""
1355
 
1356
- #: includes/class-mla-core-options.php:1349
1357
  msgid "Debug File"
1358
  msgstr ""
1359
 
1360
- #: includes/class-mla-core-options.php:1353
1361
  msgid ""
1362
  "Enter the name of an alternate, MLA-specific debug log file; leave blank to "
1363
- "use the PHP error_log."
 
 
1364
  msgstr ""
1365
 
1366
- #: includes/class-mla-core-options.php:1357
1367
  msgid "Replace PHP error_log file"
1368
  msgstr ""
1369
 
1370
- #: includes/class-mla-core-options.php:1360
1371
  msgid ""
1372
  "Check this option to replace the PHP error_log file with the MLA Debug File."
1373
  "<br>&nbsp;&nbsp;allows capture of PHP messages in the MLA Debug File."
1374
  msgstr ""
1375
 
1376
- #: includes/class-mla-core-options.php:1364
1377
  msgid "PHP Reporting"
1378
  msgstr ""
1379
 
1380
- #: includes/class-mla-core-options.php:1368
1381
  msgid ""
1382
  "Enter a numeric error_reporting value, e.g., 0x7FFF or 32767; leave blank to "
1383
  "use the existing PHP error_reporting value."
1384
  msgstr ""
1385
 
1386
- #: includes/class-mla-core-options.php:1372
1387
  msgid "MLA Reporting"
1388
  msgstr ""
1389
 
1390
- #: includes/class-mla-core-options.php:1376
1391
  msgid ""
1392
  "Enter a numeric MLA_DEBUG_LEVEL value, e.g., 0x0003 or 3; leave blank to use "
1393
  "the existing MLA_DEBUG_LEVEL value."
1394
  msgstr ""
1395
 
1396
- #: includes/class-mla-core.php:805
1397
  #, php-format
1398
  msgctxt "error_log"
1399
  msgid "%1$s: mla_load_template file \"%2$s\" not found."
1400
  msgstr ""
1401
 
1402
- #: includes/class-mla-core.php:823
1403
  #, php-format
1404
  msgctxt "error_log"
1405
  msgid "%1$s: mla_load_template file \"%2$s\" bad source type \"%3$s\"."
1406
  msgstr ""
1407
 
1408
- #: includes/class-mla-core.php:1231
1409
  #, php-format
1410
  msgid "%1$s: Bad specification part \"%2$s\""
1411
  msgstr ""
1412
 
1413
- #: includes/class-mla-core.php:1237
1414
  #, php-format
1415
  msgid "%1$s: Bad specification option \"%2$s\""
1416
  msgstr ""
1417
 
1418
- #: includes/class-mla-core.php:1241
1419
  #, php-format
1420
  msgid "%1$s: Bad specification prefix \"%2$s\""
1421
  msgstr ""
1422
 
1423
- #: includes/class-mla-core.php:1341
1424
  msgid "Most Used"
1425
  msgstr ""
1426
 
1427
- #: includes/class-mla-core.php:1370
1428
  #, php-format
1429
  msgid "+ %s"
1430
  msgstr ""
1431
 
1432
- #: includes/class-mla-core.php:1376 includes/class-mla-main.php:1835
1433
- #: includes/class-mla-media-modal.php:607
1434
  #: includes/mla-media-modal-js-template.php:28
1435
  #: includes/mla-media-modal-js-template.php:75
1436
  msgid "Search"
@@ -1483,8 +1549,8 @@ msgstr ""
1483
 
1484
  #: includes/class-mla-data-query.php:294
1485
  #: includes/class-mla-settings-custom-fields-tab.php:1202
1486
- #: includes/class-mla-settings-documentation-tab.php:499
1487
- #: includes/class-mla-settings-iptc-exif-tab.php:1279
1488
  #: includes/class-mla-settings-shortcodes-tab.php:950
1489
  msgctxt "list_table_column"
1490
  msgid "Name"
@@ -1530,16 +1596,16 @@ msgctxt "list_table_column"
1530
  msgid "Caption"
1531
  msgstr ""
1532
 
1533
- #: includes/class-mla-data-query.php:303 includes/class-mla-mime-types.php:559
1534
- #: includes/class-mla-mime-types.php:632 includes/class-mla-mime-types.php:711
1535
- #: includes/class-mla-settings-documentation-tab.php:502
1536
  #: includes/class-mla-settings-shortcodes-tab.php:953
1537
  msgctxt "list_table_column"
1538
  msgid "Description"
1539
  msgstr ""
1540
 
1541
- #: includes/class-mla-data-query.php:304 includes/class-mla-mime-types.php:551
1542
- #: includes/class-mla-mime-types.php:629
1543
  msgctxt "list_table_column"
1544
  msgid "MIME Type"
1545
  msgstr ""
@@ -1574,19 +1640,19 @@ msgctxt "list_table_column"
1574
  msgid "Attached to"
1575
  msgstr ""
1576
 
1577
- #: includes/class-mla-data-query.php:674 includes/class-mla-edit-media.php:316
1578
- #: includes/class-mla-main.php:1829 includes/class-mla-main.php:1904
1579
- #: includes/class-mla-media-modal.php:577 includes/class-mla-mime-types.php:749
1580
- #: includes/class-mla-mime-types.php:1398
1581
- #: includes/class-mla-mime-types.php:2586
1582
  #: includes/class-mla-settings-custom-fields-tab.php:552
1583
  #: includes/class-mla-settings-custom-fields-tab.php:718
1584
  #: includes/class-mla-settings-custom-fields-tab.php:2029
1585
- #: includes/class-mla-settings-documentation-tab.php:297
1586
- #: includes/class-mla-settings-documentation-tab.php:1269
1587
- #: includes/class-mla-settings-iptc-exif-tab.php:632
1588
- #: includes/class-mla-settings-iptc-exif-tab.php:800
1589
- #: includes/class-mla-settings-iptc-exif-tab.php:2260
1590
  #: includes/class-mla-settings-shortcodes-tab.php:503
1591
  #: includes/class-mla-settings-shortcodes-tab.php:1627
1592
  #: includes/class-mla-settings-upload-tab.php:301
@@ -1596,101 +1662,95 @@ msgctxt "error_log"
1596
  msgid "%1$s: %2$s non-array \"%3$s\""
1597
  msgstr ""
1598
 
1599
- #: includes/class-mla-data-query.php:1145
1600
  #, php-format
1601
  msgctxt "error_log"
1602
  msgid "%1$s: _execute_list_table_query $wp_filter = \"%2$s\"."
1603
  msgstr ""
1604
 
1605
- #: includes/class-mla-data-query.php:1145
1606
- #: includes/class-mla-data-query.php:1160
1607
- #: includes/class-mla-data-query.php:1162
1608
- #: includes/class-mla-data-query.php:1645
1609
- #: includes/class-mla-data-query.php:1717
1610
- #: includes/class-mla-data-query.php:1789
1611
- #: includes/class-mla-data-query.php:1886
1612
- #: includes/class-mla-data-query.php:1978
1613
- #: includes/class-mla-data-query.php:1997
1614
  msgid "DEBUG"
1615
  msgstr ""
1616
 
1617
- #: includes/class-mla-data-query.php:1160
1618
  #, php-format
1619
  msgctxt "error_log"
1620
  msgid "%1$s: _execute_list_table_query WP_Query = \"%2$s\"."
1621
  msgstr ""
1622
 
1623
- #: includes/class-mla-data-query.php:1162
1624
  #, php-format
1625
  msgctxt "error_log"
1626
  msgid "%1$s: _execute_list_table_query SQL_request = \"%2$s\"."
1627
  msgstr ""
1628
 
1629
- #: includes/class-mla-data-query.php:1645
1630
  #, php-format
1631
  msgctxt "error_log"
1632
  msgid "%1$s: mla_query_posts_search_filter = \"%2$s\"."
1633
  msgstr ""
1634
 
1635
- #: includes/class-mla-data-query.php:1717
1636
  #, php-format
1637
  msgctxt "error_log"
1638
  msgid "%1$s: mla_query_posts_where_filter = \"%2$s\"."
1639
  msgstr ""
1640
 
1641
- #: includes/class-mla-data-query.php:1789
1642
  #, php-format
1643
  msgctxt "error_log"
1644
  msgid "%1$s: mla_query_posts_join_filter = \"%2$s\"."
1645
  msgstr ""
1646
 
1647
- #: includes/class-mla-data-query.php:1886
1648
  #, php-format
1649
  msgctxt "error_log"
1650
  msgid "%1$s: mla_query_posts_orderby_filter = \"%2$s\"."
1651
  msgstr ""
1652
 
1653
- #: includes/class-mla-data-query.php:1978
1654
  #, php-format
1655
  msgctxt "error_log"
1656
  msgid "%1$s: mla_query_posts_clauses_filter = \"%2$s\"."
1657
  msgstr ""
1658
 
1659
- #: includes/class-mla-data-query.php:1997
1660
  #, php-format
1661
  msgctxt "error_log"
1662
  msgid "%1$s: mla_query_posts_clauses_request_filter = \"%2$s\"."
1663
  msgstr ""
1664
 
1665
- #: includes/class-mla-data-references.php:321
1666
- #: includes/class-mla-data-references.php:664
1667
- #: includes/class-mla-list-table.php:1056
1668
- msgid "NO REFERENCE TESTS"
1669
- msgstr ""
1670
-
1671
- #: includes/class-mla-data-references.php:327
1672
- #: includes/class-mla-data-references.php:670
1673
- #: includes/class-mla-data-source.php:688
1674
- #: includes/class-mla-data-source.php:689
1675
  msgid "ORPHAN"
1676
  msgstr ""
1677
 
1678
- #: includes/class-mla-data-references.php:331
1679
- #: includes/class-mla-data-references.php:674
1680
  msgid "UNUSED"
1681
  msgstr ""
1682
 
1683
- #: includes/class-mla-data-references.php:336
1684
- #: includes/class-mla-data-references.php:679
1685
  msgid "UNATTACHED"
1686
  msgstr ""
1687
 
1688
- #: includes/class-mla-data-references.php:338
1689
- #: includes/class-mla-data-references.php:681
1690
  msgid "INVALID PARENT"
1691
  msgstr ""
1692
 
1693
- #: includes/class-mla-data-references.php:855
1694
  #, php-format
1695
  msgid "(%1$s) %2$s (ID %3$d) query \"%4$s\" failed, returning \"%5$s\""
1696
  msgstr ""
@@ -1737,7 +1797,7 @@ msgctxt "error_log"
1737
  msgid "%1$s: _evaluate_template_node unknown type \"%2$s\"."
1738
  msgstr ""
1739
 
1740
- #: includes/class-mla-data.php:1282
1741
  #, php-format
1742
  msgctxt "error_log"
1743
  msgid ""
@@ -1745,34 +1805,34 @@ msgid ""
1745
  "\"."
1746
  msgstr ""
1747
 
1748
- #: includes/class-mla-data.php:1480
1749
  #, php-format
1750
  msgctxt "error_log"
1751
  msgid "%1$s: mla_get_attachment_by_id(%2$d) not found."
1752
  msgstr ""
1753
 
1754
- #: includes/class-mla-data.php:1486
1755
  #, php-format
1756
  msgctxt "error_log"
1757
  msgid "%1$s: mla_get_attachment_by_id(%2$d) wrong post_type \"%3$s\"."
1758
  msgstr ""
1759
 
1760
- #: includes/class-mla-data.php:1883
1761
  msgctxt "error_log"
1762
  msgid "mla_parse_xmp_metadata xml_parse_into_struct failed."
1763
  msgstr ""
1764
 
1765
- #: includes/class-mla-data.php:1887
1766
  msgctxt "error_log"
1767
  msgid "mla_parse_xmp_metadata set option failed."
1768
  msgstr ""
1769
 
1770
- #: includes/class-mla-data.php:3243
1771
  #: includes/class-mla-settings-custom-fields-tab.php:810
1772
  #: includes/class-mla-settings-custom-fields-tab.php:1515
1773
- #: includes/class-mla-settings-iptc-exif-tab.php:894
1774
- #: includes/class-mla-settings-iptc-exif-tab.php:1622
1775
- #: includes/class-mla-settings-iptc-exif-tab.php:2434
1776
  #: includes/class-mla-settings-view-tab.php:398
1777
  #: includes/class-mla-settings-view-tab.php:799
1778
  #: includes/class-mla-settings-view-tab.php:815
@@ -1780,12 +1840,12 @@ msgstr ""
1780
  msgid "Yes"
1781
  msgstr ""
1782
 
1783
- #: includes/class-mla-data.php:3245
1784
  #: includes/class-mla-settings-custom-fields-tab.php:811
1785
  #: includes/class-mla-settings-custom-fields-tab.php:1517
1786
- #: includes/class-mla-settings-iptc-exif-tab.php:895
1787
- #: includes/class-mla-settings-iptc-exif-tab.php:1624
1788
- #: includes/class-mla-settings-iptc-exif-tab.php:2434
1789
  #: includes/class-mla-settings-view-tab.php:397
1790
  #: includes/class-mla-settings-view-tab.php:801
1791
  #: includes/class-mla-settings-view-tab.php:817
@@ -1793,166 +1853,167 @@ msgstr ""
1793
  msgid "No"
1794
  msgstr ""
1795
 
1796
- #: includes/class-mla-data.php:3493 includes/class-mla-data.php:3610
1797
  #, php-format
1798
  msgid "Deleting %1$s"
1799
  msgstr ""
1800
 
1801
- #: includes/class-mla-data.php:3496
1802
  #, php-format
1803
  msgid "%1$s: meta:%2$s not found"
1804
  msgstr ""
1805
 
1806
- #: includes/class-mla-data.php:3505 includes/class-mla-data.php:3621
1807
- #: includes/class-mla-data.php:3633
1808
  #, php-format
1809
  msgid "Adding %1$s = %2$s"
1810
  msgstr ""
1811
 
1812
- #: includes/class-mla-data.php:3509
1813
  #, php-format
1814
  msgid "%1$s: Adding meta:%2$s; not found"
1815
  msgstr ""
1816
 
1817
- #: includes/class-mla-data.php:3516
1818
  #, php-format
1819
  msgid "Deleting Null meta:%1$s"
1820
  msgstr ""
1821
 
1822
- #: includes/class-mla-data.php:3526 includes/class-mla-data.php:3702
1823
- #: includes/class-mla-data.php:3768 includes/class-mla-data.php:3794
1824
- #: includes/class-mla-data.php:3837 includes/class-mla-data.php:3850
1825
- #: includes/class-mla-data.php:3859 includes/class-mla-data.php:3870
1826
- #: includes/class-mla-data.php:3881 includes/class-mla-data.php:3894
1827
- #: includes/class-mla-data.php:3903 includes/class-mla-data.php:3912
1828
- #: includes/class-mla-mime-types.php:1232
1829
- #: includes/class-mla-mime-types.php:2350
 
1830
  #, php-format
1831
  msgid "Changing %1$s from \"%2$s\" to \"%3$s\""
1832
  msgstr ""
1833
 
1834
- #: includes/class-mla-data.php:3531
1835
  #, php-format
1836
  msgid "%1$s: Changing meta:%2$s; not found"
1837
  msgstr ""
1838
 
1839
- #: includes/class-mla-data.php:3657
1840
  #, php-format
1841
  msgid "Deleting old %1$s values"
1842
  msgstr ""
1843
 
1844
- #: includes/class-mla-data.php:3687
1845
  #, php-format
1846
  msgid "Changing %1$s from \"%2$s\" to \"%3$s\"; %4$d updates"
1847
  msgstr ""
1848
 
1849
- #: includes/class-mla-data.php:3745
1850
  msgid "Could not retrieve Attachment."
1851
  msgstr ""
1852
 
1853
- #: includes/class-mla-data.php:3791
1854
  #, php-format
1855
  msgid "%1$s: Could not change Name/Slug \"%2$s\"; name already exists"
1856
  msgstr ""
1857
 
1858
- #: includes/class-mla-data.php:3821
1859
  #, php-format
1860
  msgid "Deleting ALT Text, was \"%1$s\""
1861
  msgstr ""
1862
 
1863
- #: includes/class-mla-data.php:3824
1864
  #, php-format
1865
  msgid "%1$s: Could not delete ALT Text, remains \"%2$s\""
1866
  msgstr ""
1867
 
1868
- #: includes/class-mla-data.php:3840
1869
  #, php-format
1870
  msgid "%1$s: Could not change ALT Text from \"%2$s\" to \"%3$s\""
1871
  msgstr ""
1872
 
1873
- #: includes/class-mla-data.php:3870 includes/class-mla-list-table.php:1033
1874
- #: includes/class-mla-list-table.php:1036
1875
- #: includes/class-mla-list-table.php:1039
1876
- #: includes/class-mla-list-table.php:1107 includes/class-mla-options.php:1993
1877
- #: includes/class-mla-settings-iptc-exif-tab.php:485
1878
- #: includes/class-mla-settings-iptc-exif-tab.php:864
1879
  msgid "Parent"
1880
  msgstr ""
1881
 
1882
- #: includes/class-mla-data.php:3881 includes/class-mla-edit-media.php:667
1883
- #: includes/class-mla-edit-media.php:870 includes/class-mla-main.php:2051
1884
  #: includes/class-mla-settings-view-tab.php:130
1885
  #: includes/class-mla-settings-view-tab.php:386
1886
  msgid "Menu Order"
1887
  msgstr ""
1888
 
1889
- #: includes/class-mla-data.php:3894 includes/class-mla-edit-media.php:395
1890
- #: includes/class-mla-list-table.php:1487
1891
- #: includes/class-mla-list-table.php:1490 includes/class-mla-main.php:1910
1892
- #: includes/class-mla-main.php:2012
1893
  msgid "Author"
1894
  msgstr ""
1895
 
1896
- #: includes/class-mla-data.php:3903 includes/class-mla-edit-media.php:420
1897
- #: includes/class-mla-main.php:2063
1898
  msgid "Comments"
1899
  msgstr ""
1900
 
1901
- #: includes/class-mla-data.php:3912 includes/class-mla-edit-media.php:421
1902
- #: includes/class-mla-main.php:2064
1903
  msgid "Pings"
1904
  msgstr ""
1905
 
1906
- #: includes/class-mla-data.php:3939
1907
  #, php-format
1908
  msgid "You cannot assign \"%1$s\" terms"
1909
  msgstr ""
1910
 
1911
- #: includes/class-mla-data.php:3951
1912
  msgctxt "tag delimiter"
1913
  msgid ","
1914
  msgstr ""
1915
 
1916
- #: includes/class-mla-data.php:3984
1917
  msgid "Adding"
1918
  msgstr ""
1919
 
1920
- #: includes/class-mla-data.php:3989
1921
  msgid "Removing"
1922
  msgstr ""
1923
 
1924
- #: includes/class-mla-data.php:3998
1925
  msgid "Replacing"
1926
  msgstr ""
1927
 
1928
- #: includes/class-mla-data.php:4006
1929
  msgid "Ignoring"
1930
  msgstr ""
1931
 
1932
- #: includes/class-mla-data.php:4019
1933
  #, php-format
1934
  msgid "%1$s \"%2$s\" terms"
1935
  msgstr ""
1936
 
1937
- #: includes/class-mla-data.php:4031 includes/class-mla-main.php:1211
1938
  #, php-format
1939
  msgid "Item %1$d, no changes detected."
1940
  msgstr ""
1941
 
1942
- #: includes/class-mla-data.php:4052
1943
  #, php-format
1944
  msgid "Item %1$d updated."
1945
  msgstr ""
1946
 
1947
- #: includes/class-mla-data.php:4066
1948
  #, php-format
1949
  msgid "%1$s: Item %2$d update failed."
1950
  msgstr ""
1951
 
1952
  #: includes/class-mla-edit-media.php:133 includes/class-mla-edit-media.php:184
1953
- #: includes/class-mla-edit-media.php:237 includes/class-mla-main.php:411
1954
- #: includes/class-mla-main.php:970 includes/class-mla-main.php:1720
1955
- #: includes/class-mla-media-modal.php:236 includes/class-mla-options.php:1498
1956
  #: includes/class-mla-polylang-support.php:367
1957
  #: includes/class-mla-settings-custom-fields-tab.php:59
1958
  #: includes/class-mla-settings-custom-fields-tab.php:94
@@ -1969,7 +2030,7 @@ msgstr ""
1969
  msgid "Upload New Media items"
1970
  msgstr ""
1971
 
1972
- #: includes/class-mla-edit-media.php:180 includes/class-mla-edit-media.php:415
1973
  msgid "Open Bulk Edit area"
1974
  msgstr ""
1975
 
@@ -1978,200 +2039,275 @@ msgid "Close Bulk Edit area"
1978
  msgstr ""
1979
 
1980
  #: includes/class-mla-edit-media.php:185 includes/class-mla-edit-media.php:239
1981
- #: includes/class-mla-main.php:398
1982
  msgid "An ajax.fail error has occurred. Please reload the page and try again."
1983
  msgstr ""
1984
 
1985
  #: includes/class-mla-edit-media.php:186 includes/class-mla-edit-media.php:240
1986
- #: includes/class-mla-main.php:399
1987
  msgid "An ajax.done error has occurred. Please reload the page and try again."
1988
  msgstr ""
1989
 
1990
- #: includes/class-mla-edit-media.php:338 includes/class-mla-main.php:1945
 
 
 
 
 
 
 
 
 
1991
  msgid "more"
1992
  msgstr ""
1993
 
1994
- #: includes/class-mla-edit-media.php:339 includes/class-mla-main.php:1946
1995
  msgid "less"
1996
  msgstr ""
1997
 
1998
- #: includes/class-mla-edit-media.php:342 includes/class-mla-edit-media.php:373
1999
- #: includes/class-mla-main.php:1949 includes/class-mla-main.php:1987
2000
  msgid "Add"
2001
  msgstr ""
2002
 
2003
- #: includes/class-mla-edit-media.php:343 includes/class-mla-edit-media.php:374
2004
- #: includes/class-mla-main.php:1950 includes/class-mla-main.php:1988
2005
  msgid "Remove"
2006
  msgstr ""
2007
 
2008
- #: includes/class-mla-edit-media.php:344 includes/class-mla-edit-media.php:375
2009
- #: includes/class-mla-main.php:1951 includes/class-mla-main.php:1989
2010
  #: includes/class-mla-settings-custom-fields-tab.php:481
2011
  #: includes/class-mla-settings-custom-fields-tab.php:781
2012
  #: includes/class-mla-settings-custom-fields-tab.php:1501
2013
- #: includes/class-mla-settings-iptc-exif-tab.php:479
2014
- #: includes/class-mla-settings-iptc-exif-tab.php:861
2015
- #: includes/class-mla-settings-iptc-exif-tab.php:1563
2016
- #: includes/class-mla-settings-iptc-exif-tab.php:2415
2017
  msgid "Replace"
2018
  msgstr ""
2019
 
2020
- #: includes/class-mla-edit-media.php:414
2021
  msgid ""
2022
  "IMPORTANT: Make your entries BEFORE uploading new items. Pull down the Help "
2023
  "menu for more information."
2024
  msgstr ""
2025
 
2026
- #: includes/class-mla-edit-media.php:416 includes/class-mla-main.php:2057
2027
- #: includes/class-mla-settings.php:1401
2028
  msgid "Reset"
2029
  msgstr ""
2030
 
2031
- #: includes/class-mla-edit-media.php:422 includes/class-mla-main.php:2065
2032
- #: includes/class-mla-main.php:2121
2033
  #: includes/class-mla-settings-custom-fields-tab.php:809
2034
- #: includes/class-mla-settings-iptc-exif-tab.php:893
2035
  #: includes/class-mla-settings-upload-tab.php:122
2036
  #: includes/class-mla-settings-upload-tab.php:553
2037
  #: includes/class-mla-settings-view-tab.php:396
2038
  msgid "No Change"
2039
  msgstr ""
2040
 
2041
- #: includes/class-mla-edit-media.php:423 includes/class-mla-main.php:2066
2042
  msgid "Allow"
2043
  msgstr ""
2044
 
2045
- #: includes/class-mla-edit-media.php:424 includes/class-mla-main.php:2067
2046
  msgid "Do not allow"
2047
  msgstr ""
2048
 
2049
- #: includes/class-mla-edit-media.php:431 includes/class-mla-list-table.php:1033
2050
- #: includes/class-mla-list-table.php:1104 includes/class-mla-main.php:2049
2051
  msgid "Parent ID"
2052
  msgstr ""
2053
 
2054
- #: includes/class-mla-edit-media.php:432 includes/class-mla-edit-media.php:850
2055
- #: includes/class-mla-main.php:2050
2056
  #: includes/class-mla-settings-upload-tab.php:1469
2057
  msgid "Select"
2058
  msgstr ""
2059
 
2060
- #: includes/class-mla-edit-media.php:518
2061
  msgid "Custom field mapping updated."
2062
  msgstr ""
2063
 
2064
- #: includes/class-mla-edit-media.php:519
2065
  msgid "IPTC/EXIF mapping updated."
2066
  msgstr ""
2067
 
2068
- #: includes/class-mla-edit-media.php:520
2069
  msgid "Custom field mapping is disabled."
2070
  msgstr ""
2071
 
2072
- #: includes/class-mla-edit-media.php:521
2073
  msgid "IPTC/EXIF mapping is disabled."
2074
  msgstr ""
2075
 
2076
- #: includes/class-mla-edit-media.php:539
2077
- msgid "M j, Y @ G:i"
2078
  msgstr ""
2079
 
2080
- #: includes/class-mla-edit-media.php:541
2081
- msgid "Last modified"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2082
  msgstr ""
2083
 
2084
- #: includes/class-mla-edit-media.php:563
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2085
  msgid "Map Custom Field metadata for this item"
2086
  msgstr ""
2087
 
2088
- #: includes/class-mla-edit-media.php:563 includes/class-mla-main.php:1631
2089
- #: includes/class-mla-main.php:2072
2090
  msgid "Map Custom Field metadata"
2091
  msgstr ""
2092
 
2093
- #: includes/class-mla-edit-media.php:567
2094
  msgid "Map IPTC/EXIF metadata for this item"
2095
  msgstr ""
2096
 
2097
- #: includes/class-mla-edit-media.php:567 includes/class-mla-main.php:1634
2098
- #: includes/class-mla-main.php:2070
2099
  msgid "Map IPTC/EXIF metadata"
2100
  msgstr ""
2101
 
2102
- #: includes/class-mla-edit-media.php:663 includes/class-mla-edit-media.php:851
2103
  msgid "Parent Info"
2104
  msgstr ""
2105
 
2106
- #: includes/class-mla-edit-media.php:673 includes/class-mla-edit-media.php:894
2107
  msgid "Attachment Metadata"
2108
  msgstr ""
2109
 
2110
- #: includes/class-mla-edit-media.php:743 includes/class-mla-edit-media.php:783
2111
- #: includes/class-mla-main.php:635 includes/class-mla-settings.php:589
2112
  #, php-format
2113
  msgctxt "error_log"
2114
  msgid "%1$s: %2$s discarding \"%3$s\"; no title/order"
2115
  msgstr ""
2116
 
2117
- #: includes/class-mla-edit-media.php:832 includes/class-mla-list-table.php:634
2118
- msgctxt "post state"
2119
- msgid "Pending"
2120
- msgstr ""
2121
-
2122
- #: includes/class-mla-edit-media.php:849
2123
  msgid "Post Parent"
2124
  msgstr ""
2125
 
2126
- #: includes/class-mla-edit-media.php:850 includes/class-mla-main.php:1834
2127
  msgid "Select Parent"
2128
  msgstr ""
2129
 
2130
- #: includes/class-mla-edit-media.php:917 includes/class-mla-edit-media.php:955
2131
- #: includes/class-mla-edit-media.php:991 includes/class-mla-edit-media.php:1026
2132
- #: includes/class-mla-list-table.php:1154
2133
- #: includes/class-mla-list-table.php:1203
2134
- #: includes/class-mla-list-table.php:1249
2135
- #: includes/class-mla-list-table.php:1294
2136
- msgid "PARENT"
2137
- msgstr ""
2138
-
2139
  #: includes/class-mla-list-table.php:181 includes/class-mla-list-table.php:217
2140
  msgid "All"
2141
  msgstr ""
2142
 
2143
- #: includes/class-mla-list-table.php:219
2144
  msgctxt "show_option_none"
2145
  msgid "No"
2146
  msgstr ""
2147
 
2148
- #: includes/class-mla-list-table.php:425
2149
  #: includes/class-mla-settings-custom-fields-tab.php:997
2150
- #: includes/class-mla-settings-iptc-exif-tab.php:1070
2151
  #: includes/class-mla-settings-upload-tab.php:647
2152
  #: includes/class-mla-settings-view-tab.php:490
2153
  msgid "List View"
2154
  msgstr ""
2155
 
2156
- #: includes/class-mla-list-table.php:492 includes/class-mla-list-table.php:544
2157
- #: includes/class-mla-list-table.php:1033
2158
- #: includes/class-mla-list-table.php:1104
2159
- #: includes/class-mla-list-table.php:1327
2160
- #: includes/class-mla-list-table.php:1371
2161
- #: includes/class-mla-list-table.php:1403
2162
- #: includes/class-mla-list-table.php:1487
2163
  msgid "Filter by"
2164
  msgstr ""
2165
 
2166
- #: includes/class-mla-list-table.php:502
2167
  #: includes/class-mla-media-modal-ajax.php:490
2168
  msgid "Not Supported"
2169
  msgstr ""
2170
 
2171
- #: includes/class-mla-list-table.php:564
2172
  #: includes/class-mla-settings-custom-fields-tab.php:1291
2173
- #: includes/class-mla-settings-documentation-tab.php:584
2174
- #: includes/class-mla-settings-iptc-exif-tab.php:1370
2175
  #: includes/class-mla-settings-shortcodes-tab.php:1023
2176
  #: includes/class-mla-settings-upload-tab.php:858
2177
  #: includes/class-mla-settings-upload-tab.php:1416
@@ -2180,92 +2316,67 @@ msgstr ""
2180
  msgid "column_default: %1$s, %2$s"
2181
  msgstr ""
2182
 
2183
- #: includes/class-mla-list-table.php:612 includes/class-mla-list-table.php:740
2184
- #: includes/class-mla-list-table.php:987 includes/class-mla-list-table.php:1159
2185
- #: includes/class-mla-list-table.php:1208
2186
- #: includes/class-mla-list-table.php:1254
2187
- #: includes/class-mla-list-table.php:1299
2188
- #: includes/class-mla-list-table.php:1521
2189
- #: includes/class-mla-list-table.php:1847
2190
- #: includes/class-mla-polylang-support.php:366
2191
- #: includes/class-mla-settings-custom-fields-tab.php:1344
2192
- #: includes/class-mla-settings-custom-fields-tab.php:1683
2193
- #: includes/class-mla-settings-iptc-exif-tab.php:1423
2194
- #: includes/class-mla-settings-iptc-exif-tab.php:1790
2195
- #: includes/class-mla-settings-shortcodes-tab.php:1071
2196
- #: includes/class-mla-settings-upload-tab.php:923
2197
- #: includes/class-mla-settings-upload-tab.php:1212
2198
- #: includes/class-mla-settings-view-tab.php:720
2199
- #: includes/class-mla-settings-view-tab.php:922
2200
- msgid "Edit"
2201
- msgstr ""
2202
-
2203
- #: includes/class-mla-list-table.php:637
2204
- #: includes/class-mla-thumbnail-generation.php:633
2205
- msgid "Trash"
2206
- msgstr ""
2207
-
2208
- #: includes/class-mla-list-table.php:727
2209
  msgid "Restore this item from the Trash"
2210
  msgstr ""
2211
 
2212
- #: includes/class-mla-list-table.php:727 includes/class-mla-list-table.php:1844
2213
  msgid "Restore"
2214
  msgstr ""
2215
 
2216
- #: includes/class-mla-list-table.php:740
2217
  #: includes/class-mla-settings-custom-fields-tab.php:1344
2218
- #: includes/class-mla-settings-iptc-exif-tab.php:1423
2219
  #: includes/class-mla-settings-shortcodes-tab.php:1071
2220
  #: includes/class-mla-settings-upload-tab.php:923
2221
  #: includes/class-mla-settings-view-tab.php:720
2222
  msgid "Edit this item"
2223
  msgstr ""
2224
 
2225
- #: includes/class-mla-list-table.php:741
2226
  #: includes/class-mla-settings-custom-fields-tab.php:1347
2227
- #: includes/class-mla-settings-iptc-exif-tab.php:1426
2228
  #: includes/class-mla-settings-upload-tab.php:925
2229
  #: includes/class-mla-settings-view-tab.php:722
2230
  msgid "Edit this item inline"
2231
  msgstr ""
2232
 
2233
- #: includes/class-mla-list-table.php:741 includes/class-mla-main.php:2042
2234
- #: includes/class-mla-options.php:1126
2235
  #: includes/class-mla-settings-custom-fields-tab.php:472
2236
  #: includes/class-mla-settings-custom-fields-tab.php:772
2237
  #: includes/class-mla-settings-custom-fields-tab.php:1347
2238
  #: includes/class-mla-settings-custom-fields-tab.php:1457
2239
- #: includes/class-mla-settings-iptc-exif-tab.php:840
2240
- #: includes/class-mla-settings-iptc-exif-tab.php:1426
2241
  #: includes/class-mla-settings-upload-tab.php:925
2242
  #: includes/class-mla-settings-view-tab.php:722
2243
  msgid "Quick Edit"
2244
  msgstr ""
2245
 
2246
- #: includes/class-mla-list-table.php:747
2247
  msgid "Move this item to the Trash"
2248
  msgstr ""
2249
 
2250
- #: includes/class-mla-list-table.php:747 includes/class-mla-list-table.php:1850
2251
  msgid "Move to Trash"
2252
  msgstr ""
2253
 
2254
- #: includes/class-mla-list-table.php:752
2255
  #: includes/class-mla-settings-custom-fields-tab.php:1355
2256
- #: includes/class-mla-settings-iptc-exif-tab.php:1436
2257
  #: includes/class-mla-settings-shortcodes-tab.php:1077
2258
  #: includes/class-mla-settings-upload-tab.php:929
2259
  #: includes/class-mla-settings-view-tab.php:728
2260
  msgid "Delete this item Permanently"
2261
  msgstr ""
2262
 
2263
- #: includes/class-mla-list-table.php:752 includes/class-mla-list-table.php:1845
2264
- #: includes/class-mla-list-table.php:1852
2265
  #: includes/class-mla-settings-custom-fields-tab.php:1355
2266
  #: includes/class-mla-settings-custom-fields-tab.php:1684
2267
- #: includes/class-mla-settings-iptc-exif-tab.php:1436
2268
- #: includes/class-mla-settings-iptc-exif-tab.php:1791
2269
  #: includes/class-mla-settings-shortcodes-tab.php:1077
2270
  #: includes/class-mla-settings-upload-tab.php:929
2271
  #: includes/class-mla-settings-view-tab.php:728
@@ -2273,96 +2384,92 @@ msgstr ""
2273
  msgid "Delete Permanently"
2274
  msgstr ""
2275
 
2276
- #: includes/class-mla-list-table.php:760
2277
- #: includes/class-mla-settings-documentation-tab.php:654
2278
- #: includes/class-mla-settings.php:1391
2279
  msgid "Download"
2280
  msgstr ""
2281
 
2282
- #: includes/class-mla-list-table.php:762
2283
- #: includes/class-mla-settings-documentation-tab.php:657
2284
  #: includes/class-mla-settings-shortcodes-tab.php:1069
2285
  #: includes/class-mla-settings-view-tab.php:374
2286
  msgid "View"
2287
  msgstr ""
2288
 
2289
- #: includes/class-mla-list-table.php:1003
2290
  msgid "File name"
2291
  msgstr ""
2292
 
2293
- #: includes/class-mla-list-table.php:1101
2294
  msgid "(no title: bad ID)"
2295
  msgstr ""
2296
 
2297
- #: includes/class-mla-list-table.php:1374
2298
  #: includes/class-mla-settings-upload-tab.php:167
2299
  #: includes/class-mla-settings-upload-tab.php:536
2300
  msgid "MIME Type"
2301
  msgstr ""
2302
 
2303
- #: includes/class-mla-list-table.php:1407
2304
  msgid "Base File"
2305
  msgstr ""
2306
 
2307
- #: includes/class-mla-list-table.php:1423
2308
- #: includes/class-mla-list-table.php:1456
2309
  msgid "Unpublished"
2310
  msgstr ""
2311
 
2312
- #: includes/class-mla-list-table.php:1432
2313
- #: includes/class-mla-list-table.php:1463
2314
  #, php-format
2315
  msgid "%1$s from now"
2316
  msgstr ""
2317
 
2318
- #: includes/class-mla-list-table.php:1435
2319
- #: includes/class-mla-list-table.php:1465
2320
  #, php-format
2321
  msgid "%1$s ago"
2322
  msgstr ""
2323
 
2324
- #: includes/class-mla-list-table.php:1528
2325
- msgid "(Private post)"
2326
- msgstr ""
2327
-
2328
- #: includes/class-mla-list-table.php:1549
2329
  msgid "Set Parent"
2330
  msgstr ""
2331
 
2332
- #: includes/class-mla-list-table.php:1699
2333
  msgctxt "uploaded files"
2334
  msgid "All"
2335
  msgid_plural "All"
2336
  msgstr[0] ""
2337
  msgstr[1] ""
2338
 
2339
- #: includes/class-mla-list-table.php:1944
2340
  #: includes/class-mla-settings-custom-fields-tab.php:1749
2341
- #: includes/class-mla-settings-iptc-exif-tab.php:1856
2342
  #: includes/class-mla-settings-shortcodes-tab.php:1345
2343
  msgid "Filter"
2344
  msgstr ""
2345
 
2346
- #: includes/class-mla-list-table.php:1947
2347
  #: includes/mla-media-modal-js-template.php:72
2348
  msgid "Terms Search"
2349
  msgstr ""
2350
 
2351
- #: includes/class-mla-list-table.php:1952
2352
- #: includes/class-mla-polylang-support.php:2050
2353
- #: includes/class-mla-thumbnail-generation.php:638
2354
  msgid "Clear Filter-by"
2355
  msgstr ""
2356
 
2357
- #: includes/class-mla-list-table.php:1955
2358
  msgid "Empty Trash"
2359
  msgstr ""
2360
 
2361
- #: includes/class-mla-main.php:400
2362
  msgid "Error while saving the changes."
2363
  msgstr ""
2364
 
2365
- #: includes/class-mla-main.php:401
2366
  #: includes/class-mla-settings-custom-fields-tab.php:57
2367
  #: includes/class-mla-settings-custom-fields-tab.php:92
2368
  #: includes/class-mla-settings-iptc-exif-tab.php:57
@@ -2372,77 +2479,85 @@ msgstr ""
2372
  msgid "Remove From Bulk Edit"
2373
  msgstr ""
2374
 
2375
- #: includes/class-mla-main.php:403
2376
  msgid "Bulk Edit items"
2377
  msgstr ""
2378
 
2379
- #: includes/class-mla-main.php:404 includes/class-mla-main.php:2073
2380
  #: includes/class-mla-settings-custom-fields-tab.php:63
2381
  #: includes/class-mla-settings-iptc-exif-tab.php:63
2382
  msgid "Waiting"
2383
  msgstr ""
2384
 
2385
- #: includes/class-mla-main.php:405 includes/class-mla-main.php:2075
2386
  #: includes/class-mla-settings-custom-fields-tab.php:65
2387
  #: includes/class-mla-settings-iptc-exif-tab.php:65
2388
  msgid "Complete"
2389
  msgstr ""
2390
 
2391
- #: includes/class-mla-main.php:406
2392
  #: includes/class-mla-settings-custom-fields-tab.php:66
2393
  #: includes/class-mla-settings-iptc-exif-tab.php:66
2394
  msgid "Unchanged"
2395
  msgstr ""
2396
 
2397
- #: includes/class-mla-main.php:407
2398
  #: includes/class-mla-settings-custom-fields-tab.php:67
2399
  #: includes/class-mla-settings-iptc-exif-tab.php:67
2400
  msgid "Succeeded"
2401
  msgstr ""
2402
 
2403
- #: includes/class-mla-main.php:408
2404
  #: includes/class-mla-settings-custom-fields-tab.php:68
2405
  #: includes/class-mla-settings-iptc-exif-tab.php:68
2406
  msgid "Failed"
2407
  msgstr ""
2408
 
2409
- #: includes/class-mla-main.php:409
2410
  msgid "CANCELED"
2411
  msgstr ""
2412
 
2413
- #: includes/class-mla-main.php:524
2414
  #, php-format
2415
  msgid "Item permanently deleted."
2416
  msgid_plural "%d items permanently deleted."
2417
  msgstr[0] ""
2418
  msgstr[1] ""
2419
 
2420
- #: includes/class-mla-main.php:529 includes/class-mla-main.php:2260
2421
  #, php-format
2422
  msgid "Item %1$d moved to Trash."
2423
  msgstr ""
2424
 
2425
- #: includes/class-mla-main.php:548
2426
- msgid "Entries per page"
 
 
 
 
2427
  msgstr ""
2428
 
2429
- #: includes/class-mla-main.php:1145
 
 
 
 
2430
  msgid "You are not allowed to edit Attachment: "
2431
  msgstr ""
2432
 
2433
- #: includes/class-mla-main.php:1201
2434
  #, php-format
2435
  msgid "%1$s: Unknown bulk action %2$s"
2436
  msgstr ""
2437
 
2438
- #: includes/class-mla-main.php:1223
2439
  msgid "no changes detected"
2440
  msgstr ""
2441
 
2442
- #: includes/class-mla-main.php:1270
2443
  #: includes/class-mla-settings-custom-fields-tab.php:607
2444
- #: includes/class-mla-settings-documentation-tab.php:247
2445
- #: includes/class-mla-settings-iptc-exif-tab.php:687
2446
  #: includes/class-mla-settings-shortcodes-tab.php:564
2447
  #: includes/class-mla-settings-upload-tab.php:411
2448
  #: includes/class-mla-settings-view-tab.php:254
@@ -2450,11 +2565,11 @@ msgstr ""
2450
  msgid "Bulk Action %1$s - no items selected."
2451
  msgstr ""
2452
 
2453
- #: includes/class-mla-main.php:1354
2454
  msgid "You do not have permission to manage attachments."
2455
  msgstr ""
2456
 
2457
- #: includes/class-mla-main.php:1416
2458
  #, php-format
2459
  msgctxt "deleted items"
2460
  msgid "%s item deleted."
@@ -2462,18 +2577,18 @@ msgid_plural "%s items deleted."
2462
  msgstr[0] ""
2463
  msgstr[1] ""
2464
 
2465
- #: includes/class-mla-main.php:1418
2466
  msgid "No items deleted."
2467
  msgstr ""
2468
 
2469
- #: includes/class-mla-main.php:1472
2470
  msgid "Empty Terms Search; ignored"
2471
  msgstr ""
2472
 
2473
- #: includes/class-mla-main.php:1484
2474
  #: includes/class-mla-settings-custom-fields-tab.php:634
2475
- #: includes/class-mla-settings-documentation-tab.php:281
2476
- #: includes/class-mla-settings-iptc-exif-tab.php:716
2477
  #: includes/class-mla-settings-shortcodes-tab.php:593
2478
  #: includes/class-mla-settings-upload-tab.php:450
2479
  #: includes/class-mla-settings-view-tab.php:291
@@ -2481,26 +2596,26 @@ msgstr ""
2481
  msgid "Unknown mla_admin_action - \"%1$s\""
2482
  msgstr ""
2483
 
2484
- #: includes/class-mla-main.php:1517
2485
  msgid "term search results for"
2486
  msgstr ""
2487
 
2488
- #: includes/class-mla-main.php:1520
2489
  msgid "post/parent results for"
2490
  msgstr ""
2491
 
2492
- #: includes/class-mla-main.php:1522
2493
  msgid "search results for"
2494
  msgstr ""
2495
 
2496
- #: includes/class-mla-main.php:1637 includes/class-mla-main.php:1856
2497
- #: includes/class-mla-main.php:2058
2498
  #: includes/class-mla-settings-custom-fields-tab.php:511
2499
  #: includes/class-mla-settings-custom-fields-tab.php:813
2500
- #: includes/class-mla-settings-documentation-tab.php:644
2501
- #: includes/class-mla-settings-documentation-tab.php:852
2502
- #: includes/class-mla-settings-iptc-exif-tab.php:520
2503
- #: includes/class-mla-settings-iptc-exif-tab.php:897
2504
  #: includes/class-mla-settings-shortcodes-tab.php:479
2505
  #: includes/class-mla-settings-upload-tab.php:176
2506
  #: includes/class-mla-settings-upload-tab.php:550
@@ -2509,86 +2624,66 @@ msgstr ""
2509
  msgid "Update"
2510
  msgstr ""
2511
 
2512
- #: includes/class-mla-main.php:1791
2513
  msgid "All Post Types"
2514
  msgstr ""
2515
 
2516
- #: includes/class-mla-main.php:1837
2517
  msgid "For"
2518
  msgstr ""
2519
 
2520
- #: includes/class-mla-main.php:1847
2521
  #: includes/class-mla-shortcode-support.php:1036
2522
  msgid "Unattached"
2523
  msgstr ""
2524
 
2525
- #: includes/class-mla-main.php:1852 includes/class-mla-main.php:2056
2526
- #: includes/class-mla-polylang-support.php:2043
2527
- #: includes/class-mla-settings-custom-fields-tab.php:509
2528
- #: includes/class-mla-settings-custom-fields-tab.php:730
2529
- #: includes/class-mla-settings-custom-fields-tab.php:812
2530
- #: includes/class-mla-settings-documentation-tab.php:167
2531
- #: includes/class-mla-settings-iptc-exif-tab.php:518
2532
- #: includes/class-mla-settings-iptc-exif-tab.php:812
2533
- #: includes/class-mla-settings-iptc-exif-tab.php:896
2534
- #: includes/class-mla-settings-shortcodes-tab.php:405
2535
- #: includes/class-mla-settings-shortcodes-tab.php:476
2536
- #: includes/class-mla-settings-upload-tab.php:177
2537
- #: includes/class-mla-settings-upload-tab.php:251
2538
- #: includes/class-mla-settings-upload-tab.php:549
2539
- #: includes/class-mla-settings-view-tab.php:135
2540
- #: includes/class-mla-settings-view-tab.php:393
2541
- #: includes/class-mla-thumbnail-generation.php:639
2542
- msgid "Cancel"
2543
- msgstr ""
2544
-
2545
- #: includes/class-mla-main.php:2059 includes/class-mla-options.php:1140
2546
  #: includes/class-mla-settings-custom-fields-tab.php:475
2547
  #: includes/class-mla-settings-custom-fields-tab.php:775
2548
  #: includes/class-mla-settings-custom-fields-tab.php:1461
2549
- #: includes/class-mla-settings-iptc-exif-tab.php:841
2550
  #: includes/class-mla-settings-upload-tab.php:551
2551
  #: includes/class-mla-settings-view-tab.php:395
2552
  msgid "Bulk Edit"
2553
  msgstr ""
2554
 
2555
- #: includes/class-mla-main.php:2074
2556
  msgid "In-process"
2557
  msgstr ""
2558
 
2559
- #: includes/class-mla-main.php:2173
2560
  msgid "You are not allowed to delete this item."
2561
  msgstr ""
2562
 
2563
- #: includes/class-mla-main.php:2181
2564
  #, php-format
2565
  msgid "%1$s: Item %2$d could NOT be deleted."
2566
  msgstr ""
2567
 
2568
- #: includes/class-mla-main.php:2188
2569
  #, php-format
2570
  msgid "Item %1$d permanently deleted."
2571
  msgstr ""
2572
 
2573
- #: includes/class-mla-main.php:2205
2574
  msgid "You are not allowed to move this item out of the Trash."
2575
  msgstr ""
2576
 
2577
- #: includes/class-mla-main.php:2213
2578
  #, php-format
2579
  msgid "%1$s: Item %2$d could NOT be restored from Trash."
2580
  msgstr ""
2581
 
2582
- #: includes/class-mla-main.php:2228
2583
  #, php-format
2584
  msgid "Item %1$d restored from Trash."
2585
  msgstr ""
2586
 
2587
- #: includes/class-mla-main.php:2245
2588
  msgid "You are not allowed to move this item to the Trash."
2589
  msgstr ""
2590
 
2591
- #: includes/class-mla-main.php:2253
2592
  #, php-format
2593
  msgid "%1$s: Item %2$d could NOT be moved to Trash."
2594
  msgstr ""
@@ -2606,7 +2701,7 @@ msgid "Tags"
2606
  msgstr ""
2607
 
2608
  #: includes/class-mla-media-modal-ajax.php:452
2609
- #: includes/class-mla-objects.php:50 includes/class-mla-objects.php:82
2610
  #: includes/class-mla-settings-upload-tab.php:532
2611
  #: includes/class-mla-settings-view-tab.php:374
2612
  #, php-format
@@ -2617,330 +2712,330 @@ msgstr ""
2617
  msgid "Choose from the most used tags"
2618
  msgstr ""
2619
 
2620
- #: includes/class-mla-media-modal.php:106
2621
  msgid "Show all dates"
2622
  msgstr ""
2623
 
2624
- #: includes/class-mla-media-modal.php:121
2625
  #, php-format
2626
  msgid "%1$s %2$d"
2627
  msgstr ""
2628
 
2629
- #: includes/class-mla-media-modal.php:361
2630
  msgid "Search Box"
2631
  msgstr ""
2632
 
2633
- #: includes/class-mla-media-modal.php:362
2634
  msgid "Loading..."
2635
  msgstr ""
2636
 
2637
- #: includes/class-mla-media-modal.php:590
2638
- #: includes/class-mla-media-modal.php:606
2639
  msgid "Search Terms"
2640
  msgstr ""
2641
 
2642
- #: includes/class-mla-media-modal.php:591
2643
  msgid "There are no taxonomies to search"
2644
  msgstr ""
2645
 
2646
- #: includes/class-mla-media-modal.php:609
2647
  msgid "All phrases"
2648
  msgstr ""
2649
 
2650
- #: includes/class-mla-media-modal.php:611
2651
  msgid "Any phrase"
2652
  msgstr ""
2653
 
2654
- #: includes/class-mla-media-modal.php:613
2655
  msgid "All terms"
2656
  msgstr ""
2657
 
2658
- #: includes/class-mla-media-modal.php:615
2659
  msgid "Any term"
2660
  msgstr ""
2661
 
2662
- #: includes/class-mla-media-modal.php:617
2663
  msgid "Exact"
2664
  msgstr ""
2665
 
2666
- #: includes/class-mla-mime-types.php:398
2667
  msgctxt "post_mime_types"
2668
  msgid "Manage"
2669
  msgstr ""
2670
 
2671
- #: includes/class-mla-mime-types.php:550 includes/class-mla-mime-types.php:628
2672
  msgctxt "list_table_column"
2673
  msgid "Extension"
2674
  msgstr ""
2675
 
2676
- #: includes/class-mla-mime-types.php:552
2677
  msgctxt "list_table_column"
2678
  msgid "Icon Type"
2679
  msgstr ""
2680
 
2681
- #: includes/class-mla-mime-types.php:553
2682
  #: includes/class-mla-settings-custom-fields-tab.php:1204
2683
  msgctxt "list_table_column"
2684
  msgid "Source"
2685
  msgstr ""
2686
 
2687
- #: includes/class-mla-mime-types.php:554
2688
  #: includes/class-mla-settings-custom-fields-tab.php:1207
2689
- #: includes/class-mla-settings-iptc-exif-tab.php:1285
2690
  msgctxt "list_table_column"
2691
  msgid "Status"
2692
  msgstr ""
2693
 
2694
- #: includes/class-mla-mime-types.php:555 includes/class-mla-mime-types.php:630
2695
  msgctxt "list_table_column"
2696
  msgid "WordPress Type"
2697
  msgstr ""
2698
 
2699
- #: includes/class-mla-mime-types.php:556 includes/class-mla-mime-types.php:631
2700
  msgctxt "list_table_column"
2701
  msgid "MLA Type"
2702
  msgstr ""
2703
 
2704
- #: includes/class-mla-mime-types.php:557
2705
  msgctxt "list_table_column"
2706
  msgid "Std. Source"
2707
  msgstr ""
2708
 
2709
- #: includes/class-mla-mime-types.php:558
2710
  msgctxt "list_table_column"
2711
  msgid "Std. Icon Type"
2712
  msgstr ""
2713
 
2714
- #: includes/class-mla-mime-types.php:704
2715
  msgctxt "list_table_column"
2716
  msgid "Slug"
2717
  msgstr ""
2718
 
2719
- #: includes/class-mla-mime-types.php:705
2720
  msgctxt "list_table_column"
2721
  msgid "Specification"
2722
  msgstr ""
2723
 
2724
- #: includes/class-mla-mime-types.php:706
2725
  msgctxt "list_table_column"
2726
  msgid "Post Mime"
2727
  msgstr ""
2728
 
2729
- #: includes/class-mla-mime-types.php:707
2730
  msgctxt "list_table_column"
2731
  msgid "Table View"
2732
  msgstr ""
2733
 
2734
- #: includes/class-mla-mime-types.php:708
2735
  msgctxt "list_table_column"
2736
  msgid "Singular Name"
2737
  msgstr ""
2738
 
2739
- #: includes/class-mla-mime-types.php:709
2740
  msgctxt "list_table_column"
2741
  msgid "Plural Name"
2742
  msgstr ""
2743
 
2744
- #: includes/class-mla-mime-types.php:710
2745
  msgctxt "list_table_column"
2746
  msgid "Order"
2747
  msgstr ""
2748
 
2749
- #: includes/class-mla-mime-types.php:1026
2750
  msgctxt "post_mime_types_description"
2751
  msgid "Copied from previous filter/plugin"
2752
  msgstr ""
2753
 
2754
- #: includes/class-mla-mime-types.php:1127
2755
- #: includes/class-mla-mime-types.php:1244
2756
  msgid "Ignoring specification for Post MIME Type; using slug"
2757
  msgstr ""
2758
 
2759
- #: includes/class-mla-mime-types.php:1133
2760
- #: includes/class-mla-mime-types.php:2213
2761
  #, php-format
2762
  msgid "<br>Changing %1$s \"%2$s\" to valid value \"%3$s\""
2763
  msgstr ""
2764
 
2765
- #: includes/class-mla-mime-types.php:1133
2766
- #: includes/class-mla-mime-types.php:1221
2767
- #: includes/class-mla-mime-types.php:1232
2768
  #: includes/class-mla-settings-view-tab.php:119
2769
  #: includes/class-mla-settings-view-tab.php:375
2770
  msgid "Slug"
2771
  msgstr ""
2772
 
2773
- #: includes/class-mla-mime-types.php:1141
2774
- #: includes/class-mla-mime-types.php:1229
2775
  #, php-format
2776
  msgid "%1$s: Could not add Slug \"%2$s\"; value already exists"
2777
  msgstr ""
2778
 
2779
- #: includes/class-mla-mime-types.php:1176
2780
  #, php-format
2781
  msgid "Edit view \"%1$s\"; added"
2782
  msgstr ""
2783
 
2784
- #: includes/class-mla-mime-types.php:1221
2785
- #: includes/class-mla-mime-types.php:2339
2786
  #, php-format
2787
  msgid "<br>Changing new %1$s \"%2$s\" to valid value \"%3$s\""
2788
  msgstr ""
2789
 
2790
- #: includes/class-mla-mime-types.php:1274
2791
  #, php-format
2792
  msgid "Edit view \"%1$s\"; no changes detected"
2793
  msgstr ""
2794
 
2795
- #: includes/class-mla-mime-types.php:1288
2796
  #, php-format
2797
  msgid "Edit view \"%1$s\"; updated"
2798
  msgstr ""
2799
 
2800
- #: includes/class-mla-mime-types.php:1361
2801
  #, php-format
2802
  msgid "View \"%1$s\" reverted to standard"
2803
  msgstr ""
2804
 
2805
- #: includes/class-mla-mime-types.php:1367
2806
  #, php-format
2807
  msgid "View \"%1$s\" deleted"
2808
  msgstr ""
2809
 
2810
- #: includes/class-mla-mime-types.php:1375
2811
  #, php-format
2812
  msgid "%1$s: Did not find view \"%2$s\""
2813
  msgstr ""
2814
 
2815
- #: includes/class-mla-mime-types.php:1634
2816
- #: includes/class-mla-settings-documentation-tab.php:1552
2817
  msgctxt "table_view_singular"
2818
  msgid "Active"
2819
  msgstr ""
2820
 
2821
- #: includes/class-mla-mime-types.php:1635
2822
- #: includes/class-mla-settings-documentation-tab.php:1553
2823
  msgctxt "table_view_plural"
2824
  msgid "Active"
2825
  msgstr ""
2826
 
2827
- #: includes/class-mla-mime-types.php:1638
2828
- #: includes/class-mla-settings-documentation-tab.php:1556
2829
  msgctxt "table_view_singular"
2830
  msgid "Inactive"
2831
  msgstr ""
2832
 
2833
- #: includes/class-mla-mime-types.php:1639
2834
- #: includes/class-mla-settings-documentation-tab.php:1557
2835
  msgctxt "table_view_plural"
2836
  msgid "Inactive"
2837
  msgstr ""
2838
 
2839
- #: includes/class-mla-mime-types.php:1642
2840
  msgctxt "table_view_singular"
2841
  msgid "WordPress"
2842
  msgstr ""
2843
 
2844
- #: includes/class-mla-mime-types.php:1643
2845
  msgctxt "table_view_plural"
2846
  msgid "WordPress"
2847
  msgstr ""
2848
 
2849
- #: includes/class-mla-mime-types.php:1646
2850
  msgctxt "table_view_singular"
2851
  msgid "MLA"
2852
  msgstr ""
2853
 
2854
- #: includes/class-mla-mime-types.php:1647
2855
  msgctxt "table_view_plural"
2856
  msgid "MLA"
2857
  msgstr ""
2858
 
2859
- #: includes/class-mla-mime-types.php:1650
2860
- #: includes/class-mla-settings-iptc-exif-tab.php:2735
2861
  msgctxt "table_view_singular"
2862
  msgid "Custom"
2863
  msgstr ""
2864
 
2865
- #: includes/class-mla-mime-types.php:1651
2866
- #: includes/class-mla-settings-iptc-exif-tab.php:2736
2867
  msgctxt "table_view_plural"
2868
  msgid "Custom"
2869
  msgstr ""
2870
 
2871
- #: includes/class-mla-mime-types.php:1906
2872
  msgid "icon"
2873
  msgstr ""
2874
 
2875
- #: includes/class-mla-mime-types.php:2197
2876
- #: includes/class-mla-mime-types.php:2296
2877
  msgid "Cannot load Upload MIME Types"
2878
  msgstr ""
2879
 
2880
- #: includes/class-mla-mime-types.php:2208
2881
  msgid "Extension is required"
2882
  msgstr ""
2883
 
2884
- #: includes/class-mla-mime-types.php:2213
2885
- #: includes/class-mla-mime-types.php:2339
2886
- #: includes/class-mla-mime-types.php:2350
2887
  #: includes/class-mla-settings-upload-tab.php:165
2888
  #: includes/class-mla-settings-upload-tab.php:534
2889
  msgid "Extension"
2890
  msgstr ""
2891
 
2892
- #: includes/class-mla-mime-types.php:2221
2893
  #, php-format
2894
  msgid "%1$s: Could not add extension \"%2$s\"; value already exists"
2895
  msgstr ""
2896
 
2897
- #: includes/class-mla-mime-types.php:2229
2898
  msgid "MIME type is required"
2899
  msgstr ""
2900
 
2901
- #: includes/class-mla-mime-types.php:2234
2902
- #: includes/class-mla-mime-types.php:2381
2903
  #, php-format
2904
  msgid "%1$s: Bad MIME type; try \"%2$s\""
2905
  msgstr ""
2906
 
2907
- #: includes/class-mla-mime-types.php:2271
2908
  #, php-format
2909
  msgid "Upload MIME Type \"%1$s\"; added"
2910
  msgstr ""
2911
 
2912
- #: includes/class-mla-mime-types.php:2277
2913
- #: includes/class-mla-mime-types.php:2466
2914
- #: includes/class-mla-mime-types.php:2545
2915
  msgid "Cannot update Upload MIME Types"
2916
  msgstr ""
2917
 
2918
- #: includes/class-mla-mime-types.php:2347
2919
  #, php-format
2920
  msgid "%1$s: Could not add new extension \"%2$s\"; value already exists"
2921
  msgstr ""
2922
 
2923
- #: includes/class-mla-mime-types.php:2446
2924
  #, php-format
2925
  msgid "Edit type \"%1$s\"; no changes detected"
2926
  msgstr ""
2927
 
2928
- #: includes/class-mla-mime-types.php:2460
2929
  #, php-format
2930
  msgid "Edit type \"%1$s\"; updated"
2931
  msgstr ""
2932
 
2933
- #: includes/class-mla-mime-types.php:2533
2934
  #, php-format
2935
  msgid "Upload MIME Type \"%1$s\"; reverted to standard"
2936
  msgstr ""
2937
 
2938
- #: includes/class-mla-mime-types.php:2539
2939
  #, php-format
2940
  msgid "Upload MIME Type \"%1$s\"; deleted"
2941
  msgstr ""
2942
 
2943
- #: includes/class-mla-mime-types.php:2554
2944
  #, php-format
2945
  msgid "%1$s: Did not find Upload type \"%2$s\""
2946
  msgstr ""
@@ -2983,41 +3078,41 @@ msgstr ""
2983
  msgid "New Att. Category Name"
2984
  msgstr ""
2985
 
2986
- #: includes/class-mla-objects.php:73
2987
  msgctxt "taxonomy_name_plural"
2988
  msgid "Att. Tags"
2989
  msgstr ""
2990
 
2991
- #: includes/class-mla-objects.php:74
2992
  msgctxt "taxonomy_name_singular"
2993
  msgid "Att. Tag"
2994
  msgstr ""
2995
 
2996
- #: includes/class-mla-objects.php:75
2997
  msgid "Search Att. Tags"
2998
  msgstr ""
2999
 
3000
- #: includes/class-mla-objects.php:76
3001
  msgid "All Att. Tags"
3002
  msgstr ""
3003
 
3004
- #: includes/class-mla-objects.php:77 includes/class-mla-objects.php:78
3005
  msgid "Parent Att. Tag"
3006
  msgstr ""
3007
 
3008
- #: includes/class-mla-objects.php:79
3009
  msgid "Edit Att. Tag"
3010
  msgstr ""
3011
 
3012
- #: includes/class-mla-objects.php:80
3013
  msgid "Update Att. Tag"
3014
  msgstr ""
3015
 
3016
- #: includes/class-mla-objects.php:82 includes/class-mla-objects.php:84
3017
  msgid "Att. Tag"
3018
  msgstr ""
3019
 
3020
- #: includes/class-mla-objects.php:83
3021
  msgid "New Att. Tag Name"
3022
  msgstr ""
3023
 
@@ -3025,30 +3120,30 @@ msgstr ""
3025
  msgid "Attachments"
3026
  msgstr ""
3027
 
3028
- #: includes/class-mla-objects.php:253
3029
  #, php-format
3030
  msgctxt "error_log"
3031
  msgid ""
3032
  "%1$s: mla_taxonomy_column_filter( \"%2$s\" ) - get_term failed: \"%3$s\""
3033
  msgstr ""
3034
 
3035
- #: includes/class-mla-objects.php:277
3036
  msgid "click to search"
3037
  msgstr ""
3038
 
3039
- #: includes/class-mla-objects.php:309
3040
  msgid "Shortcode(s), HTML and/or Plain Text"
3041
  msgstr ""
3042
 
3043
- #: includes/class-mla-objects.php:317
3044
  msgid "MLA Text"
3045
  msgstr ""
3046
 
3047
- #: includes/class-mla-objects.php:361
3048
  msgid "Automatically add paragraphs"
3049
  msgstr ""
3050
 
3051
- #: includes/class-mla-objects.php:362
3052
  msgid "Add .textwidget div tags"
3053
  msgstr ""
3054
 
@@ -3061,7 +3156,7 @@ msgid "tpls/mla-option-templates.tpl not found"
3061
  msgstr ""
3062
 
3063
  #: includes/class-mla-options.php:217 includes/class-mla-options.php:421
3064
- #: includes/class-mla-options.php:502
3065
  #, php-format
3066
  msgid "%1$s: Custom %2$s unknown action \"%3$s\""
3067
  msgstr ""
@@ -3124,11 +3219,13 @@ msgid "Checked On Top ignored; %1$s not supported."
3124
  msgstr ""
3125
 
3126
  #: includes/class-mla-options.php:411 includes/class-mla-options.php:492
 
3127
  #, php-format
3128
  msgid "Update custom %1$s"
3129
  msgstr ""
3130
 
3131
  #: includes/class-mla-options.php:418 includes/class-mla-options.php:499
 
3132
  #, php-format
3133
  msgid "Reset custom %1$s"
3134
  msgstr ""
@@ -3148,8 +3245,8 @@ msgstr ""
3148
  #: includes/class-mla-options.php:456
3149
  #: includes/class-mla-settings-custom-fields-tab.php:455
3150
  #: includes/class-mla-settings-custom-fields-tab.php:759
3151
- #: includes/class-mla-settings-iptc-exif-tab.php:456
3152
- #: includes/class-mla-settings-iptc-exif-tab.php:842
3153
  #: includes/class-mla-settings-shortcodes-tab.php:401
3154
  #: includes/class-mla-settings-shortcodes-tab.php:472
3155
  #: includes/mla-main-search-box-template.php:49
@@ -3169,171 +3266,171 @@ msgstr ""
3169
  msgid "Terms"
3170
  msgstr ""
3171
 
3172
- #: includes/class-mla-options.php:883 includes/class-mla-options.php:929
3173
- #: includes/class-mla-options.php:1737 includes/class-mla-options.php:1768
3174
  #: includes/class-mla-settings-upload-tab.php:128
3175
  msgid "None (select a value)"
3176
  msgstr ""
3177
 
3178
- #: includes/class-mla-options.php:936
3179
  msgid "Metadata (see below)"
3180
  msgstr ""
3181
 
3182
- #: includes/class-mla-options.php:943
3183
  msgid "Template (see below)"
3184
  msgstr ""
3185
 
3186
- #: includes/class-mla-options.php:1015 includes/class-mla-options.php:2049
3187
  #, php-format
3188
  msgid "%1$s: New field %2$s already exists."
3189
  msgstr ""
3190
 
3191
- #: includes/class-mla-options.php:1020 includes/class-mla-options.php:2054
3192
  #, php-format
3193
  msgid "Adding new field %1$s."
3194
  msgstr ""
3195
 
3196
- #: includes/class-mla-options.php:1028 includes/class-mla-options.php:2062
3197
  #, php-format
3198
  msgid "Adding new rule for %1$s."
3199
  msgstr ""
3200
 
3201
- #: includes/class-mla-options.php:1054 includes/class-mla-options.php:1919
3202
- #: includes/class-mla-options.php:2088
3203
  #, php-format
3204
  msgid "Deleting rule for %1$s."
3205
  msgstr ""
3206
 
3207
- #: includes/class-mla-options.php:1077 includes/class-mla-options.php:1098
3208
- #: includes/class-mla-options.php:1148 includes/class-mla-options.php:1155
3209
- #: includes/class-mla-options.php:1835 includes/class-mla-options.php:1842
3210
- #: includes/class-mla-options.php:1849 includes/class-mla-options.php:1944
3211
- #: includes/class-mla-options.php:1951 includes/class-mla-options.php:1986
3212
- #: includes/class-mla-options.php:1993 includes/class-mla-options.php:2098
3213
- #: includes/class-mla-options.php:2105 includes/class-mla-options.php:2140
3214
- #: includes/class-mla-options.php:2147
3215
  #, php-format
3216
  msgid "%1$s changing %2$s from %3$s to %4$s."
3217
  msgstr ""
3218
 
3219
- #: includes/class-mla-options.php:1077
3220
  #: includes/class-mla-settings-custom-fields-tab.php:463
3221
  #: includes/class-mla-settings-custom-fields-tab.php:763
3222
  msgid "Data Source"
3223
  msgstr ""
3224
 
3225
- #: includes/class-mla-options.php:1083 includes/class-mla-options.php:1869
3226
- #: includes/class-mla-options.php:1971 includes/class-mla-options.php:2125
3227
  msgid "Replace to Keep"
3228
  msgstr ""
3229
 
3230
- #: includes/class-mla-options.php:1086 includes/class-mla-options.php:1872
3231
- #: includes/class-mla-options.php:1974 includes/class-mla-options.php:2128
3232
  msgid "Keep to Replace"
3233
  msgstr ""
3234
 
3235
- #: includes/class-mla-options.php:1091 includes/class-mla-options.php:1112
3236
- #: includes/class-mla-options.php:1126 includes/class-mla-options.php:1140
3237
- #: includes/class-mla-options.php:1169 includes/class-mla-options.php:1863
3238
- #: includes/class-mla-options.php:1877 includes/class-mla-options.php:1965
3239
- #: includes/class-mla-options.php:1979 includes/class-mla-options.php:2119
3240
- #: includes/class-mla-options.php:2133 includes/class-mla-options.php:2161
3241
  #, php-format
3242
  msgid "%1$s changing %2$s value from %3$s."
3243
  msgstr ""
3244
 
3245
- #: includes/class-mla-options.php:1091 includes/class-mla-options.php:1877
3246
- #: includes/class-mla-options.php:1979 includes/class-mla-options.php:2133
3247
  #: includes/class-mla-settings-custom-fields-tab.php:477
3248
  #: includes/class-mla-settings-custom-fields-tab.php:777
3249
- #: includes/class-mla-settings-iptc-exif-tab.php:475
3250
- #: includes/class-mla-settings-iptc-exif-tab.php:857
3251
  msgid "Existing Text"
3252
  msgstr ""
3253
 
3254
- #: includes/class-mla-options.php:1098 includes/class-mla-options.php:2140
3255
  #: includes/class-mla-settings-custom-fields-tab.php:482
3256
  #: includes/class-mla-settings-custom-fields-tab.php:782
3257
- #: includes/class-mla-settings-iptc-exif-tab.php:490
3258
- #: includes/class-mla-settings-iptc-exif-tab.php:865
3259
  msgid "Format"
3260
  msgstr ""
3261
 
3262
- #: includes/class-mla-options.php:1104 includes/class-mla-options.php:1118
3263
- #: includes/class-mla-options.php:1132 includes/class-mla-options.php:1161
3264
- #: includes/class-mla-options.php:2153
3265
  msgid "unchecked to checked"
3266
  msgstr ""
3267
 
3268
- #: includes/class-mla-options.php:1107 includes/class-mla-options.php:1121
3269
- #: includes/class-mla-options.php:1135 includes/class-mla-options.php:1164
3270
- #: includes/class-mla-options.php:2156
3271
  msgid "checked to unchecked"
3272
  msgstr ""
3273
 
3274
- #: includes/class-mla-options.php:1112
3275
  #: includes/class-mla-settings-custom-fields-tab.php:469
3276
  #: includes/class-mla-settings-custom-fields-tab.php:769
3277
  #: includes/class-mla-settings-custom-fields-tab.php:1453
3278
  msgid "MLA Column"
3279
  msgstr ""
3280
 
3281
- #: includes/class-mla-options.php:1148
3282
  msgid "Metavalue name"
3283
  msgstr ""
3284
 
3285
- #: includes/class-mla-options.php:1155 includes/class-mla-options.php:2147
3286
  #: includes/class-mla-settings-custom-fields-tab.php:489
3287
  #: includes/class-mla-settings-custom-fields-tab.php:789
3288
- #: includes/class-mla-settings-iptc-exif-tab.php:497
3289
- #: includes/class-mla-settings-iptc-exif-tab.php:872
3290
  msgid "Option"
3291
  msgstr ""
3292
 
3293
- #: includes/class-mla-options.php:1169 includes/class-mla-options.php:2161
3294
- #: includes/class-mla-settings-iptc-exif-tab.php:509
3295
  msgid "Delete NULL values"
3296
  msgstr ""
3297
 
3298
- #: includes/class-mla-options.php:1823
3299
  #, php-format
3300
  msgid "%1$s: No old values for %2$s."
3301
  msgstr ""
3302
 
3303
- #: includes/class-mla-options.php:1835
3304
  msgid "Field Title"
3305
  msgstr ""
3306
 
3307
- #: includes/class-mla-options.php:1842 includes/class-mla-options.php:1944
3308
- #: includes/class-mla-options.php:2098
3309
- #: includes/class-mla-settings-iptc-exif-tab.php:464
3310
- #: includes/class-mla-settings-iptc-exif-tab.php:846
3311
  msgid "IPTC Value"
3312
  msgstr ""
3313
 
3314
- #: includes/class-mla-options.php:1849 includes/class-mla-options.php:1951
3315
- #: includes/class-mla-options.php:2105
3316
  msgid "EXIF Value"
3317
  msgstr ""
3318
 
3319
- #: includes/class-mla-options.php:1855 includes/class-mla-options.php:1957
3320
- #: includes/class-mla-options.php:2111
3321
  msgid "EXIF to IPTC"
3322
  msgstr ""
3323
 
3324
- #: includes/class-mla-options.php:1858 includes/class-mla-options.php:1960
3325
- #: includes/class-mla-options.php:2114
3326
  msgid "IPTC to EXIF"
3327
  msgstr ""
3328
 
3329
- #: includes/class-mla-options.php:1863 includes/class-mla-options.php:1965
3330
- #: includes/class-mla-options.php:2119
3331
- #: includes/class-mla-settings-iptc-exif-tab.php:470
3332
- #: includes/class-mla-settings-iptc-exif-tab.php:852
3333
  msgid "Priority"
3334
  msgstr ""
3335
 
3336
- #: includes/class-mla-options.php:1986
3337
  msgid "Delimiter(s)"
3338
  msgstr ""
3339
 
@@ -3357,147 +3454,147 @@ msgstr ""
3357
  msgid "Add new"
3358
  msgstr ""
3359
 
3360
- #: includes/class-mla-polylang-support.php:1881
3361
- #: includes/class-mla-polylang-support.php:2248
3362
  msgid "Bulk Translations"
3363
  msgstr ""
3364
 
3365
- #: includes/class-mla-polylang-support.php:1905
3366
  msgid "Translate"
3367
  msgstr ""
3368
 
3369
- #: includes/class-mla-polylang-support.php:2033
3370
  msgid "All Languages"
3371
  msgstr ""
3372
 
3373
- #: includes/class-mla-polylang-support.php:2040
3374
- #: includes/class-mla-polylang-support.php:2313
3375
- #: includes/class-mla-polylang-support.php:2473
3376
  msgid "Quick Translate"
3377
  msgstr ""
3378
 
3379
- #: includes/class-mla-polylang-support.php:2044
3380
  msgid "Set Language"
3381
  msgstr ""
3382
 
3383
- #: includes/class-mla-polylang-support.php:2045
3384
- #: includes/class-mla-polylang-support.php:2480
3385
  msgid "Bulk Translate"
3386
  msgstr ""
3387
 
3388
- #: includes/class-mla-polylang-support.php:2046
3389
  msgid "Add or Modify Translation"
3390
  msgstr ""
3391
 
3392
- #: includes/class-mla-polylang-support.php:2047
3393
- #: includes/class-mla-polylang-support.php:2104
3394
- #: includes/class-mla-polylang-support.php:2417
3395
- #: includes/class-mla-polylang-support.php:2532
3396
  #: includes/class-mla-wpml-support.php:1584
3397
  #: includes/class-mla-wpml-support.php:1674
3398
- #: includes/class-mla-wpml-support.php:2134
3399
  msgid "Language"
3400
  msgstr ""
3401
 
3402
- #: includes/class-mla-polylang-support.php:2049
3403
- #: includes/class-mla-thumbnail-generation.php:637
3404
  msgid "Options"
3405
  msgstr ""
3406
 
3407
- #: includes/class-mla-polylang-support.php:2313
3408
  msgid "Translate this item inline"
3409
  msgstr ""
3410
 
3411
- #: includes/class-mla-polylang-support.php:2454
3412
- #: includes/class-mla-polylang-support.php:2559
3413
  #: includes/class-mla-wpml-support.php:1619
3414
  #: includes/class-mla-wpml-support.php:1722
3415
  msgid "Media/Assistant submenu table"
3416
  msgstr ""
3417
 
3418
- #: includes/class-mla-polylang-support.php:2459
3419
  #: includes/class-mla-wpml-support.php:1624
3420
  msgid "Language Column"
3421
  msgstr ""
3422
 
3423
- #: includes/class-mla-polylang-support.php:2462
3424
  #: includes/class-mla-wpml-support.php:1627
3425
  msgid ""
3426
  "Check this option to add a Language column to the Media/Assistant submenu "
3427
  "table."
3428
  msgstr ""
3429
 
3430
- #: includes/class-mla-polylang-support.php:2466
3431
  #: includes/class-mla-wpml-support.php:1631
3432
  msgid "Translations Column"
3433
  msgstr ""
3434
 
3435
- #: includes/class-mla-polylang-support.php:2469
3436
  #: includes/class-mla-wpml-support.php:1634
3437
  msgid ""
3438
  "Check this option to add a Translation Status column to the Media/Assistant "
3439
  "submenu table."
3440
  msgstr ""
3441
 
3442
- #: includes/class-mla-polylang-support.php:2476
3443
  msgid ""
3444
  "Check this option to add a Quick Translate rollover action to the Media/"
3445
  "Assistant submenu table."
3446
  msgstr ""
3447
 
3448
- #: includes/class-mla-polylang-support.php:2483
3449
  msgid ""
3450
  "Check this option to add \"Translate\" to the \"Bulk Actions\" control on "
3451
  "the Media/Assistant submenu table."
3452
  msgstr ""
3453
 
3454
- #: includes/class-mla-polylang-support.php:2487
3455
- #: includes/class-mla-polylang-support.php:2559
3456
  #: includes/class-mla-wpml-support.php:1638
3457
  #: includes/class-mla-wpml-support.php:1722
3458
  msgid "Term Management"
3459
  msgstr ""
3460
 
3461
- #: includes/class-mla-polylang-support.php:2492
3462
  #: includes/class-mla-wpml-support.php:1643
3463
  msgid "Term Assignment"
3464
  msgstr ""
3465
 
3466
- #: includes/class-mla-polylang-support.php:2495
3467
  #: includes/class-mla-wpml-support.php:1646
3468
  msgid ""
3469
  "Check this option to assign language-specific terms when items are updated."
3470
  msgstr ""
3471
 
3472
- #: includes/class-mla-polylang-support.php:2499
3473
  #: includes/class-mla-wpml-support.php:1650
3474
  msgid "Term Synchronization"
3475
  msgstr ""
3476
 
3477
- #: includes/class-mla-polylang-support.php:2502
3478
  #: includes/class-mla-wpml-support.php:1653
3479
  msgid ""
3480
  "Check this option to synchronize common terms among all item translations."
3481
  msgstr ""
3482
 
3483
- #: includes/class-mla-polylang-support.php:2506
3484
  #: includes/class-mla-wpml-support.php:1657
3485
  msgid "Term Mapping Replication"
3486
  msgstr ""
3487
 
3488
- #: includes/class-mla-polylang-support.php:2509
3489
  #: includes/class-mla-wpml-support.php:1660
3490
  msgid ""
3491
  "When mapping IPTC/EXIF metadata to taxonomy terms, make them available in "
3492
  "all languages."
3493
  msgstr ""
3494
 
3495
- #: includes/class-mla-polylang-support.php:2557
3496
  #: includes/class-mla-wpml-support.php:1720
3497
  msgid "Language Options"
3498
  msgstr ""
3499
 
3500
- #: includes/class-mla-polylang-support.php:2559
3501
  #, php-format
3502
  msgid ""
3503
  "In this tab you can find a number of options for controlling Polylang-"
@@ -3506,7 +3603,7 @@ msgid ""
3506
  "make."
3507
  msgstr ""
3508
 
3509
- #: includes/class-mla-polylang-support.php:2561
3510
  #: includes/class-mla-wpml-support.php:1724
3511
  #, php-format
3512
  msgid ""
@@ -3514,57 +3611,57 @@ msgid ""
3514
  "section of the Documentation."
3515
  msgstr ""
3516
 
3517
- #: includes/class-mla-polylang-support.php:2561
3518
  #: includes/class-mla-wpml-support.php:1724
3519
  msgid "Language Options documentation"
3520
  msgstr ""
3521
 
3522
- #: includes/class-mla-polylang-support.php:2561
3523
  #: includes/class-mla-wpml-support.php:1724
3524
  msgid "WPML &amp; Polylang Multilingual Support; the MLA Language Tab"
3525
  msgstr ""
3526
 
3527
- #: includes/class-mla-polylang-support.php:2564
3528
  #: includes/class-mla-settings-custom-fields-tab.php:657
3529
  #: includes/class-mla-settings-custom-fields-tab.php:756
3530
- #: includes/class-mla-settings-iptc-exif-tab.php:739
3531
- #: includes/class-mla-settings-iptc-exif-tab.php:837
3532
  #: includes/class-mla-settings-shortcodes-tab.php:713
3533
  #: includes/class-mla-settings-upload-tab.php:480
3534
  #: includes/class-mla-settings-upload-tab.php:530
3535
  #: includes/class-mla-settings-view-tab.php:320
3536
  #: includes/class-mla-settings-view-tab.php:372
3537
- #: includes/class-mla-settings.php:1061 includes/class-mla-settings.php:1436
3538
- #: includes/class-mla-settings.php:1438
3539
  #: includes/class-mla-wpml-support.php:1727
3540
  msgid "Save Changes"
3541
  msgstr ""
3542
 
3543
- #: includes/class-mla-polylang-support.php:2565
3544
  #: includes/class-mla-wpml-support.php:1728
3545
  msgid "Delete Language options and restore default settings"
3546
  msgstr ""
3547
 
3548
- #: includes/class-mla-polylang-support.php:2568
3549
- #: includes/class-mla-settings.php:799 includes/class-mla-settings.php:1066
3550
  #: includes/class-mla-wpml-support.php:1731
3551
  msgid "Go to Top"
3552
  msgstr ""
3553
 
3554
- #: includes/class-mla-polylang-support.php:2605
3555
  #: includes/class-mla-wpml-support.php:1768
3556
  msgid "Language settings saved."
3557
  msgstr ""
3558
 
3559
- #: includes/class-mla-polylang-support.php:2636
3560
- #: includes/class-mla-settings.php:1654
3561
  #: includes/class-mla-wpml-support.php:1799
3562
  #, php-format
3563
  msgctxt "message_list"
3564
  msgid "delete_option \"%1$s\""
3565
  msgstr ""
3566
 
3567
- #: includes/class-mla-polylang-support.php:2644
3568
  #: includes/class-mla-wpml-support.php:1807
3569
  msgid "Language settings reset to default values."
3570
  msgstr ""
@@ -3670,58 +3767,58 @@ msgstr ""
3670
  #: includes/class-mla-settings-custom-fields-tab.php:341
3671
  #: includes/class-mla-settings-custom-fields-tab.php:425
3672
  #: includes/class-mla-settings-custom-fields-tab.php:956
3673
- #: includes/class-mla-settings-iptc-exif-tab.php:347
3674
- #: includes/class-mla-settings-iptc-exif-tab.php:423
3675
- #: includes/class-mla-settings-iptc-exif-tab.php:1029
3676
  msgid ": Rule update failed"
3677
  msgstr ""
3678
 
3679
  #: includes/class-mla-settings-custom-fields-tab.php:346
3680
  #: includes/class-mla-settings-custom-fields-tab.php:428
3681
- #: includes/class-mla-settings-iptc-exif-tab.php:352
3682
- #: includes/class-mla-settings-iptc-exif-tab.php:426
3683
  msgid "Rule updated"
3684
  msgstr ""
3685
 
3686
  #: includes/class-mla-settings-custom-fields-tab.php:370
3687
- #: includes/class-mla-settings-iptc-exif-tab.php:376
3688
  #, php-format
3689
  msgid "Custom Field Rule \"%1$s\" deleted."
3690
  msgstr ""
3691
 
3692
  #: includes/class-mla-settings-custom-fields-tab.php:449
3693
- #: includes/class-mla-settings-iptc-exif-tab.php:447
3694
  msgid "Edit Rule"
3695
  msgstr ""
3696
 
3697
  #: includes/class-mla-settings-custom-fields-tab.php:458
3698
- #: includes/class-mla-settings-iptc-exif-tab.php:459
3699
  msgid ""
3700
  "This is the name of the custom field to which the rule applies.<br>Only one "
3701
  "rule is allowed for each custom field."
3702
  msgstr ""
3703
 
3704
  #: includes/class-mla-settings-custom-fields-tab.php:459
3705
- #: includes/class-mla-settings-iptc-exif-tab.php:460
3706
  msgid "Change Name"
3707
  msgstr ""
3708
 
3709
  #: includes/class-mla-settings-custom-fields-tab.php:460
3710
- #: includes/class-mla-settings-iptc-exif-tab.php:461
3711
  msgid "Cancel Name Change"
3712
  msgstr ""
3713
 
3714
  #: includes/class-mla-settings-custom-fields-tab.php:461
3715
  #: includes/class-mla-settings-custom-fields-tab.php:761
3716
- #: includes/class-mla-settings-iptc-exif-tab.php:462
3717
- #: includes/class-mla-settings-iptc-exif-tab.php:844
3718
  msgid "Enter new field"
3719
  msgstr ""
3720
 
3721
  #: includes/class-mla-settings-custom-fields-tab.php:462
3722
  #: includes/class-mla-settings-custom-fields-tab.php:762
3723
- #: includes/class-mla-settings-iptc-exif-tab.php:463
3724
- #: includes/class-mla-settings-iptc-exif-tab.php:845
3725
  msgid "Cancel new field"
3726
  msgstr ""
3727
 
@@ -3753,80 +3850,80 @@ msgstr ""
3753
  #: includes/class-mla-settings-custom-fields-tab.php:479
3754
  #: includes/class-mla-settings-custom-fields-tab.php:779
3755
  #: includes/class-mla-settings-custom-fields-tab.php:1499
3756
- #: includes/class-mla-settings-iptc-exif-tab.php:477
3757
- #: includes/class-mla-settings-iptc-exif-tab.php:859
3758
- #: includes/class-mla-settings-iptc-exif-tab.php:1561
3759
- #: includes/class-mla-settings-iptc-exif-tab.php:2415
3760
- #: includes/class-mla-thumbnail-generation.php:631
3761
  msgid "Keep"
3762
  msgstr ""
3763
 
3764
  #: includes/class-mla-settings-custom-fields-tab.php:484
3765
  #: includes/class-mla-settings-custom-fields-tab.php:784
3766
- #: includes/class-mla-settings-iptc-exif-tab.php:492
3767
- #: includes/class-mla-settings-iptc-exif-tab.php:867
3768
  msgid "Native"
3769
  msgstr ""
3770
 
3771
  #: includes/class-mla-settings-custom-fields-tab.php:486
3772
  #: includes/class-mla-settings-custom-fields-tab.php:786
3773
- #: includes/class-mla-settings-iptc-exif-tab.php:494
3774
- #: includes/class-mla-settings-iptc-exif-tab.php:869
3775
  msgid "Commas"
3776
  msgstr ""
3777
 
3778
  #: includes/class-mla-settings-custom-fields-tab.php:488
3779
  #: includes/class-mla-settings-custom-fields-tab.php:788
3780
- #: includes/class-mla-settings-iptc-exif-tab.php:496
3781
- #: includes/class-mla-settings-iptc-exif-tab.php:871
3782
  msgid "Raw"
3783
  msgstr ""
3784
 
3785
  #: includes/class-mla-settings-custom-fields-tab.php:491
3786
  #: includes/class-mla-settings-custom-fields-tab.php:791
3787
- #: includes/class-mla-settings-iptc-exif-tab.php:499
3788
- #: includes/class-mla-settings-iptc-exif-tab.php:874
3789
  msgid "Text"
3790
  msgstr ""
3791
 
3792
  #: includes/class-mla-settings-custom-fields-tab.php:493
3793
  #: includes/class-mla-settings-custom-fields-tab.php:793
3794
- #: includes/class-mla-settings-iptc-exif-tab.php:501
3795
- #: includes/class-mla-settings-iptc-exif-tab.php:876
3796
  msgid "Single"
3797
  msgstr ""
3798
 
3799
  #: includes/class-mla-settings-custom-fields-tab.php:495
3800
  #: includes/class-mla-settings-custom-fields-tab.php:795
3801
- #: includes/class-mla-settings-iptc-exif-tab.php:503
3802
- #: includes/class-mla-settings-iptc-exif-tab.php:878
3803
  msgid "Export"
3804
  msgstr ""
3805
 
3806
  #: includes/class-mla-settings-custom-fields-tab.php:497
3807
  #: includes/class-mla-settings-custom-fields-tab.php:797
3808
- #: includes/class-mla-settings-iptc-exif-tab.php:505
3809
- #: includes/class-mla-settings-iptc-exif-tab.php:880
3810
  msgid "Array"
3811
  msgstr ""
3812
 
3813
  #: includes/class-mla-settings-custom-fields-tab.php:499
3814
  #: includes/class-mla-settings-custom-fields-tab.php:799
3815
- #: includes/class-mla-settings-iptc-exif-tab.php:507
3816
- #: includes/class-mla-settings-iptc-exif-tab.php:882
3817
  msgid "Multi"
3818
  msgstr ""
3819
 
3820
  #: includes/class-mla-settings-custom-fields-tab.php:501
3821
  #: includes/class-mla-settings-custom-fields-tab.php:801
3822
- #: includes/class-mla-settings-iptc-exif-tab.php:884
3823
  msgid "Delete NULL Values"
3824
  msgstr ""
3825
 
3826
  #: includes/class-mla-settings-custom-fields-tab.php:502
3827
  #: includes/class-mla-settings-custom-fields-tab.php:802
3828
- #: includes/class-mla-settings-iptc-exif-tab.php:510
3829
- #: includes/class-mla-settings-iptc-exif-tab.php:885
3830
  msgid "Do not store empty custom field values"
3831
  msgstr ""
3832
 
@@ -3834,12 +3931,12 @@ msgstr ""
3834
  #: includes/class-mla-settings-custom-fields-tab.php:805
3835
  #: includes/class-mla-settings-custom-fields-tab.php:1483
3836
  #: includes/class-mla-settings-custom-fields-tab.php:1706
3837
- #: includes/class-mla-settings-documentation-tab.php:1217
3838
- #: includes/class-mla-settings-iptc-exif-tab.php:514
3839
- #: includes/class-mla-settings-iptc-exif-tab.php:888
3840
- #: includes/class-mla-settings-iptc-exif-tab.php:1577
3841
- #: includes/class-mla-settings-iptc-exif-tab.php:1813
3842
- #: includes/class-mla-settings-iptc-exif-tab.php:2418
3843
  #: includes/class-mla-settings-upload-tab.php:554
3844
  #: includes/class-mla-settings-upload-tab.php:1036
3845
  msgid "Active"
@@ -3849,12 +3946,12 @@ msgstr ""
3849
  #: includes/class-mla-settings-custom-fields-tab.php:807
3850
  #: includes/class-mla-settings-custom-fields-tab.php:1485
3851
  #: includes/class-mla-settings-custom-fields-tab.php:1709
3852
- #: includes/class-mla-settings-documentation-tab.php:1219
3853
- #: includes/class-mla-settings-iptc-exif-tab.php:516
3854
- #: includes/class-mla-settings-iptc-exif-tab.php:890
3855
- #: includes/class-mla-settings-iptc-exif-tab.php:1579
3856
- #: includes/class-mla-settings-iptc-exif-tab.php:1816
3857
- #: includes/class-mla-settings-iptc-exif-tab.php:2418
3858
  #: includes/class-mla-settings-upload-tab.php:172
3859
  #: includes/class-mla-settings-upload-tab.php:540
3860
  #: includes/class-mla-settings-upload-tab.php:1034
@@ -3862,7 +3959,7 @@ msgid "Inactive"
3862
  msgstr ""
3863
 
3864
  #: includes/class-mla-settings-custom-fields-tab.php:534
3865
- #: includes/class-mla-settings-iptc-exif-tab.php:614
3866
  #, php-format
3867
  msgid "Custom Field Rule \"%1$s\": %2$s"
3868
  msgstr ""
@@ -3873,9 +3970,9 @@ msgstr ""
3873
 
3874
  #: includes/class-mla-settings-custom-fields-tab.php:583
3875
  #: includes/class-mla-settings-custom-fields-tab.php:611
3876
- #: includes/class-mla-settings-documentation-tab.php:237
3877
- #: includes/class-mla-settings-iptc-exif-tab.php:663
3878
- #: includes/class-mla-settings-iptc-exif-tab.php:691
3879
  #: includes/class-mla-settings-shortcodes-tab.php:552
3880
  #: includes/class-mla-settings-upload-tab.php:400
3881
  #: includes/class-mla-settings-view-tab.php:244
@@ -3892,43 +3989,43 @@ msgid "Custom Field Mapping Progress"
3892
  msgstr ""
3893
 
3894
  #: includes/class-mla-settings-custom-fields-tab.php:724
3895
- #: includes/class-mla-settings-iptc-exif-tab.php:806
3896
  msgid "DO NOT DO THE FOLLOWING (they will cause mapping to fail)"
3897
  msgstr ""
3898
 
3899
  #: includes/class-mla-settings-custom-fields-tab.php:725
3900
- #: includes/class-mla-settings-iptc-exif-tab.php:807
3901
  msgid "Close the window"
3902
  msgstr ""
3903
 
3904
  #: includes/class-mla-settings-custom-fields-tab.php:726
3905
- #: includes/class-mla-settings-iptc-exif-tab.php:808
3906
  msgid "Reload the page"
3907
  msgstr ""
3908
 
3909
  #: includes/class-mla-settings-custom-fields-tab.php:727
3910
- #: includes/class-mla-settings-iptc-exif-tab.php:809
3911
  msgid "Click the browser&rsquo;s Stop, Back or forward buttons"
3912
  msgstr ""
3913
 
3914
  #: includes/class-mla-settings-custom-fields-tab.php:728
3915
- #: includes/class-mla-settings-iptc-exif-tab.php:810
3916
  msgid "Progress"
3917
  msgstr ""
3918
 
3919
  #: includes/class-mla-settings-custom-fields-tab.php:729
3920
- #: includes/class-mla-settings-iptc-exif-tab.php:811
3921
  msgid "Pause"
3922
  msgstr ""
3923
 
3924
  #: includes/class-mla-settings-custom-fields-tab.php:731
3925
- #: includes/class-mla-settings-iptc-exif-tab.php:813
3926
  msgid "Resume"
3927
  msgstr ""
3928
 
3929
  #: includes/class-mla-settings-custom-fields-tab.php:732
3930
  #: includes/class-mla-settings-documentation-tab.php:107
3931
- #: includes/class-mla-settings-iptc-exif-tab.php:814
3932
  #: includes/class-mla-settings-shortcodes-tab.php:476
3933
  #: includes/class-mla-template-support.php:160
3934
  #: includes/class-mla-template-support.php:166
@@ -3953,7 +4050,7 @@ msgid ""
3953
  msgstr ""
3954
 
3955
  #: includes/class-mla-settings-custom-fields-tab.php:745
3956
- #: includes/class-mla-settings-iptc-exif-tab.php:827
3957
  msgid ""
3958
  "You can find more information about using the controls in this tab to define "
3959
  "mapping rules and apply them by clicking the \"Help\" control in the upper-"
@@ -3961,54 +4058,54 @@ msgid ""
3961
  msgstr ""
3962
 
3963
  #: includes/class-mla-settings-custom-fields-tab.php:750
3964
- #: includes/class-mla-settings-iptc-exif-tab.php:832
3965
  #: includes/class-mla-settings-shortcodes-tab.php:711
3966
  msgid "Search results for"
3967
  msgstr ""
3968
 
3969
  #: includes/class-mla-settings-custom-fields-tab.php:752
3970
- #: includes/class-mla-settings-iptc-exif-tab.php:833
3971
  msgid "Search Rules Text"
3972
  msgstr ""
3973
 
3974
  #: includes/class-mla-settings-custom-fields-tab.php:754
3975
- #: includes/class-mla-settings-iptc-exif-tab.php:835
3976
  msgid "Search Rules"
3977
  msgstr ""
3978
 
3979
  #: includes/class-mla-settings-custom-fields-tab.php:757
3980
- #: includes/class-mla-settings-iptc-exif-tab.php:838
3981
  msgid "Execute All Rules"
3982
  msgstr ""
3983
 
3984
  #: includes/class-mla-settings-custom-fields-tab.php:758
3985
- #: includes/class-mla-settings-iptc-exif-tab.php:839
3986
  msgid "Add New Custom Field Rule"
3987
  msgstr ""
3988
 
3989
  #: includes/class-mla-settings-custom-fields-tab.php:808
3990
- #: includes/class-mla-settings-iptc-exif-tab.php:891
3991
  msgid "Add Rule"
3992
  msgstr ""
3993
 
3994
  #: includes/class-mla-settings-custom-fields-tab.php:872
3995
  #: includes/class-mla-settings-custom-fields-tab.php:894
3996
- #: includes/class-mla-settings-iptc-exif-tab.php:966
3997
  msgid "Nothing to execute"
3998
  msgstr ""
3999
 
4000
  #: includes/class-mla-settings-custom-fields-tab.php:928
4001
- #: includes/class-mla-settings-iptc-exif-tab.php:1001
4002
  msgid "Rule ID not found"
4003
  msgstr ""
4004
 
4005
  #: includes/class-mla-settings-custom-fields-tab.php:932
4006
- #: includes/class-mla-settings-iptc-exif-tab.php:1005
4007
  msgid "Rule not found"
4008
  msgstr ""
4009
 
4010
  #: includes/class-mla-settings-custom-fields-tab.php:1203
4011
- #: includes/class-mla-settings-iptc-exif-tab.php:1280
4012
  msgctxt "list_table_column"
4013
  msgid "Bad Name"
4014
  msgstr ""
@@ -4024,38 +4121,38 @@ msgid "Visibility"
4024
  msgstr ""
4025
 
4026
  #: includes/class-mla-settings-custom-fields-tab.php:1208
4027
- #: includes/class-mla-settings-iptc-exif-tab.php:1284
4028
  msgctxt "list_table_column"
4029
  msgid "Existing Text"
4030
  msgstr ""
4031
 
4032
  #: includes/class-mla-settings-custom-fields-tab.php:1209
4033
- #: includes/class-mla-settings-iptc-exif-tab.php:1288
4034
  msgctxt "list_table_column"
4035
  msgid "Delete NULL"
4036
  msgstr ""
4037
 
4038
  #: includes/class-mla-settings-custom-fields-tab.php:1210
4039
- #: includes/class-mla-settings-iptc-exif-tab.php:1289
4040
  msgctxt "list_table_column"
4041
  msgid "Format"
4042
  msgstr ""
4043
 
4044
  #: includes/class-mla-settings-custom-fields-tab.php:1211
4045
- #: includes/class-mla-settings-iptc-exif-tab.php:1290
4046
  msgctxt "list_table_column"
4047
  msgid "Option"
4048
  msgstr ""
4049
 
4050
  #: includes/class-mla-settings-custom-fields-tab.php:1350
4051
- #: includes/class-mla-settings-iptc-exif-tab.php:1429
4052
  msgid "Map All Attachments"
4053
  msgstr ""
4054
 
4055
  #: includes/class-mla-settings-custom-fields-tab.php:1350
4056
  #: includes/class-mla-settings-custom-fields-tab.php:1685
4057
- #: includes/class-mla-settings-iptc-exif-tab.php:1429
4058
- #: includes/class-mla-settings-iptc-exif-tab.php:1792
4059
  msgid "Execute"
4060
  msgstr ""
4061
 
@@ -4065,13 +4162,13 @@ msgstr ""
4065
 
4066
  #: includes/class-mla-settings-custom-fields-tab.php:1352
4067
  #: includes/class-mla-settings-custom-fields-tab.php:1686
4068
- #: includes/class-mla-settings-iptc-exif-tab.php:1432
4069
- #: includes/class-mla-settings-iptc-exif-tab.php:1793
4070
  msgid "Purge Values"
4071
  msgstr ""
4072
 
4073
  #: includes/class-mla-settings-custom-fields-tab.php:1703
4074
- #: includes/class-mla-settings-iptc-exif-tab.php:1810
4075
  #: includes/class-mla-settings-shortcodes-tab.php:1299
4076
  msgid "Any Status"
4077
  msgstr ""
@@ -4107,27 +4204,27 @@ msgid "Bulk Edit"
4107
  msgstr ""
4108
 
4109
  #: includes/class-mla-settings-custom-fields-tab.php:2470
4110
- #: includes/class-mla-settings-iptc-exif-tab.php:2739
4111
  msgctxt "table_view_singular"
4112
  msgid "Read Only"
4113
  msgstr ""
4114
 
4115
  #: includes/class-mla-settings-custom-fields-tab.php:2471
4116
- #: includes/class-mla-settings-iptc-exif-tab.php:2740
4117
  msgctxt "table_view_plural"
4118
  msgid "Read Only"
4119
  msgstr ""
4120
 
4121
  #: includes/class-mla-settings-documentation-tab.php:82
4122
- #: includes/class-mla-settings-documentation-tab.php:944
4123
- #: includes/class-mla-settings-documentation-tab.php:1029
4124
- #: includes/class-mla-settings-documentation-tab.php:1059
4125
  #, php-format
4126
  msgid "Example plugin \"%1$s\" not found"
4127
  msgstr ""
4128
 
4129
  #: includes/class-mla-settings-documentation-tab.php:97
4130
- #: includes/class-mla-settings.php:1367
4131
  #, php-format
4132
  msgid "%1$s: Reading the %2$s file ( %3$s ) \"%4$s\"."
4133
  msgstr ""
@@ -4187,120 +4284,120 @@ msgstr ""
4187
  msgid "Searches Name, Description, File Name and Tags"
4188
  msgstr ""
4189
 
4190
- #: includes/class-mla-settings-documentation-tab.php:262
4191
  #, php-format
4192
  msgid "Empty mla_item_ID - \"%1$s\""
4193
  msgstr ""
4194
 
4195
- #: includes/class-mla-settings-documentation-tab.php:500
4196
  msgctxt "list_table_column"
4197
  msgid "Current Version"
4198
  msgstr ""
4199
 
4200
- #: includes/class-mla-settings-documentation-tab.php:501
4201
  msgctxt "list_table_column"
4202
  msgid "Installed Version"
4203
  msgstr ""
4204
 
4205
- #: includes/class-mla-settings-documentation-tab.php:503
4206
  msgctxt "list_table_column"
4207
  msgid "File Name"
4208
  msgstr ""
4209
 
4210
- #: includes/class-mla-settings-documentation-tab.php:504
4211
  msgctxt "list_table_column"
4212
  msgid "Tags"
4213
  msgstr ""
4214
 
4215
- #: includes/class-mla-settings-documentation-tab.php:640
4216
  msgid "Install this plugin"
4217
  msgstr ""
4218
 
4219
- #: includes/class-mla-settings-documentation-tab.php:640
4220
- #: includes/class-mla-settings-documentation-tab.php:851
4221
  msgid "Install"
4222
  msgstr ""
4223
 
4224
- #: includes/class-mla-settings-documentation-tab.php:644
4225
  msgid "Update this plugin"
4226
  msgstr ""
4227
 
4228
- #: includes/class-mla-settings-documentation-tab.php:657
4229
  #: includes/class-mla-settings-shortcodes-tab.php:1069
4230
  msgid "View this item"
4231
  msgstr ""
4232
 
4233
- #: includes/class-mla-settings-documentation-tab.php:967
4234
  #, php-format
4235
  msgid "Example plugin \"%1$s\" fs_connect failed; no action taken. Error: %2$s"
4236
  msgstr ""
4237
 
4238
- #: includes/class-mla-settings-documentation-tab.php:972
4239
  #, php-format
4240
  msgid "Example plugin \"%1$s\" fs_connect failed; no action taken"
4241
  msgstr ""
4242
 
4243
- #: includes/class-mla-settings-documentation-tab.php:997
4244
  #, php-format
4245
  msgid ""
4246
  "Example plugin \"%1$s\" install_package failed; no action taken. Error: %2$s"
4247
  msgstr ""
4248
 
4249
- #: includes/class-mla-settings-documentation-tab.php:1008
4250
  #, php-format
4251
  msgid "Example plugin \"%1$s\" remove old single file failed."
4252
  msgstr ""
4253
 
4254
- #: includes/class-mla-settings-documentation-tab.php:1034
4255
  #, php-format
4256
  msgid "Example plugin \"%1$s\" already installed; no action taken"
4257
  msgstr ""
4258
 
4259
- #: includes/class-mla-settings-documentation-tab.php:1040
4260
  #, php-format
4261
  msgid "Example plugin \"%1$s\" installed"
4262
  msgstr ""
4263
 
4264
- #: includes/class-mla-settings-documentation-tab.php:1064
4265
  #, php-format
4266
  msgid "Example plugin \"%1$s\" not installed; no action taken"
4267
  msgstr ""
4268
 
4269
- #: includes/class-mla-settings-documentation-tab.php:1070
4270
  #, php-format
4271
  msgid "Example plugin \"%1$s\" updated"
4272
  msgstr ""
4273
 
4274
- #: includes/class-mla-settings-documentation-tab.php:1215
4275
  msgid "Network"
4276
  msgstr ""
4277
 
4278
- #: includes/class-mla-settings-documentation-tab.php:1548
4279
  msgctxt "table_view_singular"
4280
  msgid "Installed"
4281
  msgstr ""
4282
 
4283
- #: includes/class-mla-settings-documentation-tab.php:1549
4284
  msgctxt "table_view_plural"
4285
  msgid "Installed"
4286
  msgstr ""
4287
 
4288
- #: includes/class-mla-settings-documentation-tab.php:1560
4289
  msgctxt "table_view_singular"
4290
  msgid "Network"
4291
  msgstr ""
4292
 
4293
- #: includes/class-mla-settings-documentation-tab.php:1561
4294
  msgctxt "table_view_plural"
4295
  msgid "Network"
4296
  msgstr ""
4297
 
4298
- #: includes/class-mla-settings-documentation-tab.php:1564
4299
  msgctxt "table_view_singular"
4300
  msgid "Uninstalled"
4301
  msgstr ""
4302
 
4303
- #: includes/class-mla-settings-documentation-tab.php:1565
4304
  msgctxt "table_view_plural"
4305
  msgid "Uninstalled"
4306
  msgstr ""
@@ -4317,113 +4414,117 @@ msgstr ""
4317
  msgid "updated."
4318
  msgstr ""
4319
 
4320
- #: includes/class-mla-settings-iptc-exif-tab.php:466
4321
- #: includes/class-mla-settings-iptc-exif-tab.php:848
4322
  msgid "EXIF/Template Value"
4323
  msgstr ""
4324
 
4325
- #: includes/class-mla-settings-iptc-exif-tab.php:469
4326
- #: includes/class-mla-settings-iptc-exif-tab.php:851
4327
  msgid "EXIF element name or Content Template"
4328
  msgstr ""
4329
 
4330
- #: includes/class-mla-settings-iptc-exif-tab.php:472
4331
- #: includes/class-mla-settings-iptc-exif-tab.php:854
4332
- #: includes/class-mla-settings-iptc-exif-tab.php:1545
 
 
 
 
4333
  msgid "IPTC"
4334
  msgstr ""
4335
 
4336
- #: includes/class-mla-settings-iptc-exif-tab.php:474
4337
- #: includes/class-mla-settings-iptc-exif-tab.php:856
4338
- #: includes/class-mla-settings-iptc-exif-tab.php:1548
4339
  msgid "EXIF"
4340
  msgstr ""
4341
 
4342
- #: includes/class-mla-settings-iptc-exif-tab.php:482
4343
- #: includes/class-mla-settings-iptc-exif-tab.php:862
4344
  msgid "Delimiters"
4345
  msgstr ""
4346
 
4347
- #: includes/class-mla-settings-iptc-exif-tab.php:537
4348
  msgid "Standard field mapping"
4349
  msgstr ""
4350
 
4351
- #: includes/class-mla-settings-iptc-exif-tab.php:540
4352
  msgid "Taxonomy term mapping"
4353
  msgstr ""
4354
 
4355
- #: includes/class-mla-settings-iptc-exif-tab.php:555
4356
  msgid "Custom field mapping"
4357
  msgstr ""
4358
 
4359
- #: includes/class-mla-settings-iptc-exif-tab.php:650
4360
  msgid "Edit IPTC EXIF Rule cancelled."
4361
  msgstr ""
4362
 
4363
- #: includes/class-mla-settings-iptc-exif-tab.php:736
4364
  msgid "IPTC/EXIF Mapping Support is disabled"
4365
  msgstr ""
4366
 
4367
- #: includes/class-mla-settings-iptc-exif-tab.php:805
4368
  msgid "IPTC &amp; EXIF Mapping Progress"
4369
  msgstr ""
4370
 
4371
- #: includes/class-mla-settings-iptc-exif-tab.php:823
4372
  msgid "IPTC &amp; EXIF Processing Options"
4373
  msgstr ""
4374
 
4375
- #: includes/class-mla-settings-iptc-exif-tab.php:825
4376
  msgid ""
4377
  "In this tab you can define the rules for mapping IPTC (International Press "
4378
  "Telecommunications Council) and EXIF (EXchangeable Image File) metadata to "
4379
  "WordPress standard attachment fields, taxonomy terms and custom fields."
4380
  msgstr ""
4381
 
4382
- #: includes/class-mla-settings-iptc-exif-tab.php:1281
4383
  msgctxt "list_table_column"
4384
  msgid "IPTC Value"
4385
  msgstr ""
4386
 
4387
- #: includes/class-mla-settings-iptc-exif-tab.php:1282
4388
  msgctxt "list_table_column"
4389
  msgid "EXIF/Template Value"
4390
  msgstr ""
4391
 
4392
- #: includes/class-mla-settings-iptc-exif-tab.php:1283
4393
  msgctxt "list_table_column"
4394
  msgid "Priority "
4395
  msgstr ""
4396
 
4397
- #: includes/class-mla-settings-iptc-exif-tab.php:1286
4398
  msgctxt "list_table_column"
4399
  msgid "Delimiter(s)"
4400
  msgstr ""
4401
 
4402
- #: includes/class-mla-settings-iptc-exif-tab.php:1287
4403
  msgctxt "list_table_column"
4404
  msgid "Parent"
4405
  msgstr ""
4406
 
4407
- #: includes/class-mla-settings-iptc-exif-tab.php:1432
4408
  msgid "Purge IPTC EXIF values"
4409
  msgstr ""
4410
 
4411
- #: includes/class-mla-settings-iptc-exif-tab.php:2727
4412
  msgctxt "table_view_singular"
4413
  msgid "Standard"
4414
  msgstr ""
4415
 
4416
- #: includes/class-mla-settings-iptc-exif-tab.php:2728
4417
  msgctxt "table_view_plural"
4418
  msgid "Standard"
4419
  msgstr ""
4420
 
4421
- #: includes/class-mla-settings-iptc-exif-tab.php:2731
4422
  msgctxt "table_view_singular"
4423
  msgid "Taxonomy"
4424
  msgstr ""
4425
 
4426
- #: includes/class-mla-settings-iptc-exif-tab.php:2732
4427
  msgctxt "table_view_plural"
4428
  msgid "Taxonomy"
4429
  msgstr ""
@@ -4527,7 +4628,7 @@ msgstr ""
4527
 
4528
  #: includes/class-mla-settings-shortcodes-tab.php:319
4529
  #: includes/class-mla-settings-shortcodes-tab.php:322
4530
- #: includes/class-mla-settings.php:954
4531
  msgid "Shortcodes"
4532
  msgstr ""
4533
 
@@ -4673,7 +4774,7 @@ msgid "Markup"
4673
  msgstr ""
4674
 
4675
  #: includes/class-mla-settings-shortcodes-tab.php:1282
4676
- #: includes/class-mla-thumbnail-generation.php:634
4677
  msgid "Delete"
4678
  msgstr ""
4679
 
@@ -5020,8 +5121,8 @@ msgstr ""
5020
  msgid "No view slug found"
5021
  msgstr ""
5022
 
5023
- #: includes/class-mla-settings.php:429 includes/class-mla-settings.php:653
5024
- #: includes/class-mla-settings.php:1477
5025
  msgid "Settings"
5026
  msgstr ""
5027
 
@@ -5049,50 +5150,54 @@ msgstr ""
5049
  msgid "Plugins per page"
5050
  msgstr ""
5051
 
5052
- #: includes/class-mla-settings.php:725 includes/class-mla-settings.php:762
5053
- #: includes/class-mla-settings.php:902
 
 
 
 
5054
  #, php-format
5055
  msgctxt "error_log"
5056
  msgid "%1$s: %2$s unknown type = \"%3$s\""
5057
  msgstr ""
5058
 
5059
- #: includes/class-mla-settings.php:800 includes/class-mla-settings.php:1067
5060
  msgid "Go to Bottom"
5061
  msgstr ""
5062
 
5063
- #: includes/class-mla-settings.php:951
5064
  msgid "General"
5065
  msgstr ""
5066
 
5067
- #: includes/class-mla-settings.php:952
5068
  msgid "Views"
5069
  msgstr ""
5070
 
5071
- #: includes/class-mla-settings.php:953
5072
  msgid "Uploads"
5073
  msgstr ""
5074
 
5075
- #: includes/class-mla-settings.php:955
5076
  msgid "Custom Fields"
5077
  msgstr ""
5078
 
5079
- #: includes/class-mla-settings.php:956
5080
  msgid "IPTC/EXIF"
5081
  msgstr ""
5082
 
5083
- #: includes/class-mla-settings.php:957
5084
  msgid "Documentation"
5085
  msgstr ""
5086
 
5087
- #: includes/class-mla-settings.php:958
5088
  msgid "Debug"
5089
  msgstr ""
5090
 
5091
- #: includes/class-mla-settings.php:1058
5092
  msgid "General Processing Options"
5093
  msgstr ""
5094
 
5095
- #: includes/class-mla-settings.php:1060
5096
  #, php-format
5097
  msgid ""
5098
  "In this tab you can find a number of options for controlling the "
@@ -5101,31 +5206,31 @@ msgid ""
5101
  "any changes you make."
5102
  msgstr ""
5103
 
5104
- #: includes/class-mla-settings.php:1060
5105
  msgid "Media/Assistant Table Defaults"
5106
  msgstr ""
5107
 
5108
- #: includes/class-mla-settings.php:1060
5109
  msgid "Media Manager Enhancements"
5110
  msgstr ""
5111
 
5112
- #: includes/class-mla-settings.php:1063
5113
  msgid "Delete General options and restore default settings"
5114
  msgstr ""
5115
 
5116
- #: includes/class-mla-settings.php:1068 includes/class-mla-settings.php:1469
5117
  msgid "Support Our Work"
5118
  msgstr ""
5119
 
5120
- #: includes/class-mla-settings.php:1069 includes/class-mla-settings.php:1072
5121
  msgid "Donate to FTJ"
5122
  msgstr ""
5123
 
5124
- #: includes/class-mla-settings.php:1070 includes/class-mla-settings.php:1470
5125
  msgid "Donate"
5126
  msgstr ""
5127
 
5128
- #: includes/class-mla-settings.php:1072
5129
  #, php-format
5130
  msgid ""
5131
  "This plugin was inspired by my work on the WordPress web site for our "
@@ -5134,209 +5239,209 @@ msgid ""
5134
  "our work. Thank you!"
5135
  msgstr ""
5136
 
5137
- #: includes/class-mla-settings.php:1072
5138
  msgid "tax-deductible donation"
5139
  msgstr ""
5140
 
5141
- #: includes/class-mla-settings.php:1091
5142
  msgid "enhanced version of the WordPress [gallery] shortcode."
5143
  msgstr ""
5144
 
5145
- #: includes/class-mla-settings.php:1092
5146
  msgid "enhanced version of the WordPress Tag Cloud."
5147
  msgstr ""
5148
 
5149
- #: includes/class-mla-settings.php:1093
5150
  msgid ""
5151
  "provides flat or hierarchical lists, dropdown controls and checkbox lists of "
5152
  "taxonomy terms."
5153
  msgstr ""
5154
 
5155
- #: includes/class-mla-settings.php:1105
5156
  msgid "Shortcodes made available by this plugin"
5157
  msgstr ""
5158
 
5159
- #: includes/class-mla-settings.php:1220
5160
  msgid "Debug settings saved."
5161
  msgstr ""
5162
 
5163
- #: includes/class-mla-settings.php:1316
5164
  #, php-format
5165
  msgid "%1$s: Reseting the %2$s file ( %3$s ) \"%4$s\"."
5166
  msgstr ""
5167
 
5168
- #: includes/class-mla-settings.php:1316 includes/class-mla-settings.php:1367
5169
- #: includes/class-mla-settings.php:1391 includes/class-mla-settings.php:1401
5170
- #: includes/class-mla-settings.php:1427
5171
  msgid "Error Log"
5172
  msgstr ""
5173
 
5174
- #: includes/class-mla-settings.php:1377
5175
  #, php-format
5176
  msgid "Error log file (%1$s) not found; click Reset to create it."
5177
  msgstr ""
5178
 
5179
- #: includes/class-mla-settings.php:1422 includes/class-mla-settings.php:1438
5180
  msgid "Debug Options"
5181
  msgstr ""
5182
 
5183
- #: includes/class-mla-settings.php:1425
5184
  msgid "Debug Settings"
5185
  msgstr ""
5186
 
5187
- #: includes/class-mla-settings.php:1429
5188
  #, php-format
5189
  msgid ""
5190
  "You can find more information about the MLA Reporting/MLA_DEBUG_LEVEL values "
5191
  "in the %1$s section of the Documentation tab."
5192
  msgstr ""
5193
 
5194
- #: includes/class-mla-settings.php:1429
5195
  msgid "MLA Debug Tab documentation"
5196
  msgstr ""
5197
 
5198
- #: includes/class-mla-settings.php:1429
5199
  msgid "MLA Debug Tab"
5200
  msgstr ""
5201
 
5202
- #: includes/class-mla-settings.php:1438
5203
  #, php-format
5204
  msgid "Click %1$s to update the %2$s."
5205
  msgstr ""
5206
 
5207
- #: includes/class-mla-settings.php:1457
5208
  msgid "You do not have permission to manage plugin settings."
5209
  msgstr ""
5210
 
5211
- #: includes/class-mla-settings.php:1489
5212
  msgid "Cannot render content tab"
5213
  msgstr ""
5214
 
5215
- #: includes/class-mla-settings.php:1492
5216
  msgid "Unknown content tab"
5217
  msgstr ""
5218
 
5219
- #: includes/class-mla-settings.php:1508
5220
  msgid "Dismiss this notice"
5221
  msgstr ""
5222
 
5223
- #: includes/class-mla-settings.php:1535
5224
  #, php-format
5225
  msgid "%s attachment"
5226
  msgid_plural "%s attachments"
5227
  msgstr[0] ""
5228
  msgstr[1] ""
5229
 
5230
- #: includes/class-mla-settings.php:1537
5231
  #, php-format
5232
  msgid "Deleted custom field value from %1$s."
5233
  msgstr ""
5234
 
5235
- #: includes/class-mla-settings.php:1540
5236
  msgid "No attachments contained this custom field."
5237
  msgstr ""
5238
 
5239
- #: includes/class-mla-settings.php:1570 includes/class-mla-settings.php:1580
5240
  #, php-format
5241
  msgctxt "message_list"
5242
  msgid "%1$s - references updated."
5243
  msgstr ""
5244
 
5245
- #: includes/class-mla-settings.php:1623
5246
  msgid "General settings saved."
5247
  msgstr ""
5248
 
5249
- #: includes/class-mla-settings.php:1662
5250
  msgid "General settings reset to default values."
5251
  msgstr ""
5252
 
5253
- #: includes/class-mla-settings.php:1704
5254
  msgid "select settings"
5255
  msgstr ""
5256
 
5257
- #: includes/class-mla-settings.php:1724
5258
  msgid "Import ALL Settings"
5259
  msgstr ""
5260
 
5261
- #: includes/class-mla-settings.php:1753 includes/class-mla-settings.php:1769
5262
  msgctxt "message_list"
5263
  msgid "exported"
5264
  msgstr ""
5265
 
5266
- #: includes/class-mla-settings.php:1755 includes/class-mla-settings.php:1771
5267
  msgctxt "message_list"
5268
  msgid "skipped"
5269
  msgstr ""
5270
 
5271
- #: includes/class-mla-settings.php:1778
5272
  msgid "ALL settings exported."
5273
  msgstr ""
5274
 
5275
- #: includes/class-mla-settings.php:1789
5276
  #, php-format
5277
  msgid "%1$s: The settings directory ( %2$s ) cannot be created."
5278
  msgstr ""
5279
 
5280
- #: includes/class-mla-settings.php:1793
5281
  #, php-format
5282
  msgid "%1$s: The settings directory ( %2$s ) is not writable."
5283
  msgstr ""
5284
 
5285
- #: includes/class-mla-settings.php:1804
5286
  #, php-format
5287
  msgid "%1$s: The settings file ( %2$s ) could not be opened."
5288
  msgstr ""
5289
 
5290
- #: includes/class-mla-settings.php:1811
5291
  #, php-format
5292
  msgctxt "error_log"
5293
  msgid "%1$s: _export_settings $error_info = \"%2$s\"."
5294
  msgstr ""
5295
 
5296
- #: includes/class-mla-settings.php:1820
5297
  #, php-format
5298
  msgid "%1$s: Writing the settings file ( %2$s ) \"%3$s\"."
5299
  msgstr ""
5300
 
5301
- #: includes/class-mla-settings.php:1826
5302
  #, php-format
5303
  msgid "Settings exported; %1$s settings recorded."
5304
  msgstr ""
5305
 
5306
- #: includes/class-mla-settings.php:1844
5307
  msgid "No settings imported."
5308
  msgstr ""
5309
 
5310
- #: includes/class-mla-settings.php:1853
5311
  msgid "Please select an import settings file from the dropdown list."
5312
  msgstr ""
5313
 
5314
- #: includes/class-mla-settings.php:1857
5315
  msgid "The import settings dropdown selection is missing."
5316
  msgstr ""
5317
 
5318
- #: includes/class-mla-settings.php:1865
5319
  #, php-format
5320
  msgctxt "error_log"
5321
  msgid "%1$s: _import_settings $error_info = \"%2$s\"."
5322
  msgstr ""
5323
 
5324
- #: includes/class-mla-settings.php:1874
5325
  #, php-format
5326
  msgid "%1$s: Reading the settings file ( %2$s ) \"%3$s\"."
5327
  msgstr ""
5328
 
5329
- #: includes/class-mla-settings.php:1893 includes/class-mla-settings.php:1909
5330
  msgctxt "message_list"
5331
  msgid "updated"
5332
  msgstr ""
5333
 
5334
- #: includes/class-mla-settings.php:1896 includes/class-mla-settings.php:1912
5335
  msgctxt "message_list"
5336
  msgid "unchanged"
5337
  msgstr ""
5338
 
5339
- #: includes/class-mla-settings.php:1917
5340
  #, php-format
5341
  msgid "Settings imported; %1$s updated, %2$s unchanged."
5342
  msgstr ""
@@ -5344,14 +5449,14 @@ msgstr ""
5344
  #: includes/class-mla-shortcode-support.php:440
5345
  #: includes/class-mla-shortcode-support.php:1809
5346
  #: includes/class-mla-shortcode-support.php:3893
5347
- #: includes/class-mla-shortcode-support.php:4180
5348
  msgid "Previous"
5349
  msgstr ""
5350
 
5351
  #: includes/class-mla-shortcode-support.php:441
5352
  #: includes/class-mla-shortcode-support.php:1810
5353
  #: includes/class-mla-shortcode-support.php:3942
5354
- #: includes/class-mla-shortcode-support.php:4186
5355
  msgid "Next"
5356
  msgstr ""
5357
 
@@ -5409,73 +5514,73 @@ msgstr ""
5409
  msgid "no-terms"
5410
  msgstr ""
5411
 
5412
- #: includes/class-mla-shortcode-support.php:4610
5413
- #: includes/class-mla-shortcode-support.php:5014
5414
- #: includes/class-mla-shortcode-support.php:5051
5415
  msgid "Invalid mla_gallery"
5416
  msgstr ""
5417
 
5418
- #: includes/class-mla-shortcode-support.php:5339
5419
  msgid "mla_debug query"
5420
  msgstr ""
5421
 
5422
- #: includes/class-mla-shortcode-support.php:5340
5423
  msgid "mla_debug request"
5424
  msgstr ""
5425
 
5426
- #: includes/class-mla-shortcode-support.php:5341
5427
  msgid "mla_debug query_vars"
5428
  msgstr ""
5429
 
5430
- #: includes/class-mla-shortcode-support.php:5342
5431
  msgid "mla_debug post_count"
5432
  msgstr ""
5433
 
5434
- #: includes/class-mla-shortcode-support.php:5410
5435
  msgid "mla_debug WHERE filter"
5436
  msgstr ""
5437
 
5438
- #: includes/class-mla-shortcode-support.php:5434
5439
  msgid "mla_debug modified WHERE filter"
5440
  msgstr ""
5441
 
5442
- #: includes/class-mla-shortcode-support.php:5457
5443
  msgid "mla_debug ORDER BY filter, incoming"
5444
  msgstr ""
5445
 
5446
- #: includes/class-mla-shortcode-support.php:5457
5447
  msgid "Replacement ORDER BY clause"
5448
  msgstr ""
5449
 
5450
- #: includes/class-mla-shortcode-support.php:5480
5451
  msgid "mla_debug posts_clauses filter"
5452
  msgstr ""
5453
 
5454
- #: includes/class-mla-shortcode-support.php:5498
5455
  msgid "mla_debug posts_clauses_request filter"
5456
  msgstr ""
5457
 
5458
- #: includes/class-mla-shortcode-support.php:5687
5459
  msgid "Invalid taxonomy"
5460
  msgstr ""
5461
 
5462
- #: includes/class-mla-shortcode-support.php:5867
5463
  msgid "mla_debug query arguments"
5464
  msgstr ""
5465
 
5466
- #: includes/class-mla-shortcode-support.php:5868
5467
  msgid "mla_debug last_query"
5468
  msgstr ""
5469
 
5470
- #: includes/class-mla-shortcode-support.php:5869
5471
  msgid "mla_debug last_error"
5472
  msgstr ""
5473
 
5474
- #: includes/class-mla-shortcode-support.php:5870
5475
  msgid "mla_debug num_rows"
5476
  msgstr ""
5477
 
5478
- #: includes/class-mla-shortcode-support.php:5871
5479
  msgid "mla_debug found_rows"
5480
  msgstr ""
5481
 
@@ -5637,102 +5742,102 @@ msgstr ""
5637
 
5638
  #: includes/class-mla-thumbnail-generation.php:96
5639
  #: includes/class-mla-thumbnail-generation.php:98
5640
- #: includes/class-mla-thumbnail-generation.php:617
5641
  msgid "Generate Thumbnails"
5642
  msgstr ""
5643
 
5644
- #: includes/class-mla-thumbnail-generation.php:371
5645
  #, php-format
5646
  msgid "Item %1$d"
5647
  msgstr ""
5648
 
5649
- #: includes/class-mla-thumbnail-generation.php:388
5650
  msgid "has native thumbnail."
5651
  msgstr ""
5652
 
5653
- #: includes/class-mla-thumbnail-generation.php:408
5654
  msgid "Featured Image retained."
5655
  msgstr ""
5656
 
5657
- #: includes/class-mla-thumbnail-generation.php:416
5658
  #, php-format
5659
  msgid "%1$s: %2$sno attached file."
5660
  msgstr ""
5661
 
5662
- #: includes/class-mla-thumbnail-generation.php:420
5663
  msgid "unsupported file type."
5664
  msgstr ""
5665
 
5666
- #: includes/class-mla-thumbnail-generation.php:428
5667
  #: includes/class-mla-thumbnail-generation.php:440
 
5668
  #, php-format
5669
  msgid "%1$s: %2$sthumbnail generation failed"
5670
  msgstr ""
5671
 
5672
- #: includes/class-mla-thumbnail-generation.php:436
5673
  #, php-format
5674
  msgid "%1$sWordPress-style thumbnail generated."
5675
  msgstr ""
5676
 
5677
- #: includes/class-mla-thumbnail-generation.php:484
5678
  #, php-format
5679
  msgid "%1$s: %2$swp_insert_attachment failed."
5680
  msgstr ""
5681
 
5682
- #: includes/class-mla-thumbnail-generation.php:501
5683
  #, php-format
5684
  msgid "%1$sthumbnail generated as new item %2$s."
5685
  msgstr ""
5686
 
5687
- #: includes/class-mla-thumbnail-generation.php:550
5688
- #: includes/class-mla-thumbnail-generation.php:661
5689
  msgid "Generated Thumbnails"
5690
  msgstr ""
5691
 
5692
- #: includes/class-mla-thumbnail-generation.php:607
5693
  msgid ""
5694
  "Type &ldquo;WP&rdquo; generates native WordPress thumbnails without creating "
5695
  "a separate image item."
5696
  msgstr ""
5697
 
5698
- #: includes/class-mla-thumbnail-generation.php:618
5699
  msgid ""
5700
  "Pull down the Help menu and select Thumbnail Generation for setting details"
5701
  msgstr ""
5702
 
5703
- #: includes/class-mla-thumbnail-generation.php:619
5704
  msgid "Width"
5705
  msgstr ""
5706
 
5707
- #: includes/class-mla-thumbnail-generation.php:620
5708
  msgid "Height"
5709
  msgstr ""
5710
 
5711
- #: includes/class-mla-thumbnail-generation.php:621
5712
  msgid "Best Fit"
5713
  msgstr ""
5714
 
5715
- #: includes/class-mla-thumbnail-generation.php:622
5716
  msgid "Page"
5717
  msgstr ""
5718
 
5719
- #: includes/class-mla-thumbnail-generation.php:623
5720
  msgid "Resolution"
5721
  msgstr ""
5722
 
5723
- #: includes/class-mla-thumbnail-generation.php:624
5724
  msgid "Quality"
5725
  msgstr ""
5726
 
5727
- #: includes/class-mla-thumbnail-generation.php:630
5728
  msgid "Existing Items"
5729
  msgstr ""
5730
 
5731
- #: includes/class-mla-thumbnail-generation.php:632
5732
  msgid "Ignore"
5733
  msgstr ""
5734
 
5735
- #: includes/class-mla-thumbnail-generation.php:635
5736
  msgid "Suffix"
5737
  msgstr ""
5738
 
@@ -5760,13 +5865,13 @@ msgid ""
5760
  "\"Save Changes\" at the bottom of the tab to save any changes you make."
5761
  msgstr ""
5762
 
5763
- #: includes/class-mla-wpml-support.php:2256
5764
- #: includes/class-mla-wpml-support.php:2262
5765
  #, php-format
5766
  msgid "Edit the %s translation"
5767
  msgstr ""
5768
 
5769
- #: includes/class-mla-wpml-support.php:2268
5770
  #, php-format
5771
  msgid "Add translation to %s"
5772
  msgstr ""
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Media Library Assistant\n"
5
+ "POT-Creation-Date: 2018-03-25 15:55-0700\n"
6
  "PO-Revision-Date: 2015-08-21 21:38-0800\n"
7
  "Last-Translator: David Lingren <david@fairtradejudaica.org>\n"
8
  "Language-Team: David Lingren <david@fairtradejudaica.org>\n"
20
  "X-Poedit-SearchPath-1: tests\n"
21
  "X-Poedit-SearchPath-2: index.php\n"
22
 
23
+ #: includes/class-mla-admin-columns-pro-support.php:178
24
+ #: includes/class-mla-ajax.php:259 includes/class-mla-edit-media.php:936
25
+ #: includes/class-mla-list-table.php:632
26
+ msgid "Draft"
27
+ msgstr ""
28
+
29
+ #: includes/class-mla-admin-columns-pro-support.php:181
30
+ #: includes/class-mla-ajax.php:253 includes/class-mla-edit-media.php:930
31
+ #: includes/class-mla-list-table.php:635
32
+ msgid "Scheduled"
33
+ msgstr ""
34
+
35
+ #: includes/class-mla-admin-columns-pro-support.php:184
36
+ #: includes/class-mla-edit-media.php:933 includes/class-mla-list-table.php:638
37
+ msgctxt "post state"
38
+ msgid "Pending"
39
+ msgstr ""
40
+
41
+ #: includes/class-mla-admin-columns-pro-support.php:187
42
+ #: includes/class-mla-list-table.php:641
43
+ #: includes/class-mla-thumbnail-generation.php:645
44
+ msgid "Trash"
45
+ msgstr ""
46
+
47
+ #: includes/class-mla-admin-columns-pro-support.php:395
48
+ #: includes/class-mla-data-references.php:310
49
+ #: includes/class-mla-data-references.php:656
50
+ #: includes/class-mla-list-table.php:1067
51
+ msgid "NO REFERENCE TESTS"
52
+ msgstr ""
53
+
54
+ #: includes/class-mla-admin-columns-pro-support.php:592
55
+ #: includes/class-mla-admin-columns-pro-support.php:654
56
+ #: includes/class-mla-admin-columns-pro-support.php:721
57
+ #: includes/class-mla-admin-columns-pro-support.php:783
58
+ #: includes/class-mla-core-options.php:447
59
+ #: includes/class-mla-core-options.php:457
60
+ #: includes/class-mla-core-options.php:467
61
+ #: includes/class-mla-core-options.php:477
62
+ #: includes/class-mla-list-table.php:1147
63
+ #: includes/class-mla-list-table.php:1192
64
+ #: includes/class-mla-list-table.php:1242
65
+ #: includes/class-mla-list-table.php:1287
66
+ msgid "Disabled"
67
+ msgstr ""
68
+
69
+ #: includes/class-mla-admin-columns-pro-support.php:611
70
+ #: includes/class-mla-admin-columns-pro-support.php:677
71
+ #: includes/class-mla-admin-columns-pro-support.php:740
72
+ #: includes/class-mla-admin-columns-pro-support.php:802
73
+ #: includes/class-mla-edit-media.php:1018
74
+ #: includes/class-mla-edit-media.php:1056
75
+ #: includes/class-mla-edit-media.php:1092
76
+ #: includes/class-mla-edit-media.php:1127
77
+ #: includes/class-mla-list-table.php:1165
78
+ #: includes/class-mla-list-table.php:1214
79
+ #: includes/class-mla-list-table.php:1260
80
+ #: includes/class-mla-list-table.php:1305
81
+ msgid "PARENT"
82
+ msgstr ""
83
+
84
+ #: includes/class-mla-admin-columns-pro-support.php:1027
85
+ #: includes/class-mla-core-options.php:603
86
+ #: includes/class-mla-core-options.php:860
87
+ #: includes/class-mla-core-options.php:891
88
+ #: includes/class-mla-core-options.php:905
89
+ #: includes/class-mla-list-table.php:490 includes/class-mla-list-table.php:1400
90
+ #: includes/class-mla-settings-shortcodes-tab.php:629
91
+ msgid "None"
92
+ msgstr ""
93
+
94
+ #: includes/class-mla-admin-columns-pro-support.php:1117
95
+ #: includes/class-mla-list-table.php:1539
96
+ msgid "(Private post)"
97
+ msgstr ""
98
+
99
+ #: includes/class-mla-admin-columns-pro-support.php:1121
100
+ #: includes/class-mla-ajax.php:269 includes/class-mla-list-table.php:1450
101
+ #: includes/class-mla-list-table.php:1479
102
+ #: includes/class-mla-list-table.php:1543
103
+ msgid "Y/m/d"
104
+ msgstr ""
105
+
106
+ #: includes/class-mla-admin-columns-pro-support.php:1134
107
+ #: includes/class-mla-core-options.php:1307
108
+ #: includes/class-mla-list-table.php:1556
109
+ msgctxt "table_view_singular"
110
+ msgid "Unattached"
111
+ msgstr ""
112
+
113
  #: includes/class-mla-admin-columns-support-deprecated.php:33
114
+ #: includes/class-mla-admin-columns-support.php:28
115
  #: includes/class-mla-core-options.php:553 includes/class-mla-settings.php:429
116
+ #: includes/class-mla-settings.php:1457 includes/class-mla-settings.php:1477
117
  #: index.php:48
118
  msgid "Media Library Assistant"
119
  msgstr ""
120
 
121
  #: includes/class-mla-admin-columns-support-deprecated.php:34
122
+ #: includes/class-mla-admin-columns-support.php:29
123
  #: includes/class-mla-core-options.php:562
124
  msgid "Assistant"
125
  msgstr ""
126
 
127
+ #: includes/class-mla-ajax.php:240 includes/class-mla-core-options.php:1183
128
+ #: includes/class-mla-data.php:3959 includes/class-mla-edit-media.php:428
129
+ #: includes/class-mla-main.php:1896 includes/class-mla-main.php:2145
130
+ #: includes/class-mla-objects.php:348 includes/class-mla-options.php:453
131
  #: includes/mla-main-search-box-template.php:47
132
  #: includes/mla-media-modal-js-template.php:40
133
  msgid "Title"
134
  msgstr ""
135
 
136
+ #: includes/class-mla-ajax.php:240 includes/class-mla-main.php:1897
137
+ #: includes/class-mla-thumbnail-generation.php:637
138
  msgid "Type"
139
  msgstr ""
140
 
141
+ #: includes/class-mla-ajax.php:240 includes/class-mla-main.php:1898
142
  msgid "Date"
143
  msgstr ""
144
 
145
+ #: includes/class-mla-ajax.php:240 includes/class-mla-main.php:1899
146
  #: includes/class-mla-settings-custom-fields-tab.php:503
147
  #: includes/class-mla-settings-custom-fields-tab.php:803
148
+ #: includes/class-mla-settings-iptc-exif-tab.php:511
149
+ #: includes/class-mla-settings-iptc-exif-tab.php:885
150
  #: includes/class-mla-settings-upload-tab.php:552
151
  msgid "Status"
152
  msgstr ""
153
 
154
+ #: includes/class-mla-ajax.php:244 includes/class-mla-list-table.php:876
155
+ #: includes/class-mla-list-table.php:1041 includes/class-mla-main.php:430
156
  #: includes/class-mla-polylang-support.php:363
157
  #: includes/class-mla-thumbnail-generation.php:97
158
  msgid "(no title)"
159
  msgstr ""
160
 
161
+ #: includes/class-mla-ajax.php:250
162
  msgid "Published"
163
  msgstr ""
164
 
165
+ #: includes/class-mla-ajax.php:256
 
 
 
 
 
166
  msgid "Pending Review"
167
  msgstr ""
168
 
169
+ #: includes/class-mla-ajax.php:298 includes/class-mla-ajax.php:305
170
+ #: includes/class-mla-ajax.php:314 includes/class-mla-core.php:845
171
+ #: includes/class-mla-core.php:863 includes/class-mla-core.php:1271
172
+ #: includes/class-mla-core.php:1277 includes/class-mla-core.php:1281
 
 
 
 
 
 
 
 
 
 
 
173
  #: includes/class-mla-data-pdf.php:216 includes/class-mla-data-pdf.php:517
174
  #: includes/class-mla-data-pdf.php:519 includes/class-mla-data-pdf.php:565
175
+ #: includes/class-mla-data-pdf.php:749 includes/class-mla-data-query.php:695
176
  #: includes/class-mla-data.php:50 includes/class-mla-data.php:108
177
  #: includes/class-mla-data.php:196 includes/class-mla-data.php:242
178
  #: includes/class-mla-data.php:345 includes/class-mla-data.php:501
179
+ #: includes/class-mla-data.php:564 includes/class-mla-data.php:1473
180
+ #: includes/class-mla-data.php:1671 includes/class-mla-data.php:1677
181
+ #: includes/class-mla-data.php:2074 includes/class-mla-data.php:2078
182
+ #: includes/class-mla-data.php:3221 includes/class-mla-data.php:3263
183
+ #: includes/class-mla-data.php:3307 includes/class-mla-data.php:3687
184
+ #: includes/class-mla-data.php:3700 includes/class-mla-data.php:3722
185
+ #: includes/class-mla-data.php:3936 includes/class-mla-data.php:3982
186
+ #: includes/class-mla-data.php:4015 includes/class-mla-data.php:4031
187
+ #: includes/class-mla-data.php:4284 includes/class-mla-edit-media.php:318
188
+ #: includes/class-mla-edit-media.php:842 includes/class-mla-edit-media.php:884
189
+ #: includes/class-mla-main.php:651 includes/class-mla-main.php:783
190
+ #: includes/class-mla-main.php:785 includes/class-mla-main.php:788
191
+ #: includes/class-mla-main.php:1190 includes/class-mla-main.php:1246
192
+ #: includes/class-mla-main.php:1271 includes/class-mla-main.php:1402
193
+ #: includes/class-mla-main.php:1452 includes/class-mla-main.php:1548
194
+ #: includes/class-mla-main.php:1577 includes/class-mla-main.php:1715
195
+ #: includes/class-mla-main.php:1722 includes/class-mla-main.php:1882
196
+ #: includes/class-mla-main.php:2006 includes/class-mla-main.php:2277
197
+ #: includes/class-mla-main.php:2285 includes/class-mla-main.php:2309
198
+ #: includes/class-mla-main.php:2317 includes/class-mla-main.php:2349
199
+ #: includes/class-mla-main.php:2357 includes/class-mla-media-modal.php:600
200
+ #: includes/class-mla-mime-types.php:789 includes/class-mla-mime-types.php:1181
201
+ #: includes/class-mla-mime-types.php:1269
202
+ #: includes/class-mla-mime-types.php:1415
203
+ #: includes/class-mla-mime-types.php:1438
204
+ #: includes/class-mla-mime-types.php:2237
205
+ #: includes/class-mla-mime-types.php:2248
206
+ #: includes/class-mla-mime-types.php:2261
207
+ #: includes/class-mla-mime-types.php:2269
208
+ #: includes/class-mla-mime-types.php:2274
209
+ #: includes/class-mla-mime-types.php:2317
210
+ #: includes/class-mla-mime-types.php:2336
211
+ #: includes/class-mla-mime-types.php:2387
212
+ #: includes/class-mla-mime-types.php:2421
213
+ #: includes/class-mla-mime-types.php:2506
214
+ #: includes/class-mla-mime-types.php:2585
215
+ #: includes/class-mla-mime-types.php:2594
216
+ #: includes/class-mla-mime-types.php:2626 includes/class-mla-objects.php:245
217
  #: includes/class-mla-options.php:217 includes/class-mla-options.php:421
218
+ #: includes/class-mla-options.php:502 includes/class-mla-options.php:557
219
+ #: includes/class-mla-options.php:1072 includes/class-mla-options.php:1913
220
+ #: includes/class-mla-options.php:2139
221
  #: includes/class-mla-settings-custom-fields-tab.php:173
222
  #: includes/class-mla-settings-custom-fields-tab.php:238
223
  #: includes/class-mla-settings-custom-fields-tab.php:242
233
  #: includes/class-mla-settings-custom-fields-tab.php:956
234
  #: includes/class-mla-settings-custom-fields-tab.php:2029
235
  #: includes/class-mla-settings-documentation-tab.php:97
236
+ #: includes/class-mla-settings-documentation-tab.php:291
237
+ #: includes/class-mla-settings-documentation-tab.php:1260
238
  #: includes/class-mla-settings-iptc-exif-tab.php:175
239
  #: includes/class-mla-settings-iptc-exif-tab.php:241
240
  #: includes/class-mla-settings-iptc-exif-tab.php:245
241
  #: includes/class-mla-settings-iptc-exif-tab.php:280
242
  #: includes/class-mla-settings-iptc-exif-tab.php:308
243
  #: includes/class-mla-settings-iptc-exif-tab.php:312
244
+ #: includes/class-mla-settings-iptc-exif-tab.php:346
245
+ #: includes/class-mla-settings-iptc-exif-tab.php:422
246
+ #: includes/class-mla-settings-iptc-exif-tab.php:631
247
+ #: includes/class-mla-settings-iptc-exif-tab.php:799
248
+ #: includes/class-mla-settings-iptc-exif-tab.php:1000
249
+ #: includes/class-mla-settings-iptc-exif-tab.php:1004
250
+ #: includes/class-mla-settings-iptc-exif-tab.php:1028
251
+ #: includes/class-mla-settings-iptc-exif-tab.php:2259
252
  #: includes/class-mla-settings-shortcodes-tab.php:79
253
  #: includes/class-mla-settings-shortcodes-tab.php:90
254
  #: includes/class-mla-settings-shortcodes-tab.php:94
269
  #: includes/class-mla-settings-view-tab.php:275
270
  #: includes/class-mla-settings-view-tab.php:433
271
  #: includes/class-mla-settings-view-tab.php:447
272
+ #: includes/class-mla-settings.php:589 includes/class-mla-settings.php:727
273
+ #: includes/class-mla-settings.php:764 includes/class-mla-settings.php:904
274
+ #: includes/class-mla-settings.php:1318 includes/class-mla-settings.php:1369
275
+ #: includes/class-mla-settings.php:1457 includes/class-mla-settings.php:1490
276
+ #: includes/class-mla-settings.php:1493 includes/class-mla-settings.php:1497
277
+ #: includes/class-mla-settings.php:1790 includes/class-mla-settings.php:1794
278
+ #: includes/class-mla-settings.php:1805 includes/class-mla-settings.php:1812
279
+ #: includes/class-mla-settings.php:1821 includes/class-mla-settings.php:1858
280
+ #: includes/class-mla-settings.php:1866 includes/class-mla-settings.php:1875
281
  #: includes/class-mla-shortcode-support.php:2059
282
  #: includes/class-mla-shortcode-support.php:2150
283
  #: includes/class-mla-shortcode-support.php:3416
284
  #: includes/class-mla-shortcode-support.php:3543
285
  #: includes/class-mla-shortcode-support.php:3575
286
+ #: includes/class-mla-shortcode-support.php:4609
287
+ #: includes/class-mla-shortcode-support.php:5013
288
+ #: includes/class-mla-shortcode-support.php:5050
 
289
  #: includes/class-mla-thumbnail-generation.php:428
290
  #: includes/class-mla-thumbnail-generation.php:440
291
+ #: includes/class-mla-thumbnail-generation.php:452
292
+ #: includes/class-mla-thumbnail-generation.php:496
293
  msgid "ERROR"
294
  msgstr ""
295
 
296
+ #: includes/class-mla-ajax.php:298 includes/class-mla-main.php:1715
297
  msgid "No post ID found"
298
  msgstr ""
299
 
300
+ #: includes/class-mla-ajax.php:305 includes/class-mla-main.php:1722
301
  #: includes/class-mla-polylang-support.php:260
302
  msgid "You are not allowed to edit this Attachment."
303
  msgstr ""
318
  msgid "Check this option to add support for Attachment Tags."
319
  msgstr ""
320
 
321
+ #: includes/class-mla-core-options.php:424 includes/class-mla-settings.php:1062
322
  msgid "Where-used Reporting"
323
  msgstr ""
324
 
335
  msgstr ""
336
 
337
  #: includes/class-mla-core-options.php:442
338
+ #: includes/class-mla-edit-media.php:777 includes/class-mla-edit-media.php:1029
339
  msgid "Featured in"
340
  msgstr ""
341
 
344
  msgid "Enabled"
345
  msgstr ""
346
 
 
 
 
 
 
 
 
 
 
 
 
347
  #: includes/class-mla-core-options.php:448
348
  msgid "Search database posts and pages for Featured Image attachments."
349
  msgstr ""
350
 
351
  #: includes/class-mla-core-options.php:452
352
+ #: includes/class-mla-edit-media.php:781 includes/class-mla-edit-media.php:1068
353
  msgid "Inserted in"
354
  msgstr ""
355
 
365
  msgstr ""
366
 
367
  #: includes/class-mla-core-options.php:462
368
+ #: includes/class-mla-edit-media.php:785 includes/class-mla-edit-media.php:1103
369
+ #: includes/class-mla-settings.php:1571
370
  msgid "Gallery in"
371
  msgstr ""
372
 
376
  msgstr ""
377
 
378
  #: includes/class-mla-core-options.php:467
379
+ #: includes/class-mla-core-options.php:477 includes/class-mla-main.php:2180
380
  #: includes/class-mla-settings-custom-fields-tab.php:733
381
+ #: includes/class-mla-settings-iptc-exif-tab.php:814
382
  msgid "Refresh"
383
  msgstr ""
384
 
395
  msgstr ""
396
 
397
  #: includes/class-mla-core-options.php:472
398
+ #: includes/class-mla-edit-media.php:789 includes/class-mla-edit-media.php:1138
399
+ #: includes/class-mla-settings.php:1581
400
  msgid "MLA Gallery in"
401
  msgstr ""
402
 
408
  "Cached."
409
  msgstr ""
410
 
411
+ #: includes/class-mla-core-options.php:482 includes/class-mla-settings.php:1062
412
  msgid "Taxonomy Support"
413
  msgstr ""
414
 
451
  msgstr ""
452
 
453
  #: includes/class-mla-core-options.php:506
454
+ #: includes/class-mla-core-options.php:742 includes/class-mla-settings.php:1093
455
+ #: includes/class-mla-settings.php:1094 includes/class-mla-settings.php:1095
456
  msgid "For complete documentation"
457
  msgstr ""
458
 
459
  #: includes/class-mla-core-options.php:506
460
+ #: includes/class-mla-core-options.php:742 includes/class-mla-settings.php:1093
461
+ #: includes/class-mla-settings.php:1094 includes/class-mla-settings.php:1095
462
  msgid "click here"
463
  msgstr ""
464
 
556
  msgid "Order By"
557
  msgstr ""
558
 
 
 
 
 
 
 
 
 
 
559
  #: includes/class-mla-core-options.php:603
560
  msgid "ID/Parent"
561
  msgstr ""
577
  msgstr ""
578
 
579
  #: includes/class-mla-core-options.php:614
580
+ #: includes/class-mla-core-options.php:870
581
  msgid "Choose the sort order."
582
  msgstr ""
583
 
584
+ #: includes/class-mla-core-options.php:618 includes/class-mla-main.php:572
585
+ msgid "Entries per page"
586
+ msgstr ""
587
+
588
+ #: includes/class-mla-core-options.php:622
589
+ msgid "Enter the number of Media/Assistant submenu table items per page."
590
+ msgstr ""
591
+
592
+ #: includes/class-mla-core-options.php:631
593
  msgid "Views Width"
594
  msgstr ""
595
 
596
+ #: includes/class-mla-core-options.php:636
597
  msgid "Enter the width for the views list, in pixels (px) or percent (%)"
598
  msgstr ""
599
 
600
+ #: includes/class-mla-core-options.php:640
601
  msgid "Icon Size"
602
  msgstr ""
603
 
604
+ #: includes/class-mla-core-options.php:645
605
  msgid "Enter the size of the thumbnail/icon images, in pixels"
606
  msgstr ""
607
 
608
+ #: includes/class-mla-core-options.php:649
609
  msgid "Show Primary Column File Name"
610
  msgstr ""
611
 
612
+ #: includes/class-mla-core-options.php:653
613
  msgid ""
614
  "Check/uncheck this option to show/omit the file name from the primary column."
615
  msgstr ""
616
 
617
+ #: includes/class-mla-core-options.php:657
618
  msgid "QuickTags editor for bulk description"
619
  msgstr ""
620
 
621
+ #: includes/class-mla-core-options.php:661
622
  msgid ""
623
  "Check this option to use the QuickTags editor for the Description field in "
624
  "the Bulk Edit area."
625
  msgstr ""
626
 
627
+ #: includes/class-mla-core-options.php:665
628
  msgid "Bulk Chunk Size"
629
  msgstr ""
630
 
631
+ #: includes/class-mla-core-options.php:670
632
  msgid "Enter the size of the Bulk Edit and Map All processing chunks"
633
  msgstr ""
634
 
635
+ #: includes/class-mla-core-options.php:674
636
  msgid "Taxonomy Filter parameters"
637
  msgstr ""
638
 
639
+ #: includes/class-mla-core-options.php:679
640
  msgid "Maximum Depth"
641
  msgstr ""
642
 
643
+ #: includes/class-mla-core-options.php:684
644
  msgid ""
645
  "Enter the number of levels displayed for hierarchial taxonomies; enter zero "
646
  "for no limit."
647
  msgstr ""
648
 
649
+ #: includes/class-mla-core-options.php:688
650
  msgid "Include Children"
651
  msgstr ""
652
 
653
+ #: includes/class-mla-core-options.php:692
654
  msgid ""
655
  "Check/uncheck this option to include/exclude children for hierarchical "
656
  "taxonomies."
657
  msgstr ""
658
 
659
+ #: includes/class-mla-core-options.php:696
660
  msgid "Search Media Defaults"
661
  msgstr ""
662
 
663
+ #: includes/class-mla-core-options.php:701
664
  msgid "Display Search Controls"
665
  msgstr ""
666
 
667
+ #: includes/class-mla-core-options.php:705
668
+ #: includes/class-mla-core-options.php:831
669
  msgid ""
670
  "Check/uncheck this option to display/hide the and/or connector and search "
671
  "fields controls."
672
  msgstr ""
673
 
674
+ #: includes/class-mla-core-options.php:709
675
  msgid ""
676
  "Use these controls to set defaults for the and/or connector and search "
677
  "fields controls.<br>These defaults will be used for the Search Media boxes "
678
  "on both the Media/Assistant submenu<br>and the Media Manager Modal Window."
679
  msgstr ""
680
 
681
+ #: includes/class-mla-core-options.php:723
682
  msgid "Media/Edit Media Enhancements"
683
  msgstr ""
684
 
685
+ #: includes/class-mla-core-options.php:728
686
  msgid "Enable &quot;enhanced checklist&quot; taxonomies"
687
  msgstr ""
688
 
689
+ #: includes/class-mla-core-options.php:732
690
  msgid ""
691
  "Check this option to enable the \"? Search\" feature for hierarchical "
692
  "taxonomies, e.g., Att. Categories.<br>&nbsp;&nbsp;This option also enables "
693
  "the \"checklist-style\" support for flat taxonomies, e.g., Att. Tags."
694
  msgstr ""
695
 
696
+ #: includes/class-mla-core-options.php:736
697
  msgid "Enable Edit Media additional meta boxes"
698
  msgstr ""
699
 
700
+ #: includes/class-mla-core-options.php:740
701
  msgid ""
702
  "Check this option to add \"Parent Info\", \"Menu Order\", \"Attachment "
703
  "Metadata\" and four \"where-used\" meta boxes to the Edit Media screen."
704
  msgstr ""
705
 
706
+ #: includes/class-mla-core-options.php:741
707
  msgid "You can also use Filters to customize the meta boxes."
708
  msgstr ""
709
 
710
+ #: includes/class-mla-core-options.php:746
711
  msgid "Media/Add New Enhancements"
712
  msgstr ""
713
 
714
+ #: includes/class-mla-core-options.php:751
715
  msgid "Enable &quot;bulk edit&quot; area"
716
  msgstr ""
717
 
718
+ #: includes/class-mla-core-options.php:755
719
  msgid ""
720
  "Check this option to enable the \"Bulk Edit area\" feature on the Media/Add "
721
  "New screen."
722
  msgstr ""
723
 
724
+ #: includes/class-mla-core-options.php:759
725
  msgid "&quot;bulk edit&quot; area on top"
726
  msgstr ""
727
 
728
+ #: includes/class-mla-core-options.php:763
729
  msgid ""
730
  "Check this option to move the \"Bulk Edit area\" to the top of the Media/Add "
731
  "New screen."
732
  msgstr ""
733
 
734
+ #: includes/class-mla-core-options.php:767
735
  msgid "&quot;bulk edit&quot; area initially open"
736
  msgstr ""
737
 
738
+ #: includes/class-mla-core-options.php:770
739
  msgid ""
740
  "Check this option to automatically open the \"Bulk Edit area\" when the "
741
  "Media/Add New screen is displayed."
742
  msgstr ""
743
 
744
+ #: includes/class-mla-core-options.php:774
745
  msgid "Media Manager/Media Grid Enhancements"
746
  msgstr ""
747
 
748
+ #: includes/class-mla-core-options.php:779
749
  msgid "Enable Media Grid Enhancements"
750
  msgstr ""
751
 
752
+ #: includes/class-mla-core-options.php:782
753
  msgid ""
754
  "Check/uncheck this option to enable/disable Media Library Grid View "
755
  "Enhancements."
756
  msgstr ""
757
 
758
+ #: includes/class-mla-core-options.php:786
759
  msgid "Enable Media Manager Enhancements"
760
  msgstr ""
761
 
762
+ #: includes/class-mla-core-options.php:789
763
  msgid ""
764
  "Check/uncheck this option to enable/disable Media Manager Modal Window "
765
  "Enhancements."
766
  msgstr ""
767
 
768
+ #: includes/class-mla-core-options.php:793
769
  msgid "Media Manager Enhanced MIME Type filter"
770
  msgstr ""
771
 
772
+ #: includes/class-mla-core-options.php:796
773
  msgid ""
774
  "Check this option to filter by more MIME Types, e.g., text, applications."
775
  msgstr ""
776
 
777
+ #: includes/class-mla-core-options.php:800
778
  msgid "Media Manager Month and Year filter"
779
  msgstr ""
780
 
781
+ #: includes/class-mla-core-options.php:803
782
  msgid "Check this option to filter by month and year uploaded."
783
  msgstr ""
784
 
785
+ #: includes/class-mla-core-options.php:807
786
  msgid "Media Manager Category/Tag filter"
787
  msgstr ""
788
 
789
+ #: includes/class-mla-core-options.php:810
790
  msgid "Check this option to filter by taxonomy terms."
791
  msgstr ""
792
 
793
+ #: includes/class-mla-core-options.php:814
794
  msgid "Media Manager Terms Search popup"
795
  msgstr ""
796
 
797
+ #: includes/class-mla-core-options.php:817
798
  msgid "Check this option to enable the \"Terms Search\" popup window."
799
  msgstr ""
800
 
801
+ #: includes/class-mla-core-options.php:821
802
  msgid "Media Manager Enhanced Search Media box"
803
  msgstr ""
804
 
805
+ #: includes/class-mla-core-options.php:824
806
  msgid "Check this option to enable search box enhancements."
807
  msgstr ""
808
 
809
+ #: includes/class-mla-core-options.php:828
810
  msgid "Media Manager Enhanced Search Media Controls"
811
  msgstr ""
812
 
813
+ #: includes/class-mla-core-options.php:835
814
  msgid "Media Manager Checklist meta boxes"
815
  msgstr ""
816
 
817
+ #: includes/class-mla-core-options.php:838
818
  msgid ""
819
  "Check this option to enable MLA-enhanced meta boxes in the \"ATTACHMENT "
820
  "DETAILS\" pane.<br>&nbsp;&nbsp;This option is for any taxonomy that uses a "
821
  "<strong>\"checklist-style\"</strong> meta box."
822
  msgstr ""
823
 
824
+ #: includes/class-mla-core-options.php:842
825
  msgid "Media Manager Flat meta boxes"
826
  msgstr ""
827
 
828
+ #: includes/class-mla-core-options.php:845
829
  msgid ""
830
  "Check this option to enable MLA-enhanced meta boxes in the \"ATTACHMENT "
831
  "DETAILS\" pane.<br>&nbsp;&nbsp;This option is for <strong>flat taxonomies</"
833
  "style\" meta box."
834
  msgstr ""
835
 
836
+ #: includes/class-mla-core-options.php:849
837
  msgid "Media Manager auto-fill meta boxes"
838
  msgstr ""
839
 
840
+ #: includes/class-mla-core-options.php:852
841
  msgid ""
842
  "Check this option to automatically fill MLA-enhanced meta boxes in the "
843
  "\"ATTACHMENT DETAILS\" pane<br>&nbsp;&nbsp;when the item is selected."
844
  msgstr ""
845
 
846
+ #: includes/class-mla-core-options.php:856
847
  msgid "Media Manager Order By"
848
  msgstr ""
849
 
850
+ #: includes/class-mla-core-options.php:860
851
+ #: includes/class-mla-core-options.php:869
852
+ #: includes/class-mla-core-options.php:891
853
+ #: includes/class-mla-core-options.php:905
854
+ #: includes/class-mla-core-options.php:919 includes/class-mla-settings.php:1144
855
  msgid "Media Manager Default"
856
  msgstr ""
857
 
858
+ #: includes/class-mla-core-options.php:860
859
  msgid "Title/Name"
860
  msgstr ""
861
 
862
+ #: includes/class-mla-core-options.php:861
863
  msgid ""
864
  "If you want to override the Media Manager default,<br>&nbsp;&nbsp;select a "
865
  "column for the sort order of the Media Library listing."
866
  msgstr ""
867
 
868
+ #: includes/class-mla-core-options.php:865
869
  msgid "Media Manager Order"
870
  msgstr ""
871
 
872
+ #: includes/class-mla-core-options.php:874
873
  msgid "Attachment Display Settings"
874
  msgstr ""
875
 
876
+ #: includes/class-mla-core-options.php:879
877
  msgid "Media Manager Apply Display Settings"
878
  msgstr ""
879
 
880
+ #: includes/class-mla-core-options.php:882
881
  msgid ""
882
  "Check this option to always start with the Attachment Display Settings set "
883
  "here,<br>&nbsp;&nbsp;overriding browser-/cookie-based defaults."
884
  msgstr ""
885
 
886
+ #: includes/class-mla-core-options.php:886
887
+ #: includes/class-mla-core-options.php:888
888
  msgid "Alignment"
889
  msgstr ""
890
 
891
+ #: includes/class-mla-core-options.php:888
892
+ #: includes/class-mla-core-options.php:902
893
+ #: includes/class-mla-core-options.php:916
894
  #, php-format
895
  msgid ""
896
  "Select a value for the default %1$s option in the Attachment Display "
897
  "Settings."
898
  msgstr ""
899
 
900
+ #: includes/class-mla-core-options.php:891
901
  msgid "Left"
902
  msgstr ""
903
 
904
+ #: includes/class-mla-core-options.php:891
905
  msgid "Center"
906
  msgstr ""
907
 
908
+ #: includes/class-mla-core-options.php:891
909
  msgid "Right"
910
  msgstr ""
911
 
912
+ #: includes/class-mla-core-options.php:900
913
+ #: includes/class-mla-core-options.php:902
914
  msgid "Link To"
915
  msgstr ""
916
 
917
+ #: includes/class-mla-core-options.php:905
918
  msgid "Media File"
919
  msgstr ""
920
 
921
+ #: includes/class-mla-core-options.php:905
922
  msgid "Attachment Page"
923
  msgstr ""
924
 
925
+ #: includes/class-mla-core-options.php:905
926
  msgid "Custom URL"
927
  msgstr ""
928
 
929
+ #: includes/class-mla-core-options.php:914
930
+ #: includes/class-mla-core-options.php:916
931
  msgid "Size"
932
  msgstr ""
933
 
934
+ #: includes/class-mla-core-options.php:919
935
+ #: includes/class-mla-thumbnail-generation.php:582
936
+ #: includes/class-mla-thumbnail-generation.php:648
937
  msgid "Thumbnail"
938
  msgstr ""
939
 
940
+ #: includes/class-mla-core-options.php:919
941
  msgid "Medium"
942
  msgstr ""
943
 
944
+ #: includes/class-mla-core-options.php:919
945
  msgid "Large"
946
  msgstr ""
947
 
948
+ #: includes/class-mla-core-options.php:919
949
  msgid "Full Size"
950
  msgstr ""
951
 
952
+ #: includes/class-mla-core-options.php:928
953
  msgid "Uninstall (Delete) Plugin Settings"
954
  msgstr ""
955
 
956
+ #: includes/class-mla-core-options.php:933
957
  msgid "Delete Option Settings"
958
  msgstr ""
959
 
960
+ #: includes/class-mla-core-options.php:936
961
  msgid ""
962
  "Check this option to remove all MLA option settings from the database when "
963
  "the plugin is deleted.<br>&nbsp;&nbsp;<strong>You can make a backup copy</"
964
  "strong> of your settings below by clicking \""
965
  msgstr ""
966
 
967
+ #: includes/class-mla-core-options.php:936 includes/class-mla-settings.php:1064
968
  msgid "Export ALL Settings"
969
  msgstr ""
970
 
971
+ #: includes/class-mla-core-options.php:940
972
  msgid "Delete Option Settings Backups"
973
  msgstr ""
974
 
975
+ #: includes/class-mla-core-options.php:943
976
  msgid ""
977
  "Check this option to remove the <code>/wp-content/mla-backup</code> "
978
  "directory and its contents when the plugin is deleted."
979
  msgstr ""
980
 
981
+ #: includes/class-mla-core-options.php:947
982
  msgid "Default [mla_gallery] Templates and Settings"
983
  msgstr ""
984
 
985
+ #: includes/class-mla-core-options.php:952
986
+ #: includes/class-mla-core-options.php:958
987
+ #: includes/class-mla-core-options.php:996
988
+ #: includes/class-mla-core-options.php:1002
989
  msgid "Style Template"
990
  msgstr ""
991
 
992
+ #: includes/class-mla-core-options.php:958
993
+ #: includes/class-mla-core-options.php:968
994
+ #: includes/class-mla-core-options.php:1002
995
+ #: includes/class-mla-core-options.php:1012
996
  #, php-format
997
  msgid "Select the default %1$s for your %2$s shortcodes."
998
  msgstr ""
999
 
1000
+ #: includes/class-mla-core-options.php:962
1001
+ #: includes/class-mla-core-options.php:1006
1002
  msgid "Markup Template"
1003
  msgstr ""
1004
 
1005
+ #: includes/class-mla-core-options.php:968
1006
+ #: includes/class-mla-core-options.php:1012
1007
  #: includes/class-mla-settings-shortcodes-tab.php:85
1008
  msgid "markup template"
1009
  msgstr ""
1010
 
1011
+ #: includes/class-mla-core-options.php:972
1012
+ #: includes/class-mla-core-options.php:1016
1013
  msgid "Default columns"
1014
  msgstr ""
1015
 
1016
+ #: includes/class-mla-core-options.php:976
1017
  msgid ""
1018
  "Enter the number of [mla_tag_cloud] columns; must be a positive integer."
1019
  msgstr ""
1020
 
1021
+ #: includes/class-mla-core-options.php:980
1022
+ #: includes/class-mla-core-options.php:1024
1023
  msgid "Default mla_margin"
1024
  msgstr ""
1025
 
1026
+ #: includes/class-mla-core-options.php:984
1027
+ #: includes/class-mla-core-options.php:1028
1028
  msgid ""
1029
  "Enter the CSS \"margin\" property value, in length (px, em, pt, etc.), "
1030
  "percent (%), \"auto\" or \"inherit\".<br>&nbsp;&nbsp;Enter \"none\" to "
1031
  "remove the property entirely."
1032
  msgstr ""
1033
 
1034
+ #: includes/class-mla-core-options.php:988
1035
+ #: includes/class-mla-core-options.php:1032
1036
  msgid "Default mla_itemwidth"
1037
  msgstr ""
1038
 
1039
+ #: includes/class-mla-core-options.php:992
1040
+ #: includes/class-mla-core-options.php:1036
1041
  msgid ""
1042
  "Enter the CSS \"width\" property value, in length (px, em, pt, etc.), "
1043
  "percent (%), \"auto\" or \"inherit\".<br>&nbsp;&nbsp;Enter \"calculate"
1047
  "the property entirely."
1048
  msgstr ""
1049
 
1050
+ #: includes/class-mla-core-options.php:1020
1051
  msgid "Enter the number of [mla_gallery] columns; must be a positive integer."
1052
  msgstr ""
1053
 
1054
+ #: includes/class-mla-core-options.php:1040
1055
  msgid "Thumbnail Substitution Support, mla_viewer"
1056
  msgstr ""
1057
 
1058
+ #: includes/class-mla-core-options.php:1045
1059
  msgid "Enable thumbnail substitution"
1060
  msgstr ""
1061
 
1062
+ #: includes/class-mla-core-options.php:1048
1063
  msgid ""
1064
  "Check this option to allow the \"mla_viewer\" to generate thumbnail images "
1065
  "for PDF documents. Thumbnails are generated dynamically, each time the item "
1068
  "strong>"
1069
  msgstr ""
1070
 
1071
+ #: includes/class-mla-core-options.php:1052
1072
  msgid "Enable Featured Images"
1073
  msgstr ""
1074
 
1075
+ #: includes/class-mla-core-options.php:1055
1076
  msgid ""
1077
  "Check this option to extend Featured Image support to all Media Library "
1078
  "items. The Featured Image can be used as a thumbnail image for the item in "
1079
  "an [mla_gallery] display."
1080
  msgstr ""
1081
 
1082
+ #: includes/class-mla-core-options.php:1059
1083
  msgid "Enable Featured Image Generation"
1084
  msgstr ""
1085
 
1086
+ #: includes/class-mla-core-options.php:1062
1087
  msgid ""
1088
  "Check this option to enable the \"Thumbnail\" generation action in the Media/"
1089
  "Assistant submenu Bulk Actions dropdown."
1090
  msgstr ""
1091
 
1092
+ #: includes/class-mla-core-options.php:1066
1093
  msgid "Enable explicit Ghostscript check"
1094
  msgstr ""
1095
 
1096
+ #: includes/class-mla-core-options.php:1069
1097
  msgid ""
1098
  "Check this option to enable the explicit check for Ghostscript support "
1099
  "required for thumbnail generation. If your Ghostscript software is in a non-"
1102
  "leave this option checked unless you know it is safe to turn it off."
1103
  msgstr ""
1104
 
1105
+ #: includes/class-mla-core-options.php:1073
1106
  msgid "Ghostscript path"
1107
  msgstr ""
1108
 
1109
+ #: includes/class-mla-core-options.php:1077
1110
  msgid ""
1111
  "If your &ldquo;gs&rdquo; executable is in a non-standard location, enter the "
1112
  "full path and filename here, e.g., &ldquo;/usr/bin/gs&rdquo;. It will "
1113
  "override the search for Ghostscript in other places."
1114
  msgstr ""
1115
 
1116
+ #: includes/class-mla-core-options.php:1097
1117
  msgid "Enable custom field mapping"
1118
  msgstr ""
1119
 
1120
+ #: includes/class-mla-core-options.php:1100
1121
+ #: includes/class-mla-core-options.php:1107
1122
+ #: includes/class-mla-core-options.php:1114
1123
+ #: includes/class-mla-core-options.php:1131
1124
  msgid "See Help menu."
1125
  msgstr ""
1126
 
1127
+ #: includes/class-mla-core-options.php:1104
1128
  msgid "Enable custom field mapping when adding new media"
1129
  msgstr ""
1130
 
1131
+ #: includes/class-mla-core-options.php:1111
1132
  msgid "Enable custom field mapping when updating media metadata"
1133
  msgstr ""
1134
 
1135
+ #: includes/class-mla-core-options.php:1118
1136
  msgid ""
1137
  "Update the custom field mapping values above, then click Save Changes to "
1138
  "make the updates permanent.<br>You can also make temporary updates and click "
1140
  "saving any rule changes."
1141
  msgstr ""
1142
 
1143
+ #: includes/class-mla-core-options.php:1128
1144
  msgid "Enable IPTC/EXIF Mapping"
1145
  msgstr ""
1146
 
1147
+ #: includes/class-mla-core-options.php:1135
1148
  msgid "Enable IPTC/EXIF Mapping when adding new media"
1149
  msgstr ""
1150
 
1151
+ #: includes/class-mla-core-options.php:1138
1152
  msgid ""
1153
  "Check this option to enable mapping when uploading new media (attachments)."
1154
  "<br>&nbsp;&nbsp;Does NOT affect the operation of the \"Map\" buttons on the "
1155
  "bulk edit, single edit and settings screens."
1156
  msgstr ""
1157
 
1158
+ #: includes/class-mla-core-options.php:1142
1159
  msgid "Enable IPTC/EXIF Mapping when updating media metadata"
1160
  msgstr ""
1161
 
1162
+ #: includes/class-mla-core-options.php:1145
1163
  msgid ""
1164
  "Check this option to enable mapping when media (attachments) metadata is "
1165
  "regenerated,<br>&nbsp;&nbsp;e.g., when the Media/Edit Media \"Edit Image\" "
1166
  "functions are used."
1167
  msgstr ""
1168
 
1169
+ #: includes/class-mla-core-options.php:1149
1170
  msgid ""
1171
  "Update the standard field mapping values above, then click <strong>Save "
1172
  "Changes</strong> to make the updates permanent.<br>You can also make "
1175
  "changes."
1176
  msgstr ""
1177
 
1178
+ #: includes/class-mla-core-options.php:1159
1179
  msgid ""
1180
  "Update the taxonomy term mapping values above, then click <strong>Save "
1181
  "Changes</strong> or <strong>Map All Attachments, Taxonomy Terms Now</strong>."
1182
  msgstr ""
1183
 
1184
+ #: includes/class-mla-core-options.php:1169
1185
  msgid ""
1186
  "<strong>Update</strong> individual custom field mapping values above, or "
1187
  "make several updates and click <strong>Save Changes</strong> below to apply "
1192
  "changes."
1193
  msgstr ""
1194
 
1195
+ #: includes/class-mla-core-options.php:1179
1196
  msgid "IPTC/EXIF Mapping help"
1197
  msgstr ""
1198
 
1199
+ #: includes/class-mla-core-options.php:1190 includes/class-mla-data.php:3985
1200
+ #: includes/class-mla-edit-media.php:429 includes/class-mla-main.php:2146
1201
  msgid "Name/Slug"
1202
  msgstr ""
1203
 
1204
+ #: includes/class-mla-core-options.php:1197 includes/class-mla-data.php:4028
1205
+ #: includes/class-mla-edit-media.php:432 includes/class-mla-list-table.php:1342
1206
+ #: includes/class-mla-main.php:2150 includes/class-mla-options.php:459
1207
  #: includes/mla-main-search-box-template.php:51
1208
  #: includes/mla-media-modal-js-template.php:48
1209
  msgid "ALT Text"
1210
  msgstr ""
1211
 
1212
+ #: includes/class-mla-core-options.php:1204 includes/class-mla-data.php:4041
1213
+ #: includes/class-mla-edit-media.php:430 includes/class-mla-main.php:2147
1214
  #: includes/class-mla-options.php:462
1215
  #: includes/mla-main-search-box-template.php:53
1216
  #: includes/mla-media-modal-js-template.php:53
1217
  msgid "Caption"
1218
  msgstr ""
1219
 
1220
+ #: includes/class-mla-core-options.php:1211 includes/class-mla-data.php:4050
1221
+ #: includes/class-mla-edit-media.php:431 includes/class-mla-main.php:2148
1222
  #: includes/class-mla-options.php:465
1223
  #: includes/class-mla-settings-upload-tab.php:174
1224
  #: includes/class-mla-settings-upload-tab.php:542
1235
  msgid "Description"
1236
  msgstr ""
1237
 
1238
+ #: includes/class-mla-core-options.php:1218 includes/class-mla-data.php:4112
1239
+ #: includes/class-mla-data.php:4121 includes/class-mla-edit-media.php:433
1240
+ #: includes/class-mla-edit-media.php:627 includes/class-mla-main.php:2152
1241
+ msgid "Uploaded on"
1242
+ msgstr ""
1243
+
1244
+ #: includes/class-mla-core-options.php:1238
1245
  msgid "Enable View and Post MIME Type Support"
1246
  msgstr ""
1247
 
1248
+ #: includes/class-mla-core-options.php:1241
1249
  msgid ""
1250
  "Check/uncheck this option to enable/disable Post MIME Type Support, then "
1251
  "click <strong>Save Changes</strong> to record the new setting."
1252
  msgstr ""
1253
 
1254
+ #: includes/class-mla-core-options.php:1250
1255
  msgid "Post MIME Types help."
1256
  msgstr ""
1257
 
1258
+ #: includes/class-mla-core-options.php:1253
1259
+ #: includes/class-mla-mime-types.php:1670
1260
  #: includes/class-mla-settings-custom-fields-tab.php:2454
1261
+ #: includes/class-mla-settings-documentation-tab.php:1535
1262
+ #: includes/class-mla-settings-iptc-exif-tab.php:2722
1263
  #: includes/class-mla-settings-shortcodes-tab.php:1970
1264
  msgctxt "table_view_singular"
1265
  msgid "All"
1266
  msgstr ""
1267
 
1268
+ #: includes/class-mla-core-options.php:1254
1269
+ #: includes/class-mla-mime-types.php:1671
1270
  #: includes/class-mla-settings-custom-fields-tab.php:2455
1271
+ #: includes/class-mla-settings-documentation-tab.php:1536
1272
+ #: includes/class-mla-settings-iptc-exif-tab.php:2723
1273
  #: includes/class-mla-settings-shortcodes-tab.php:1971
1274
  msgctxt "table_view_plural"
1275
  msgid "All"
1276
  msgstr ""
1277
 
1278
+ #: includes/class-mla-core-options.php:1259
1279
+ #: includes/class-mla-core-options.php:1313
1280
+ #: includes/class-mla-core-options.php:1322
1281
+ #: includes/class-mla-core-options.php:1331
1282
  msgctxt "post_mime_types_description"
1283
  msgid "Built-in view"
1284
  msgstr ""
1285
 
1286
+ #: includes/class-mla-core-options.php:1262
1287
  msgctxt "table_view_singular"
1288
  msgid "Image"
1289
  msgstr ""
1290
 
1291
+ #: includes/class-mla-core-options.php:1263
1292
  msgctxt "table_view_plural"
1293
  msgid "Images"
1294
  msgstr ""
1295
 
1296
+ #: includes/class-mla-core-options.php:1268
1297
  msgctxt "post_mime_types_description"
1298
  msgid "All image subtypes"
1299
  msgstr ""
1300
 
1301
+ #: includes/class-mla-core-options.php:1271
1302
  msgctxt "table_view_singular"
1303
  msgid "Audio"
1304
  msgstr ""
1305
 
1306
+ #: includes/class-mla-core-options.php:1272
1307
  msgctxt "table_view_plural"
1308
  msgid "Audio"
1309
  msgstr ""
1310
 
1311
+ #: includes/class-mla-core-options.php:1277
1312
  msgctxt "post_mime_types_description"
1313
  msgid "All audio subtypes"
1314
  msgstr ""
1315
 
1316
+ #: includes/class-mla-core-options.php:1280
1317
  msgctxt "table_view_singular"
1318
  msgid "Video"
1319
  msgstr ""
1320
 
1321
+ #: includes/class-mla-core-options.php:1281
1322
  msgctxt "table_view_plural"
1323
  msgid "Video"
1324
  msgstr ""
1325
 
1326
+ #: includes/class-mla-core-options.php:1286
1327
  msgctxt "post_mime_types_description"
1328
  msgid "All video subtypes"
1329
  msgstr ""
1330
 
1331
+ #: includes/class-mla-core-options.php:1289
1332
  msgctxt "table_view_singular"
1333
  msgid "Text"
1334
  msgstr ""
1335
 
1336
+ #: includes/class-mla-core-options.php:1290
1337
  msgctxt "table_view_plural"
1338
  msgid "Text"
1339
  msgstr ""
1340
 
1341
+ #: includes/class-mla-core-options.php:1295
1342
  msgctxt "post_mime_types_description"
1343
  msgid "All text subtypes"
1344
  msgstr ""
1345
 
1346
+ #: includes/class-mla-core-options.php:1298
1347
  msgctxt "table_view_singular"
1348
  msgid "Application"
1349
  msgstr ""
1350
 
1351
+ #: includes/class-mla-core-options.php:1299
1352
  msgctxt "table_view_plural"
1353
  msgid "Applications"
1354
  msgstr ""
1355
 
1356
+ #: includes/class-mla-core-options.php:1304
1357
  msgctxt "post_mime_types_description"
1358
  msgid "All application subtypes"
1359
  msgstr ""
1360
 
1361
+ #: includes/class-mla-core-options.php:1308
 
 
 
 
 
 
1362
  msgctxt "table_view_plural"
1363
  msgid "Unattached"
1364
  msgstr ""
1365
 
1366
+ #: includes/class-mla-core-options.php:1316
1367
  msgctxt "table_view_singular"
1368
  msgid "Attached"
1369
  msgstr ""
1370
 
1371
+ #: includes/class-mla-core-options.php:1317
1372
  msgctxt "table_view_plural"
1373
  msgid "Attached"
1374
  msgstr ""
1375
 
1376
+ #: includes/class-mla-core-options.php:1325
1377
  msgctxt "table_view_singular"
1378
  msgid "Trash"
1379
  msgstr ""
1380
 
1381
+ #: includes/class-mla-core-options.php:1326
1382
  msgctxt "table_view_plural"
1383
  msgid "Trash"
1384
  msgstr ""
1385
 
1386
+ #: includes/class-mla-core-options.php:1337
1387
  msgid "Enable Upload MIME Type Support"
1388
  msgstr ""
1389
 
1390
+ #: includes/class-mla-core-options.php:1340
1391
  msgid ""
1392
  "Check/uncheck this option to enable/disable Upload MIME Type Support, then "
1393
  "click <strong>Save Changes</strong> to record the new setting."
1394
  msgstr ""
1395
 
1396
+ #: includes/class-mla-core-options.php:1349
1397
  msgid "Upload MIME Types help."
1398
  msgstr ""
1399
 
1400
+ #: includes/class-mla-core-options.php:1354
1401
  msgid "Enable MLA File Type Icons Support"
1402
  msgstr ""
1403
 
1404
+ #: includes/class-mla-core-options.php:1357
1405
  msgid ""
1406
  "Check/uncheck this option to enable/disable MLA File Type Icons Support, "
1407
  "then click <strong>Save Changes</strong> to record the new setting."
1408
  msgstr ""
1409
 
1410
+ #: includes/class-mla-core-options.php:1361
1411
  msgid "Display Limit"
1412
  msgstr ""
1413
 
1414
+ #: includes/class-mla-core-options.php:1365
1415
  msgid ""
1416
  "Enter the maximum number of debug log characters to display; enter zero or "
1417
  "leave blank for no limit."
1418
  msgstr ""
1419
 
1420
+ #: includes/class-mla-core-options.php:1369
1421
  msgid "Debug File"
1422
  msgstr ""
1423
 
1424
+ #: includes/class-mla-core-options.php:1373
1425
  msgid ""
1426
  "Enter the name of an alternate, MLA-specific debug log file; leave blank to "
1427
+ "use the PHP error_log.<br>&nbsp;&nbsp;The WP_CONTENT_DIR value (below) will "
1428
+ "be prepended to the value here, e.g., enter something like \"/uploads/mla.log"
1429
+ "\"."
1430
  msgstr ""
1431
 
1432
+ #: includes/class-mla-core-options.php:1377
1433
  msgid "Replace PHP error_log file"
1434
  msgstr ""
1435
 
1436
+ #: includes/class-mla-core-options.php:1380
1437
  msgid ""
1438
  "Check this option to replace the PHP error_log file with the MLA Debug File."
1439
  "<br>&nbsp;&nbsp;allows capture of PHP messages in the MLA Debug File."
1440
  msgstr ""
1441
 
1442
+ #: includes/class-mla-core-options.php:1384
1443
  msgid "PHP Reporting"
1444
  msgstr ""
1445
 
1446
+ #: includes/class-mla-core-options.php:1388
1447
  msgid ""
1448
  "Enter a numeric error_reporting value, e.g., 0x7FFF or 32767; leave blank to "
1449
  "use the existing PHP error_reporting value."
1450
  msgstr ""
1451
 
1452
+ #: includes/class-mla-core-options.php:1392
1453
  msgid "MLA Reporting"
1454
  msgstr ""
1455
 
1456
+ #: includes/class-mla-core-options.php:1396
1457
  msgid ""
1458
  "Enter a numeric MLA_DEBUG_LEVEL value, e.g., 0x0003 or 3; leave blank to use "
1459
  "the existing MLA_DEBUG_LEVEL value."
1460
  msgstr ""
1461
 
1462
+ #: includes/class-mla-core.php:845
1463
  #, php-format
1464
  msgctxt "error_log"
1465
  msgid "%1$s: mla_load_template file \"%2$s\" not found."
1466
  msgstr ""
1467
 
1468
+ #: includes/class-mla-core.php:863
1469
  #, php-format
1470
  msgctxt "error_log"
1471
  msgid "%1$s: mla_load_template file \"%2$s\" bad source type \"%3$s\"."
1472
  msgstr ""
1473
 
1474
+ #: includes/class-mla-core.php:1271
1475
  #, php-format
1476
  msgid "%1$s: Bad specification part \"%2$s\""
1477
  msgstr ""
1478
 
1479
+ #: includes/class-mla-core.php:1277
1480
  #, php-format
1481
  msgid "%1$s: Bad specification option \"%2$s\""
1482
  msgstr ""
1483
 
1484
+ #: includes/class-mla-core.php:1281
1485
  #, php-format
1486
  msgid "%1$s: Bad specification prefix \"%2$s\""
1487
  msgstr ""
1488
 
1489
+ #: includes/class-mla-core.php:1381
1490
  msgid "Most Used"
1491
  msgstr ""
1492
 
1493
+ #: includes/class-mla-core.php:1410
1494
  #, php-format
1495
  msgid "+ %s"
1496
  msgstr ""
1497
 
1498
+ #: includes/class-mla-core.php:1416 includes/class-mla-main.php:1888
1499
+ #: includes/class-mla-media-modal.php:630
1500
  #: includes/mla-media-modal-js-template.php:28
1501
  #: includes/mla-media-modal-js-template.php:75
1502
  msgid "Search"
1549
 
1550
  #: includes/class-mla-data-query.php:294
1551
  #: includes/class-mla-settings-custom-fields-tab.php:1202
1552
+ #: includes/class-mla-settings-documentation-tab.php:490
1553
+ #: includes/class-mla-settings-iptc-exif-tab.php:1278
1554
  #: includes/class-mla-settings-shortcodes-tab.php:950
1555
  msgctxt "list_table_column"
1556
  msgid "Name"
1596
  msgid "Caption"
1597
  msgstr ""
1598
 
1599
+ #: includes/class-mla-data-query.php:303 includes/class-mla-mime-types.php:599
1600
+ #: includes/class-mla-mime-types.php:672 includes/class-mla-mime-types.php:751
1601
+ #: includes/class-mla-settings-documentation-tab.php:493
1602
  #: includes/class-mla-settings-shortcodes-tab.php:953
1603
  msgctxt "list_table_column"
1604
  msgid "Description"
1605
  msgstr ""
1606
 
1607
+ #: includes/class-mla-data-query.php:304 includes/class-mla-mime-types.php:591
1608
+ #: includes/class-mla-mime-types.php:669
1609
  msgctxt "list_table_column"
1610
  msgid "MIME Type"
1611
  msgstr ""
1640
  msgid "Attached to"
1641
  msgstr ""
1642
 
1643
+ #: includes/class-mla-data-query.php:695 includes/class-mla-edit-media.php:318
1644
+ #: includes/class-mla-main.php:1882 includes/class-mla-main.php:2006
1645
+ #: includes/class-mla-media-modal.php:600 includes/class-mla-mime-types.php:789
1646
+ #: includes/class-mla-mime-types.php:1438
1647
+ #: includes/class-mla-mime-types.php:2626
1648
  #: includes/class-mla-settings-custom-fields-tab.php:552
1649
  #: includes/class-mla-settings-custom-fields-tab.php:718
1650
  #: includes/class-mla-settings-custom-fields-tab.php:2029
1651
+ #: includes/class-mla-settings-documentation-tab.php:291
1652
+ #: includes/class-mla-settings-documentation-tab.php:1260
1653
+ #: includes/class-mla-settings-iptc-exif-tab.php:631
1654
+ #: includes/class-mla-settings-iptc-exif-tab.php:799
1655
+ #: includes/class-mla-settings-iptc-exif-tab.php:2259
1656
  #: includes/class-mla-settings-shortcodes-tab.php:503
1657
  #: includes/class-mla-settings-shortcodes-tab.php:1627
1658
  #: includes/class-mla-settings-upload-tab.php:301
1662
  msgid "%1$s: %2$s non-array \"%3$s\""
1663
  msgstr ""
1664
 
1665
+ #: includes/class-mla-data-query.php:1166
1666
  #, php-format
1667
  msgctxt "error_log"
1668
  msgid "%1$s: _execute_list_table_query $wp_filter = \"%2$s\"."
1669
  msgstr ""
1670
 
1671
+ #: includes/class-mla-data-query.php:1166
1672
+ #: includes/class-mla-data-query.php:1181
1673
+ #: includes/class-mla-data-query.php:1183
1674
+ #: includes/class-mla-data-query.php:1666
1675
+ #: includes/class-mla-data-query.php:1738
1676
+ #: includes/class-mla-data-query.php:1810
1677
+ #: includes/class-mla-data-query.php:1907
1678
+ #: includes/class-mla-data-query.php:1999
1679
+ #: includes/class-mla-data-query.php:2018
1680
  msgid "DEBUG"
1681
  msgstr ""
1682
 
1683
+ #: includes/class-mla-data-query.php:1181
1684
  #, php-format
1685
  msgctxt "error_log"
1686
  msgid "%1$s: _execute_list_table_query WP_Query = \"%2$s\"."
1687
  msgstr ""
1688
 
1689
+ #: includes/class-mla-data-query.php:1183
1690
  #, php-format
1691
  msgctxt "error_log"
1692
  msgid "%1$s: _execute_list_table_query SQL_request = \"%2$s\"."
1693
  msgstr ""
1694
 
1695
+ #: includes/class-mla-data-query.php:1666
1696
  #, php-format
1697
  msgctxt "error_log"
1698
  msgid "%1$s: mla_query_posts_search_filter = \"%2$s\"."
1699
  msgstr ""
1700
 
1701
+ #: includes/class-mla-data-query.php:1738
1702
  #, php-format
1703
  msgctxt "error_log"
1704
  msgid "%1$s: mla_query_posts_where_filter = \"%2$s\"."
1705
  msgstr ""
1706
 
1707
+ #: includes/class-mla-data-query.php:1810
1708
  #, php-format
1709
  msgctxt "error_log"
1710
  msgid "%1$s: mla_query_posts_join_filter = \"%2$s\"."
1711
  msgstr ""
1712
 
1713
+ #: includes/class-mla-data-query.php:1907
1714
  #, php-format
1715
  msgctxt "error_log"
1716
  msgid "%1$s: mla_query_posts_orderby_filter = \"%2$s\"."
1717
  msgstr ""
1718
 
1719
+ #: includes/class-mla-data-query.php:1999
1720
  #, php-format
1721
  msgctxt "error_log"
1722
  msgid "%1$s: mla_query_posts_clauses_filter = \"%2$s\"."
1723
  msgstr ""
1724
 
1725
+ #: includes/class-mla-data-query.php:2018
1726
  #, php-format
1727
  msgctxt "error_log"
1728
  msgid "%1$s: mla_query_posts_clauses_request_filter = \"%2$s\"."
1729
  msgstr ""
1730
 
1731
+ #: includes/class-mla-data-references.php:316
1732
+ #: includes/class-mla-data-references.php:662
1733
+ #: includes/class-mla-data-source.php:678
1734
+ #: includes/class-mla-data-source.php:679
 
 
 
 
 
 
1735
  msgid "ORPHAN"
1736
  msgstr ""
1737
 
1738
+ #: includes/class-mla-data-references.php:320
1739
+ #: includes/class-mla-data-references.php:666
1740
  msgid "UNUSED"
1741
  msgstr ""
1742
 
1743
+ #: includes/class-mla-data-references.php:325
1744
+ #: includes/class-mla-data-references.php:671
1745
  msgid "UNATTACHED"
1746
  msgstr ""
1747
 
1748
+ #: includes/class-mla-data-references.php:327
1749
+ #: includes/class-mla-data-references.php:673
1750
  msgid "INVALID PARENT"
1751
  msgstr ""
1752
 
1753
+ #: includes/class-mla-data-references.php:847
1754
  #, php-format
1755
  msgid "(%1$s) %2$s (ID %3$d) query \"%4$s\" failed, returning \"%5$s\""
1756
  msgstr ""
1797
  msgid "%1$s: _evaluate_template_node unknown type \"%2$s\"."
1798
  msgstr ""
1799
 
1800
+ #: includes/class-mla-data.php:1473
1801
  #, php-format
1802
  msgctxt "error_log"
1803
  msgid ""
1805
  "\"."
1806
  msgstr ""
1807
 
1808
+ #: includes/class-mla-data.php:1671
1809
  #, php-format
1810
  msgctxt "error_log"
1811
  msgid "%1$s: mla_get_attachment_by_id(%2$d) not found."
1812
  msgstr ""
1813
 
1814
+ #: includes/class-mla-data.php:1677
1815
  #, php-format
1816
  msgctxt "error_log"
1817
  msgid "%1$s: mla_get_attachment_by_id(%2$d) wrong post_type \"%3$s\"."
1818
  msgstr ""
1819
 
1820
+ #: includes/class-mla-data.php:2074
1821
  msgctxt "error_log"
1822
  msgid "mla_parse_xmp_metadata xml_parse_into_struct failed."
1823
  msgstr ""
1824
 
1825
+ #: includes/class-mla-data.php:2078
1826
  msgctxt "error_log"
1827
  msgid "mla_parse_xmp_metadata set option failed."
1828
  msgstr ""
1829
 
1830
+ #: includes/class-mla-data.php:3434
1831
  #: includes/class-mla-settings-custom-fields-tab.php:810
1832
  #: includes/class-mla-settings-custom-fields-tab.php:1515
1833
+ #: includes/class-mla-settings-iptc-exif-tab.php:893
1834
+ #: includes/class-mla-settings-iptc-exif-tab.php:1621
1835
+ #: includes/class-mla-settings-iptc-exif-tab.php:2433
1836
  #: includes/class-mla-settings-view-tab.php:398
1837
  #: includes/class-mla-settings-view-tab.php:799
1838
  #: includes/class-mla-settings-view-tab.php:815
1840
  msgid "Yes"
1841
  msgstr ""
1842
 
1843
+ #: includes/class-mla-data.php:3436
1844
  #: includes/class-mla-settings-custom-fields-tab.php:811
1845
  #: includes/class-mla-settings-custom-fields-tab.php:1517
1846
+ #: includes/class-mla-settings-iptc-exif-tab.php:894
1847
+ #: includes/class-mla-settings-iptc-exif-tab.php:1623
1848
+ #: includes/class-mla-settings-iptc-exif-tab.php:2433
1849
  #: includes/class-mla-settings-view-tab.php:397
1850
  #: includes/class-mla-settings-view-tab.php:801
1851
  #: includes/class-mla-settings-view-tab.php:817
1853
  msgid "No"
1854
  msgstr ""
1855
 
1856
+ #: includes/class-mla-data.php:3684 includes/class-mla-data.php:3801
1857
  #, php-format
1858
  msgid "Deleting %1$s"
1859
  msgstr ""
1860
 
1861
+ #: includes/class-mla-data.php:3687
1862
  #, php-format
1863
  msgid "%1$s: meta:%2$s not found"
1864
  msgstr ""
1865
 
1866
+ #: includes/class-mla-data.php:3696 includes/class-mla-data.php:3812
1867
+ #: includes/class-mla-data.php:3824
1868
  #, php-format
1869
  msgid "Adding %1$s = %2$s"
1870
  msgstr ""
1871
 
1872
+ #: includes/class-mla-data.php:3700
1873
  #, php-format
1874
  msgid "%1$s: Adding meta:%2$s; not found"
1875
  msgstr ""
1876
 
1877
+ #: includes/class-mla-data.php:3707
1878
  #, php-format
1879
  msgid "Deleting Null meta:%1$s"
1880
  msgstr ""
1881
 
1882
+ #: includes/class-mla-data.php:3717 includes/class-mla-data.php:3893
1883
+ #: includes/class-mla-data.php:3959 includes/class-mla-data.php:3985
1884
+ #: includes/class-mla-data.php:4028 includes/class-mla-data.php:4041
1885
+ #: includes/class-mla-data.php:4050 includes/class-mla-data.php:4061
1886
+ #: includes/class-mla-data.php:4072 includes/class-mla-data.php:4085
1887
+ #: includes/class-mla-data.php:4094 includes/class-mla-data.php:4103
1888
+ #: includes/class-mla-data.php:4112 includes/class-mla-data.php:4121
1889
+ #: includes/class-mla-mime-types.php:1272
1890
+ #: includes/class-mla-mime-types.php:2390
1891
  #, php-format
1892
  msgid "Changing %1$s from \"%2$s\" to \"%3$s\""
1893
  msgstr ""
1894
 
1895
+ #: includes/class-mla-data.php:3722
1896
  #, php-format
1897
  msgid "%1$s: Changing meta:%2$s; not found"
1898
  msgstr ""
1899
 
1900
+ #: includes/class-mla-data.php:3848
1901
  #, php-format
1902
  msgid "Deleting old %1$s values"
1903
  msgstr ""
1904
 
1905
+ #: includes/class-mla-data.php:3878
1906
  #, php-format
1907
  msgid "Changing %1$s from \"%2$s\" to \"%3$s\"; %4$d updates"
1908
  msgstr ""
1909
 
1910
+ #: includes/class-mla-data.php:3936
1911
  msgid "Could not retrieve Attachment."
1912
  msgstr ""
1913
 
1914
+ #: includes/class-mla-data.php:3982
1915
  #, php-format
1916
  msgid "%1$s: Could not change Name/Slug \"%2$s\"; name already exists"
1917
  msgstr ""
1918
 
1919
+ #: includes/class-mla-data.php:4012
1920
  #, php-format
1921
  msgid "Deleting ALT Text, was \"%1$s\""
1922
  msgstr ""
1923
 
1924
+ #: includes/class-mla-data.php:4015
1925
  #, php-format
1926
  msgid "%1$s: Could not delete ALT Text, remains \"%2$s\""
1927
  msgstr ""
1928
 
1929
+ #: includes/class-mla-data.php:4031
1930
  #, php-format
1931
  msgid "%1$s: Could not change ALT Text from \"%2$s\" to \"%3$s\""
1932
  msgstr ""
1933
 
1934
+ #: includes/class-mla-data.php:4061 includes/class-mla-list-table.php:1044
1935
+ #: includes/class-mla-list-table.php:1047
1936
+ #: includes/class-mla-list-table.php:1050
1937
+ #: includes/class-mla-list-table.php:1118 includes/class-mla-options.php:2083
1938
+ #: includes/class-mla-settings-iptc-exif-tab.php:484
1939
+ #: includes/class-mla-settings-iptc-exif-tab.php:863
1940
  msgid "Parent"
1941
  msgstr ""
1942
 
1943
+ #: includes/class-mla-data.php:4072 includes/class-mla-edit-media.php:766
1944
+ #: includes/class-mla-edit-media.php:971 includes/class-mla-main.php:2155
1945
  #: includes/class-mla-settings-view-tab.php:130
1946
  #: includes/class-mla-settings-view-tab.php:386
1947
  msgid "Menu Order"
1948
  msgstr ""
1949
 
1950
+ #: includes/class-mla-data.php:4085 includes/class-mla-edit-media.php:397
1951
+ #: includes/class-mla-list-table.php:1498
1952
+ #: includes/class-mla-list-table.php:1501 includes/class-mla-main.php:2012
1953
+ #: includes/class-mla-main.php:2114
1954
  msgid "Author"
1955
  msgstr ""
1956
 
1957
+ #: includes/class-mla-data.php:4094 includes/class-mla-edit-media.php:422
1958
+ #: includes/class-mla-main.php:2167
1959
  msgid "Comments"
1960
  msgstr ""
1961
 
1962
+ #: includes/class-mla-data.php:4103 includes/class-mla-edit-media.php:423
1963
+ #: includes/class-mla-main.php:2168
1964
  msgid "Pings"
1965
  msgstr ""
1966
 
1967
+ #: includes/class-mla-data.php:4148
1968
  #, php-format
1969
  msgid "You cannot assign \"%1$s\" terms"
1970
  msgstr ""
1971
 
1972
+ #: includes/class-mla-data.php:4160
1973
  msgctxt "tag delimiter"
1974
  msgid ","
1975
  msgstr ""
1976
 
1977
+ #: includes/class-mla-data.php:4193
1978
  msgid "Adding"
1979
  msgstr ""
1980
 
1981
+ #: includes/class-mla-data.php:4198
1982
  msgid "Removing"
1983
  msgstr ""
1984
 
1985
+ #: includes/class-mla-data.php:4207
1986
  msgid "Replacing"
1987
  msgstr ""
1988
 
1989
+ #: includes/class-mla-data.php:4215
1990
  msgid "Ignoring"
1991
  msgstr ""
1992
 
1993
+ #: includes/class-mla-data.php:4228
1994
  #, php-format
1995
  msgid "%1$s \"%2$s\" terms"
1996
  msgstr ""
1997
 
1998
+ #: includes/class-mla-data.php:4240 includes/class-mla-main.php:1256
1999
  #, php-format
2000
  msgid "Item %1$d, no changes detected."
2001
  msgstr ""
2002
 
2003
+ #: includes/class-mla-data.php:4270
2004
  #, php-format
2005
  msgid "Item %1$d updated."
2006
  msgstr ""
2007
 
2008
+ #: includes/class-mla-data.php:4284
2009
  #, php-format
2010
  msgid "%1$s: Item %2$d update failed."
2011
  msgstr ""
2012
 
2013
  #: includes/class-mla-edit-media.php:133 includes/class-mla-edit-media.php:184
2014
+ #: includes/class-mla-edit-media.php:237 includes/class-mla-main.php:439
2015
+ #: includes/class-mla-main.php:1019 includes/class-mla-main.php:1766
2016
+ #: includes/class-mla-media-modal.php:259 includes/class-mla-options.php:1586
2017
  #: includes/class-mla-polylang-support.php:367
2018
  #: includes/class-mla-settings-custom-fields-tab.php:59
2019
  #: includes/class-mla-settings-custom-fields-tab.php:94
2030
  msgid "Upload New Media items"
2031
  msgstr ""
2032
 
2033
+ #: includes/class-mla-edit-media.php:180 includes/class-mla-edit-media.php:417
2034
  msgid "Open Bulk Edit area"
2035
  msgstr ""
2036
 
2039
  msgstr ""
2040
 
2041
  #: includes/class-mla-edit-media.php:185 includes/class-mla-edit-media.php:239
2042
+ #: includes/class-mla-main.php:426
2043
  msgid "An ajax.fail error has occurred. Please reload the page and try again."
2044
  msgstr ""
2045
 
2046
  #: includes/class-mla-edit-media.php:186 includes/class-mla-edit-media.php:240
2047
+ #: includes/class-mla-main.php:427
2048
  msgid "An ajax.done error has occurred. Please reload the page and try again."
2049
  msgstr ""
2050
 
2051
+ #: includes/class-mla-edit-media.php:241 includes/class-mla-main.php:1968
2052
+ #, php-format
2053
+ msgid "Uploaded on: %s"
2054
+ msgstr ""
2055
+
2056
+ #: includes/class-mla-edit-media.php:242 includes/class-mla-edit-media.php:639
2057
+ msgid "Last modified"
2058
+ msgstr ""
2059
+
2060
+ #: includes/class-mla-edit-media.php:340 includes/class-mla-main.php:2047
2061
  msgid "more"
2062
  msgstr ""
2063
 
2064
+ #: includes/class-mla-edit-media.php:341 includes/class-mla-main.php:2048
2065
  msgid "less"
2066
  msgstr ""
2067
 
2068
+ #: includes/class-mla-edit-media.php:344 includes/class-mla-edit-media.php:375
2069
+ #: includes/class-mla-main.php:2051 includes/class-mla-main.php:2089
2070
  msgid "Add"
2071
  msgstr ""
2072
 
2073
+ #: includes/class-mla-edit-media.php:345 includes/class-mla-edit-media.php:376
2074
+ #: includes/class-mla-main.php:2052 includes/class-mla-main.php:2090
2075
  msgid "Remove"
2076
  msgstr ""
2077
 
2078
+ #: includes/class-mla-edit-media.php:346 includes/class-mla-edit-media.php:377
2079
+ #: includes/class-mla-main.php:2053 includes/class-mla-main.php:2091
2080
  #: includes/class-mla-settings-custom-fields-tab.php:481
2081
  #: includes/class-mla-settings-custom-fields-tab.php:781
2082
  #: includes/class-mla-settings-custom-fields-tab.php:1501
2083
+ #: includes/class-mla-settings-iptc-exif-tab.php:478
2084
+ #: includes/class-mla-settings-iptc-exif-tab.php:860
2085
+ #: includes/class-mla-settings-iptc-exif-tab.php:1562
2086
+ #: includes/class-mla-settings-iptc-exif-tab.php:2414
2087
  msgid "Replace"
2088
  msgstr ""
2089
 
2090
+ #: includes/class-mla-edit-media.php:416
2091
  msgid ""
2092
  "IMPORTANT: Make your entries BEFORE uploading new items. Pull down the Help "
2093
  "menu for more information."
2094
  msgstr ""
2095
 
2096
+ #: includes/class-mla-edit-media.php:418 includes/class-mla-main.php:2161
2097
+ #: includes/class-mla-settings.php:1402
2098
  msgid "Reset"
2099
  msgstr ""
2100
 
2101
+ #: includes/class-mla-edit-media.php:424 includes/class-mla-main.php:2169
2102
+ #: includes/class-mla-main.php:2225
2103
  #: includes/class-mla-settings-custom-fields-tab.php:809
2104
+ #: includes/class-mla-settings-iptc-exif-tab.php:892
2105
  #: includes/class-mla-settings-upload-tab.php:122
2106
  #: includes/class-mla-settings-upload-tab.php:553
2107
  #: includes/class-mla-settings-view-tab.php:396
2108
  msgid "No Change"
2109
  msgstr ""
2110
 
2111
+ #: includes/class-mla-edit-media.php:425 includes/class-mla-main.php:2170
2112
  msgid "Allow"
2113
  msgstr ""
2114
 
2115
+ #: includes/class-mla-edit-media.php:426 includes/class-mla-main.php:2171
2116
  msgid "Do not allow"
2117
  msgstr ""
2118
 
2119
+ #: includes/class-mla-edit-media.php:434 includes/class-mla-list-table.php:1044
2120
+ #: includes/class-mla-list-table.php:1115 includes/class-mla-main.php:2153
2121
  msgid "Parent ID"
2122
  msgstr ""
2123
 
2124
+ #: includes/class-mla-edit-media.php:435 includes/class-mla-edit-media.php:951
2125
+ #: includes/class-mla-main.php:2154
2126
  #: includes/class-mla-settings-upload-tab.php:1469
2127
  msgid "Select"
2128
  msgstr ""
2129
 
2130
+ #: includes/class-mla-edit-media.php:528
2131
  msgid "Custom field mapping updated."
2132
  msgstr ""
2133
 
2134
+ #: includes/class-mla-edit-media.php:529
2135
  msgid "IPTC/EXIF mapping updated."
2136
  msgstr ""
2137
 
2138
+ #: includes/class-mla-edit-media.php:530
2139
  msgid "Custom field mapping is disabled."
2140
  msgstr ""
2141
 
2142
+ #: includes/class-mla-edit-media.php:531
2143
  msgid "IPTC/EXIF mapping is disabled."
2144
  msgstr ""
2145
 
2146
+ #: includes/class-mla-edit-media.php:566 includes/class-mla-main.php:1952
2147
+ msgid "Month"
2148
  msgstr ""
2149
 
2150
+ #: includes/class-mla-edit-media.php:572 includes/class-mla-main.php:1958
2151
+ #, php-format
2152
+ msgid "%1$s-%2$s"
2153
+ msgstr ""
2154
+
2155
+ #: includes/class-mla-edit-media.php:576 includes/class-mla-main.php:1962
2156
+ msgid "Day"
2157
+ msgstr ""
2158
+
2159
+ #: includes/class-mla-edit-media.php:577 includes/class-mla-main.php:1963
2160
+ msgid "Year"
2161
+ msgstr ""
2162
+
2163
+ #: includes/class-mla-edit-media.php:578 includes/class-mla-main.php:1964
2164
+ msgid "Hour"
2165
+ msgstr ""
2166
+
2167
+ #: includes/class-mla-edit-media.php:579 includes/class-mla-main.php:1965
2168
+ msgid "Minute"
2169
+ msgstr ""
2170
+
2171
+ #: includes/class-mla-edit-media.php:583 includes/class-mla-main.php:1970
2172
+ #, php-format
2173
+ msgid "%1$s %2$s, %3$s @ %4$s:%5$s"
2174
+ msgstr ""
2175
+
2176
+ #: includes/class-mla-edit-media.php:606
2177
+ msgid "OK"
2178
  msgstr ""
2179
 
2180
+ #: includes/class-mla-edit-media.php:607 includes/class-mla-main.php:1905
2181
+ #: includes/class-mla-main.php:2160
2182
+ #: includes/class-mla-polylang-support.php:2054
2183
+ #: includes/class-mla-settings-custom-fields-tab.php:509
2184
+ #: includes/class-mla-settings-custom-fields-tab.php:730
2185
+ #: includes/class-mla-settings-custom-fields-tab.php:812
2186
+ #: includes/class-mla-settings-documentation-tab.php:167
2187
+ #: includes/class-mla-settings-iptc-exif-tab.php:517
2188
+ #: includes/class-mla-settings-iptc-exif-tab.php:811
2189
+ #: includes/class-mla-settings-iptc-exif-tab.php:895
2190
+ #: includes/class-mla-settings-shortcodes-tab.php:405
2191
+ #: includes/class-mla-settings-shortcodes-tab.php:476
2192
+ #: includes/class-mla-settings-upload-tab.php:177
2193
+ #: includes/class-mla-settings-upload-tab.php:251
2194
+ #: includes/class-mla-settings-upload-tab.php:549
2195
+ #: includes/class-mla-settings-view-tab.php:135
2196
+ #: includes/class-mla-settings-view-tab.php:393
2197
+ #: includes/class-mla-thumbnail-generation.php:651
2198
+ msgid "Cancel"
2199
+ msgstr ""
2200
+
2201
+ #: includes/class-mla-edit-media.php:623
2202
+ msgid "M j, Y @ H:i"
2203
+ msgstr ""
2204
+
2205
+ #: includes/class-mla-edit-media.php:629 includes/class-mla-list-table.php:616
2206
+ #: includes/class-mla-list-table.php:744 includes/class-mla-list-table.php:999
2207
+ #: includes/class-mla-list-table.php:1170
2208
+ #: includes/class-mla-list-table.php:1219
2209
+ #: includes/class-mla-list-table.php:1265
2210
+ #: includes/class-mla-list-table.php:1310
2211
+ #: includes/class-mla-list-table.php:1532
2212
+ #: includes/class-mla-list-table.php:1858
2213
+ #: includes/class-mla-polylang-support.php:366
2214
+ #: includes/class-mla-settings-custom-fields-tab.php:1344
2215
+ #: includes/class-mla-settings-custom-fields-tab.php:1683
2216
+ #: includes/class-mla-settings-iptc-exif-tab.php:1422
2217
+ #: includes/class-mla-settings-iptc-exif-tab.php:1789
2218
+ #: includes/class-mla-settings-shortcodes-tab.php:1071
2219
+ #: includes/class-mla-settings-upload-tab.php:923
2220
+ #: includes/class-mla-settings-upload-tab.php:1212
2221
+ #: includes/class-mla-settings-view-tab.php:720
2222
+ #: includes/class-mla-settings-view-tab.php:922
2223
+ msgid "Edit"
2224
+ msgstr ""
2225
+
2226
+ #: includes/class-mla-edit-media.php:630
2227
+ msgid "Edit upload date and time"
2228
+ msgstr ""
2229
+
2230
+ #: includes/class-mla-edit-media.php:632
2231
+ msgid "Upload Date and time"
2232
+ msgstr ""
2233
+
2234
+ #: includes/class-mla-edit-media.php:662
2235
  msgid "Map Custom Field metadata for this item"
2236
  msgstr ""
2237
 
2238
+ #: includes/class-mla-edit-media.php:662 includes/class-mla-main.php:1683
2239
+ #: includes/class-mla-main.php:2176
2240
  msgid "Map Custom Field metadata"
2241
  msgstr ""
2242
 
2243
+ #: includes/class-mla-edit-media.php:666
2244
  msgid "Map IPTC/EXIF metadata for this item"
2245
  msgstr ""
2246
 
2247
+ #: includes/class-mla-edit-media.php:666 includes/class-mla-main.php:1686
2248
+ #: includes/class-mla-main.php:2174
2249
  msgid "Map IPTC/EXIF metadata"
2250
  msgstr ""
2251
 
2252
+ #: includes/class-mla-edit-media.php:762 includes/class-mla-edit-media.php:952
2253
  msgid "Parent Info"
2254
  msgstr ""
2255
 
2256
+ #: includes/class-mla-edit-media.php:772 includes/class-mla-edit-media.php:995
2257
  msgid "Attachment Metadata"
2258
  msgstr ""
2259
 
2260
+ #: includes/class-mla-edit-media.php:842 includes/class-mla-edit-media.php:884
2261
+ #: includes/class-mla-main.php:651 includes/class-mla-settings.php:589
2262
  #, php-format
2263
  msgctxt "error_log"
2264
  msgid "%1$s: %2$s discarding \"%3$s\"; no title/order"
2265
  msgstr ""
2266
 
2267
+ #: includes/class-mla-edit-media.php:950
 
 
 
 
 
2268
  msgid "Post Parent"
2269
  msgstr ""
2270
 
2271
+ #: includes/class-mla-edit-media.php:951 includes/class-mla-main.php:1887
2272
  msgid "Select Parent"
2273
  msgstr ""
2274
 
 
 
 
 
 
 
 
 
 
2275
  #: includes/class-mla-list-table.php:181 includes/class-mla-list-table.php:217
2276
  msgid "All"
2277
  msgstr ""
2278
 
2279
+ #: includes/class-mla-list-table.php:218
2280
  msgctxt "show_option_none"
2281
  msgid "No"
2282
  msgstr ""
2283
 
2284
+ #: includes/class-mla-list-table.php:429
2285
  #: includes/class-mla-settings-custom-fields-tab.php:997
2286
+ #: includes/class-mla-settings-iptc-exif-tab.php:1069
2287
  #: includes/class-mla-settings-upload-tab.php:647
2288
  #: includes/class-mla-settings-view-tab.php:490
2289
  msgid "List View"
2290
  msgstr ""
2291
 
2292
+ #: includes/class-mla-list-table.php:496 includes/class-mla-list-table.php:548
2293
+ #: includes/class-mla-list-table.php:1044
2294
+ #: includes/class-mla-list-table.php:1115
2295
+ #: includes/class-mla-list-table.php:1338
2296
+ #: includes/class-mla-list-table.php:1382
2297
+ #: includes/class-mla-list-table.php:1414
2298
+ #: includes/class-mla-list-table.php:1498
2299
  msgid "Filter by"
2300
  msgstr ""
2301
 
2302
+ #: includes/class-mla-list-table.php:506
2303
  #: includes/class-mla-media-modal-ajax.php:490
2304
  msgid "Not Supported"
2305
  msgstr ""
2306
 
2307
+ #: includes/class-mla-list-table.php:568
2308
  #: includes/class-mla-settings-custom-fields-tab.php:1291
2309
+ #: includes/class-mla-settings-documentation-tab.php:575
2310
+ #: includes/class-mla-settings-iptc-exif-tab.php:1369
2311
  #: includes/class-mla-settings-shortcodes-tab.php:1023
2312
  #: includes/class-mla-settings-upload-tab.php:858
2313
  #: includes/class-mla-settings-upload-tab.php:1416
2316
  msgid "column_default: %1$s, %2$s"
2317
  msgstr ""
2318
 
2319
+ #: includes/class-mla-list-table.php:731
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2320
  msgid "Restore this item from the Trash"
2321
  msgstr ""
2322
 
2323
+ #: includes/class-mla-list-table.php:731 includes/class-mla-list-table.php:1855
2324
  msgid "Restore"
2325
  msgstr ""
2326
 
2327
+ #: includes/class-mla-list-table.php:744
2328
  #: includes/class-mla-settings-custom-fields-tab.php:1344
2329
+ #: includes/class-mla-settings-iptc-exif-tab.php:1422
2330
  #: includes/class-mla-settings-shortcodes-tab.php:1071
2331
  #: includes/class-mla-settings-upload-tab.php:923
2332
  #: includes/class-mla-settings-view-tab.php:720
2333
  msgid "Edit this item"
2334
  msgstr ""
2335
 
2336
+ #: includes/class-mla-list-table.php:745
2337
  #: includes/class-mla-settings-custom-fields-tab.php:1347
2338
+ #: includes/class-mla-settings-iptc-exif-tab.php:1425
2339
  #: includes/class-mla-settings-upload-tab.php:925
2340
  #: includes/class-mla-settings-view-tab.php:722
2341
  msgid "Edit this item inline"
2342
  msgstr ""
2343
 
2344
+ #: includes/class-mla-list-table.php:745 includes/class-mla-main.php:2144
2345
+ #: includes/class-mla-options.php:1183
2346
  #: includes/class-mla-settings-custom-fields-tab.php:472
2347
  #: includes/class-mla-settings-custom-fields-tab.php:772
2348
  #: includes/class-mla-settings-custom-fields-tab.php:1347
2349
  #: includes/class-mla-settings-custom-fields-tab.php:1457
2350
+ #: includes/class-mla-settings-iptc-exif-tab.php:839
2351
+ #: includes/class-mla-settings-iptc-exif-tab.php:1425
2352
  #: includes/class-mla-settings-upload-tab.php:925
2353
  #: includes/class-mla-settings-view-tab.php:722
2354
  msgid "Quick Edit"
2355
  msgstr ""
2356
 
2357
+ #: includes/class-mla-list-table.php:751
2358
  msgid "Move this item to the Trash"
2359
  msgstr ""
2360
 
2361
+ #: includes/class-mla-list-table.php:751 includes/class-mla-list-table.php:1861
2362
  msgid "Move to Trash"
2363
  msgstr ""
2364
 
2365
+ #: includes/class-mla-list-table.php:756
2366
  #: includes/class-mla-settings-custom-fields-tab.php:1355
2367
+ #: includes/class-mla-settings-iptc-exif-tab.php:1435
2368
  #: includes/class-mla-settings-shortcodes-tab.php:1077
2369
  #: includes/class-mla-settings-upload-tab.php:929
2370
  #: includes/class-mla-settings-view-tab.php:728
2371
  msgid "Delete this item Permanently"
2372
  msgstr ""
2373
 
2374
+ #: includes/class-mla-list-table.php:756 includes/class-mla-list-table.php:1856
2375
+ #: includes/class-mla-list-table.php:1863
2376
  #: includes/class-mla-settings-custom-fields-tab.php:1355
2377
  #: includes/class-mla-settings-custom-fields-tab.php:1684
2378
+ #: includes/class-mla-settings-iptc-exif-tab.php:1435
2379
+ #: includes/class-mla-settings-iptc-exif-tab.php:1790
2380
  #: includes/class-mla-settings-shortcodes-tab.php:1077
2381
  #: includes/class-mla-settings-upload-tab.php:929
2382
  #: includes/class-mla-settings-view-tab.php:728
2384
  msgid "Delete Permanently"
2385
  msgstr ""
2386
 
2387
+ #: includes/class-mla-list-table.php:764
2388
+ #: includes/class-mla-settings-documentation-tab.php:645
2389
+ #: includes/class-mla-settings.php:1392
2390
  msgid "Download"
2391
  msgstr ""
2392
 
2393
+ #: includes/class-mla-list-table.php:766
2394
+ #: includes/class-mla-settings-documentation-tab.php:648
2395
  #: includes/class-mla-settings-shortcodes-tab.php:1069
2396
  #: includes/class-mla-settings-view-tab.php:374
2397
  msgid "View"
2398
  msgstr ""
2399
 
2400
+ #: includes/class-mla-list-table.php:1015
2401
  msgid "File name"
2402
  msgstr ""
2403
 
2404
+ #: includes/class-mla-list-table.php:1112
2405
  msgid "(no title: bad ID)"
2406
  msgstr ""
2407
 
2408
+ #: includes/class-mla-list-table.php:1385
2409
  #: includes/class-mla-settings-upload-tab.php:167
2410
  #: includes/class-mla-settings-upload-tab.php:536
2411
  msgid "MIME Type"
2412
  msgstr ""
2413
 
2414
+ #: includes/class-mla-list-table.php:1418
2415
  msgid "Base File"
2416
  msgstr ""
2417
 
2418
+ #: includes/class-mla-list-table.php:1434
2419
+ #: includes/class-mla-list-table.php:1467
2420
  msgid "Unpublished"
2421
  msgstr ""
2422
 
2423
+ #: includes/class-mla-list-table.php:1443
2424
+ #: includes/class-mla-list-table.php:1474
2425
  #, php-format
2426
  msgid "%1$s from now"
2427
  msgstr ""
2428
 
2429
+ #: includes/class-mla-list-table.php:1446
2430
+ #: includes/class-mla-list-table.php:1476
2431
  #, php-format
2432
  msgid "%1$s ago"
2433
  msgstr ""
2434
 
2435
+ #: includes/class-mla-list-table.php:1560
 
 
 
 
2436
  msgid "Set Parent"
2437
  msgstr ""
2438
 
2439
+ #: includes/class-mla-list-table.php:1710
2440
  msgctxt "uploaded files"
2441
  msgid "All"
2442
  msgid_plural "All"
2443
  msgstr[0] ""
2444
  msgstr[1] ""
2445
 
2446
+ #: includes/class-mla-list-table.php:1955
2447
  #: includes/class-mla-settings-custom-fields-tab.php:1749
2448
+ #: includes/class-mla-settings-iptc-exif-tab.php:1855
2449
  #: includes/class-mla-settings-shortcodes-tab.php:1345
2450
  msgid "Filter"
2451
  msgstr ""
2452
 
2453
+ #: includes/class-mla-list-table.php:1958
2454
  #: includes/mla-media-modal-js-template.php:72
2455
  msgid "Terms Search"
2456
  msgstr ""
2457
 
2458
+ #: includes/class-mla-list-table.php:1963
2459
+ #: includes/class-mla-polylang-support.php:2061
2460
+ #: includes/class-mla-thumbnail-generation.php:650
2461
  msgid "Clear Filter-by"
2462
  msgstr ""
2463
 
2464
+ #: includes/class-mla-list-table.php:1966
2465
  msgid "Empty Trash"
2466
  msgstr ""
2467
 
2468
+ #: includes/class-mla-main.php:428
2469
  msgid "Error while saving the changes."
2470
  msgstr ""
2471
 
2472
+ #: includes/class-mla-main.php:429
2473
  #: includes/class-mla-settings-custom-fields-tab.php:57
2474
  #: includes/class-mla-settings-custom-fields-tab.php:92
2475
  #: includes/class-mla-settings-iptc-exif-tab.php:57
2479
  msgid "Remove From Bulk Edit"
2480
  msgstr ""
2481
 
2482
+ #: includes/class-mla-main.php:431
2483
  msgid "Bulk Edit items"
2484
  msgstr ""
2485
 
2486
+ #: includes/class-mla-main.php:432 includes/class-mla-main.php:2177
2487
  #: includes/class-mla-settings-custom-fields-tab.php:63
2488
  #: includes/class-mla-settings-iptc-exif-tab.php:63
2489
  msgid "Waiting"
2490
  msgstr ""
2491
 
2492
+ #: includes/class-mla-main.php:433 includes/class-mla-main.php:2179
2493
  #: includes/class-mla-settings-custom-fields-tab.php:65
2494
  #: includes/class-mla-settings-iptc-exif-tab.php:65
2495
  msgid "Complete"
2496
  msgstr ""
2497
 
2498
+ #: includes/class-mla-main.php:434
2499
  #: includes/class-mla-settings-custom-fields-tab.php:66
2500
  #: includes/class-mla-settings-iptc-exif-tab.php:66
2501
  msgid "Unchanged"
2502
  msgstr ""
2503
 
2504
+ #: includes/class-mla-main.php:435
2505
  #: includes/class-mla-settings-custom-fields-tab.php:67
2506
  #: includes/class-mla-settings-iptc-exif-tab.php:67
2507
  msgid "Succeeded"
2508
  msgstr ""
2509
 
2510
+ #: includes/class-mla-main.php:436
2511
  #: includes/class-mla-settings-custom-fields-tab.php:68
2512
  #: includes/class-mla-settings-iptc-exif-tab.php:68
2513
  msgid "Failed"
2514
  msgstr ""
2515
 
2516
+ #: includes/class-mla-main.php:437
2517
  msgid "CANCELED"
2518
  msgstr ""
2519
 
2520
+ #: includes/class-mla-main.php:548
2521
  #, php-format
2522
  msgid "Item permanently deleted."
2523
  msgid_plural "%d items permanently deleted."
2524
  msgstr[0] ""
2525
  msgstr[1] ""
2526
 
2527
+ #: includes/class-mla-main.php:553 includes/class-mla-main.php:2364
2528
  #, php-format
2529
  msgid "Item %1$d moved to Trash."
2530
  msgstr ""
2531
 
2532
+ #: includes/class-mla-main.php:783
2533
+ msgid "download path out of bounds."
2534
+ msgstr ""
2535
+
2536
+ #: includes/class-mla-main.php:785
2537
+ msgid "download path invalid."
2538
  msgstr ""
2539
 
2540
+ #: includes/class-mla-main.php:788
2541
+ msgid "download argument(s) not set."
2542
+ msgstr ""
2543
+
2544
+ #: includes/class-mla-main.php:1190
2545
  msgid "You are not allowed to edit Attachment: "
2546
  msgstr ""
2547
 
2548
+ #: includes/class-mla-main.php:1246
2549
  #, php-format
2550
  msgid "%1$s: Unknown bulk action %2$s"
2551
  msgstr ""
2552
 
2553
+ #: includes/class-mla-main.php:1268
2554
  msgid "no changes detected"
2555
  msgstr ""
2556
 
2557
+ #: includes/class-mla-main.php:1315
2558
  #: includes/class-mla-settings-custom-fields-tab.php:607
2559
+ #: includes/class-mla-settings-documentation-tab.php:243
2560
+ #: includes/class-mla-settings-iptc-exif-tab.php:686
2561
  #: includes/class-mla-settings-shortcodes-tab.php:564
2562
  #: includes/class-mla-settings-upload-tab.php:411
2563
  #: includes/class-mla-settings-view-tab.php:254
2565
  msgid "Bulk Action %1$s - no items selected."
2566
  msgstr ""
2567
 
2568
+ #: includes/class-mla-main.php:1403
2569
  msgid "You do not have permission to manage attachments."
2570
  msgstr ""
2571
 
2572
+ #: includes/class-mla-main.php:1461
2573
  #, php-format
2574
  msgctxt "deleted items"
2575
  msgid "%s item deleted."
2577
  msgstr[0] ""
2578
  msgstr[1] ""
2579
 
2580
+ #: includes/class-mla-main.php:1463
2581
  msgid "No items deleted."
2582
  msgstr ""
2583
 
2584
+ #: includes/class-mla-main.php:1515
2585
  msgid "Empty Terms Search; ignored"
2586
  msgstr ""
2587
 
2588
+ #: includes/class-mla-main.php:1527
2589
  #: includes/class-mla-settings-custom-fields-tab.php:634
2590
+ #: includes/class-mla-settings-documentation-tab.php:275
2591
+ #: includes/class-mla-settings-iptc-exif-tab.php:715
2592
  #: includes/class-mla-settings-shortcodes-tab.php:593
2593
  #: includes/class-mla-settings-upload-tab.php:450
2594
  #: includes/class-mla-settings-view-tab.php:291
2596
  msgid "Unknown mla_admin_action - \"%1$s\""
2597
  msgstr ""
2598
 
2599
+ #: includes/class-mla-main.php:1565
2600
  msgid "term search results for"
2601
  msgstr ""
2602
 
2603
+ #: includes/class-mla-main.php:1568
2604
  msgid "post/parent results for"
2605
  msgstr ""
2606
 
2607
+ #: includes/class-mla-main.php:1570
2608
  msgid "search results for"
2609
  msgstr ""
2610
 
2611
+ #: includes/class-mla-main.php:1689 includes/class-mla-main.php:1909
2612
+ #: includes/class-mla-main.php:2162
2613
  #: includes/class-mla-settings-custom-fields-tab.php:511
2614
  #: includes/class-mla-settings-custom-fields-tab.php:813
2615
+ #: includes/class-mla-settings-documentation-tab.php:635
2616
+ #: includes/class-mla-settings-documentation-tab.php:843
2617
+ #: includes/class-mla-settings-iptc-exif-tab.php:519
2618
+ #: includes/class-mla-settings-iptc-exif-tab.php:896
2619
  #: includes/class-mla-settings-shortcodes-tab.php:479
2620
  #: includes/class-mla-settings-upload-tab.php:176
2621
  #: includes/class-mla-settings-upload-tab.php:550
2624
  msgid "Update"
2625
  msgstr ""
2626
 
2627
+ #: includes/class-mla-main.php:1844
2628
  msgid "All Post Types"
2629
  msgstr ""
2630
 
2631
+ #: includes/class-mla-main.php:1890
2632
  msgid "For"
2633
  msgstr ""
2634
 
2635
+ #: includes/class-mla-main.php:1900
2636
  #: includes/class-mla-shortcode-support.php:1036
2637
  msgid "Unattached"
2638
  msgstr ""
2639
 
2640
+ #: includes/class-mla-main.php:2163 includes/class-mla-options.php:1197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2641
  #: includes/class-mla-settings-custom-fields-tab.php:475
2642
  #: includes/class-mla-settings-custom-fields-tab.php:775
2643
  #: includes/class-mla-settings-custom-fields-tab.php:1461
2644
+ #: includes/class-mla-settings-iptc-exif-tab.php:840
2645
  #: includes/class-mla-settings-upload-tab.php:551
2646
  #: includes/class-mla-settings-view-tab.php:395
2647
  msgid "Bulk Edit"
2648
  msgstr ""
2649
 
2650
+ #: includes/class-mla-main.php:2178
2651
  msgid "In-process"
2652
  msgstr ""
2653
 
2654
+ #: includes/class-mla-main.php:2277
2655
  msgid "You are not allowed to delete this item."
2656
  msgstr ""
2657
 
2658
+ #: includes/class-mla-main.php:2285
2659
  #, php-format
2660
  msgid "%1$s: Item %2$d could NOT be deleted."
2661
  msgstr ""
2662
 
2663
+ #: includes/class-mla-main.php:2292
2664
  #, php-format
2665
  msgid "Item %1$d permanently deleted."
2666
  msgstr ""
2667
 
2668
+ #: includes/class-mla-main.php:2309
2669
  msgid "You are not allowed to move this item out of the Trash."
2670
  msgstr ""
2671
 
2672
+ #: includes/class-mla-main.php:2317
2673
  #, php-format
2674
  msgid "%1$s: Item %2$d could NOT be restored from Trash."
2675
  msgstr ""
2676
 
2677
+ #: includes/class-mla-main.php:2332
2678
  #, php-format
2679
  msgid "Item %1$d restored from Trash."
2680
  msgstr ""
2681
 
2682
+ #: includes/class-mla-main.php:2349
2683
  msgid "You are not allowed to move this item to the Trash."
2684
  msgstr ""
2685
 
2686
+ #: includes/class-mla-main.php:2357
2687
  #, php-format
2688
  msgid "%1$s: Item %2$d could NOT be moved to Trash."
2689
  msgstr ""
2701
  msgstr ""
2702
 
2703
  #: includes/class-mla-media-modal-ajax.php:452
2704
+ #: includes/class-mla-objects.php:50 includes/class-mla-objects.php:83
2705
  #: includes/class-mla-settings-upload-tab.php:532
2706
  #: includes/class-mla-settings-view-tab.php:374
2707
  #, php-format
2712
  msgid "Choose from the most used tags"
2713
  msgstr ""
2714
 
2715
+ #: includes/class-mla-media-modal.php:131
2716
  msgid "Show all dates"
2717
  msgstr ""
2718
 
2719
+ #: includes/class-mla-media-modal.php:146
2720
  #, php-format
2721
  msgid "%1$s %2$d"
2722
  msgstr ""
2723
 
2724
+ #: includes/class-mla-media-modal.php:384
2725
  msgid "Search Box"
2726
  msgstr ""
2727
 
2728
+ #: includes/class-mla-media-modal.php:385
2729
  msgid "Loading..."
2730
  msgstr ""
2731
 
2732
+ #: includes/class-mla-media-modal.php:613
2733
+ #: includes/class-mla-media-modal.php:629
2734
  msgid "Search Terms"
2735
  msgstr ""
2736
 
2737
+ #: includes/class-mla-media-modal.php:614
2738
  msgid "There are no taxonomies to search"
2739
  msgstr ""
2740
 
2741
+ #: includes/class-mla-media-modal.php:632
2742
  msgid "All phrases"
2743
  msgstr ""
2744
 
2745
+ #: includes/class-mla-media-modal.php:634
2746
  msgid "Any phrase"
2747
  msgstr ""
2748
 
2749
+ #: includes/class-mla-media-modal.php:636
2750
  msgid "All terms"
2751
  msgstr ""
2752
 
2753
+ #: includes/class-mla-media-modal.php:638
2754
  msgid "Any term"
2755
  msgstr ""
2756
 
2757
+ #: includes/class-mla-media-modal.php:640
2758
  msgid "Exact"
2759
  msgstr ""
2760
 
2761
+ #: includes/class-mla-mime-types.php:433
2762
  msgctxt "post_mime_types"
2763
  msgid "Manage"
2764
  msgstr ""
2765
 
2766
+ #: includes/class-mla-mime-types.php:590 includes/class-mla-mime-types.php:668
2767
  msgctxt "list_table_column"
2768
  msgid "Extension"
2769
  msgstr ""
2770
 
2771
+ #: includes/class-mla-mime-types.php:592
2772
  msgctxt "list_table_column"
2773
  msgid "Icon Type"
2774
  msgstr ""
2775
 
2776
+ #: includes/class-mla-mime-types.php:593
2777
  #: includes/class-mla-settings-custom-fields-tab.php:1204
2778
  msgctxt "list_table_column"
2779
  msgid "Source"
2780
  msgstr ""
2781
 
2782
+ #: includes/class-mla-mime-types.php:594
2783
  #: includes/class-mla-settings-custom-fields-tab.php:1207
2784
+ #: includes/class-mla-settings-iptc-exif-tab.php:1284
2785
  msgctxt "list_table_column"
2786
  msgid "Status"
2787
  msgstr ""
2788
 
2789
+ #: includes/class-mla-mime-types.php:595 includes/class-mla-mime-types.php:670
2790
  msgctxt "list_table_column"
2791
  msgid "WordPress Type"
2792
  msgstr ""
2793
 
2794
+ #: includes/class-mla-mime-types.php:596 includes/class-mla-mime-types.php:671
2795
  msgctxt "list_table_column"
2796
  msgid "MLA Type"
2797
  msgstr ""
2798
 
2799
+ #: includes/class-mla-mime-types.php:597
2800
  msgctxt "list_table_column"
2801
  msgid "Std. Source"
2802
  msgstr ""
2803
 
2804
+ #: includes/class-mla-mime-types.php:598
2805
  msgctxt "list_table_column"
2806
  msgid "Std. Icon Type"
2807
  msgstr ""
2808
 
2809
+ #: includes/class-mla-mime-types.php:744
2810
  msgctxt "list_table_column"
2811
  msgid "Slug"
2812
  msgstr ""
2813
 
2814
+ #: includes/class-mla-mime-types.php:745
2815
  msgctxt "list_table_column"
2816
  msgid "Specification"
2817
  msgstr ""
2818
 
2819
+ #: includes/class-mla-mime-types.php:746
2820
  msgctxt "list_table_column"
2821
  msgid "Post Mime"
2822
  msgstr ""
2823
 
2824
+ #: includes/class-mla-mime-types.php:747
2825
  msgctxt "list_table_column"
2826
  msgid "Table View"
2827
  msgstr ""
2828
 
2829
+ #: includes/class-mla-mime-types.php:748
2830
  msgctxt "list_table_column"
2831
  msgid "Singular Name"
2832
  msgstr ""
2833
 
2834
+ #: includes/class-mla-mime-types.php:749
2835
  msgctxt "list_table_column"
2836
  msgid "Plural Name"
2837
  msgstr ""
2838
 
2839
+ #: includes/class-mla-mime-types.php:750
2840
  msgctxt "list_table_column"
2841
  msgid "Order"
2842
  msgstr ""
2843
 
2844
+ #: includes/class-mla-mime-types.php:1066
2845
  msgctxt "post_mime_types_description"
2846
  msgid "Copied from previous filter/plugin"
2847
  msgstr ""
2848
 
2849
+ #: includes/class-mla-mime-types.php:1167
2850
+ #: includes/class-mla-mime-types.php:1284
2851
  msgid "Ignoring specification for Post MIME Type; using slug"
2852
  msgstr ""
2853
 
2854
+ #: includes/class-mla-mime-types.php:1173
2855
+ #: includes/class-mla-mime-types.php:2253
2856
  #, php-format
2857
  msgid "<br>Changing %1$s \"%2$s\" to valid value \"%3$s\""
2858
  msgstr ""
2859
 
2860
+ #: includes/class-mla-mime-types.php:1173
2861
+ #: includes/class-mla-mime-types.php:1261
2862
+ #: includes/class-mla-mime-types.php:1272
2863
  #: includes/class-mla-settings-view-tab.php:119
2864
  #: includes/class-mla-settings-view-tab.php:375
2865
  msgid "Slug"
2866
  msgstr ""
2867
 
2868
+ #: includes/class-mla-mime-types.php:1181
2869
+ #: includes/class-mla-mime-types.php:1269
2870
  #, php-format
2871
  msgid "%1$s: Could not add Slug \"%2$s\"; value already exists"
2872
  msgstr ""
2873
 
2874
+ #: includes/class-mla-mime-types.php:1216
2875
  #, php-format
2876
  msgid "Edit view \"%1$s\"; added"
2877
  msgstr ""
2878
 
2879
+ #: includes/class-mla-mime-types.php:1261
2880
+ #: includes/class-mla-mime-types.php:2379
2881
  #, php-format
2882
  msgid "<br>Changing new %1$s \"%2$s\" to valid value \"%3$s\""
2883
  msgstr ""
2884
 
2885
+ #: includes/class-mla-mime-types.php:1314
2886
  #, php-format
2887
  msgid "Edit view \"%1$s\"; no changes detected"
2888
  msgstr ""
2889
 
2890
+ #: includes/class-mla-mime-types.php:1328
2891
  #, php-format
2892
  msgid "Edit view \"%1$s\"; updated"
2893
  msgstr ""
2894
 
2895
+ #: includes/class-mla-mime-types.php:1401
2896
  #, php-format
2897
  msgid "View \"%1$s\" reverted to standard"
2898
  msgstr ""
2899
 
2900
+ #: includes/class-mla-mime-types.php:1407
2901
  #, php-format
2902
  msgid "View \"%1$s\" deleted"
2903
  msgstr ""
2904
 
2905
+ #: includes/class-mla-mime-types.php:1415
2906
  #, php-format
2907
  msgid "%1$s: Did not find view \"%2$s\""
2908
  msgstr ""
2909
 
2910
+ #: includes/class-mla-mime-types.php:1674
2911
+ #: includes/class-mla-settings-documentation-tab.php:1543
2912
  msgctxt "table_view_singular"
2913
  msgid "Active"
2914
  msgstr ""
2915
 
2916
+ #: includes/class-mla-mime-types.php:1675
2917
+ #: includes/class-mla-settings-documentation-tab.php:1544
2918
  msgctxt "table_view_plural"
2919
  msgid "Active"
2920
  msgstr ""
2921
 
2922
+ #: includes/class-mla-mime-types.php:1678
2923
+ #: includes/class-mla-settings-documentation-tab.php:1547
2924
  msgctxt "table_view_singular"
2925
  msgid "Inactive"
2926
  msgstr ""
2927
 
2928
+ #: includes/class-mla-mime-types.php:1679
2929
+ #: includes/class-mla-settings-documentation-tab.php:1548
2930
  msgctxt "table_view_plural"
2931
  msgid "Inactive"
2932
  msgstr ""
2933
 
2934
+ #: includes/class-mla-mime-types.php:1682
2935
  msgctxt "table_view_singular"
2936
  msgid "WordPress"
2937
  msgstr ""
2938
 
2939
+ #: includes/class-mla-mime-types.php:1683
2940
  msgctxt "table_view_plural"
2941
  msgid "WordPress"
2942
  msgstr ""
2943
 
2944
+ #: includes/class-mla-mime-types.php:1686
2945
  msgctxt "table_view_singular"
2946
  msgid "MLA"
2947
  msgstr ""
2948
 
2949
+ #: includes/class-mla-mime-types.php:1687
2950
  msgctxt "table_view_plural"
2951
  msgid "MLA"
2952
  msgstr ""
2953
 
2954
+ #: includes/class-mla-mime-types.php:1690
2955
+ #: includes/class-mla-settings-iptc-exif-tab.php:2734
2956
  msgctxt "table_view_singular"
2957
  msgid "Custom"
2958
  msgstr ""
2959
 
2960
+ #: includes/class-mla-mime-types.php:1691
2961
+ #: includes/class-mla-settings-iptc-exif-tab.php:2735
2962
  msgctxt "table_view_plural"
2963
  msgid "Custom"
2964
  msgstr ""
2965
 
2966
+ #: includes/class-mla-mime-types.php:1946
2967
  msgid "icon"
2968
  msgstr ""
2969
 
2970
+ #: includes/class-mla-mime-types.php:2237
2971
+ #: includes/class-mla-mime-types.php:2336
2972
  msgid "Cannot load Upload MIME Types"
2973
  msgstr ""
2974
 
2975
+ #: includes/class-mla-mime-types.php:2248
2976
  msgid "Extension is required"
2977
  msgstr ""
2978
 
2979
+ #: includes/class-mla-mime-types.php:2253
2980
+ #: includes/class-mla-mime-types.php:2379
2981
+ #: includes/class-mla-mime-types.php:2390
2982
  #: includes/class-mla-settings-upload-tab.php:165
2983
  #: includes/class-mla-settings-upload-tab.php:534
2984
  msgid "Extension"
2985
  msgstr ""
2986
 
2987
+ #: includes/class-mla-mime-types.php:2261
2988
  #, php-format
2989
  msgid "%1$s: Could not add extension \"%2$s\"; value already exists"
2990
  msgstr ""
2991
 
2992
+ #: includes/class-mla-mime-types.php:2269
2993
  msgid "MIME type is required"
2994
  msgstr ""
2995
 
2996
+ #: includes/class-mla-mime-types.php:2274
2997
+ #: includes/class-mla-mime-types.php:2421
2998
  #, php-format
2999
  msgid "%1$s: Bad MIME type; try \"%2$s\""
3000
  msgstr ""
3001
 
3002
+ #: includes/class-mla-mime-types.php:2311
3003
  #, php-format
3004
  msgid "Upload MIME Type \"%1$s\"; added"
3005
  msgstr ""
3006
 
3007
+ #: includes/class-mla-mime-types.php:2317
3008
+ #: includes/class-mla-mime-types.php:2506
3009
+ #: includes/class-mla-mime-types.php:2585
3010
  msgid "Cannot update Upload MIME Types"
3011
  msgstr ""
3012
 
3013
+ #: includes/class-mla-mime-types.php:2387
3014
  #, php-format
3015
  msgid "%1$s: Could not add new extension \"%2$s\"; value already exists"
3016
  msgstr ""
3017
 
3018
+ #: includes/class-mla-mime-types.php:2486
3019
  #, php-format
3020
  msgid "Edit type \"%1$s\"; no changes detected"
3021
  msgstr ""
3022
 
3023
+ #: includes/class-mla-mime-types.php:2500
3024
  #, php-format
3025
  msgid "Edit type \"%1$s\"; updated"
3026
  msgstr ""
3027
 
3028
+ #: includes/class-mla-mime-types.php:2573
3029
  #, php-format
3030
  msgid "Upload MIME Type \"%1$s\"; reverted to standard"
3031
  msgstr ""
3032
 
3033
+ #: includes/class-mla-mime-types.php:2579
3034
  #, php-format
3035
  msgid "Upload MIME Type \"%1$s\"; deleted"
3036
  msgstr ""
3037
 
3038
+ #: includes/class-mla-mime-types.php:2594
3039
  #, php-format
3040
  msgid "%1$s: Did not find Upload type \"%2$s\""
3041
  msgstr ""
3078
  msgid "New Att. Category Name"
3079
  msgstr ""
3080
 
3081
+ #: includes/class-mla-objects.php:74
3082
  msgctxt "taxonomy_name_plural"
3083
  msgid "Att. Tags"
3084
  msgstr ""
3085
 
3086
+ #: includes/class-mla-objects.php:75
3087
  msgctxt "taxonomy_name_singular"
3088
  msgid "Att. Tag"
3089
  msgstr ""
3090
 
3091
+ #: includes/class-mla-objects.php:76
3092
  msgid "Search Att. Tags"
3093
  msgstr ""
3094
 
3095
+ #: includes/class-mla-objects.php:77
3096
  msgid "All Att. Tags"
3097
  msgstr ""
3098
 
3099
+ #: includes/class-mla-objects.php:78 includes/class-mla-objects.php:79
3100
  msgid "Parent Att. Tag"
3101
  msgstr ""
3102
 
3103
+ #: includes/class-mla-objects.php:80
3104
  msgid "Edit Att. Tag"
3105
  msgstr ""
3106
 
3107
+ #: includes/class-mla-objects.php:81
3108
  msgid "Update Att. Tag"
3109
  msgstr ""
3110
 
3111
+ #: includes/class-mla-objects.php:83 includes/class-mla-objects.php:85
3112
  msgid "Att. Tag"
3113
  msgstr ""
3114
 
3115
+ #: includes/class-mla-objects.php:84
3116
  msgid "New Att. Tag Name"
3117
  msgstr ""
3118
 
3120
  msgid "Attachments"
3121
  msgstr ""
3122
 
3123
+ #: includes/class-mla-objects.php:245
3124
  #, php-format
3125
  msgctxt "error_log"
3126
  msgid ""
3127
  "%1$s: mla_taxonomy_column_filter( \"%2$s\" ) - get_term failed: \"%3$s\""
3128
  msgstr ""
3129
 
3130
+ #: includes/class-mla-objects.php:269
3131
  msgid "click to search"
3132
  msgstr ""
3133
 
3134
+ #: includes/class-mla-objects.php:301
3135
  msgid "Shortcode(s), HTML and/or Plain Text"
3136
  msgstr ""
3137
 
3138
+ #: includes/class-mla-objects.php:309
3139
  msgid "MLA Text"
3140
  msgstr ""
3141
 
3142
+ #: includes/class-mla-objects.php:353
3143
  msgid "Automatically add paragraphs"
3144
  msgstr ""
3145
 
3146
+ #: includes/class-mla-objects.php:354
3147
  msgid "Add .textwidget div tags"
3148
  msgstr ""
3149
 
3156
  msgstr ""
3157
 
3158
  #: includes/class-mla-options.php:217 includes/class-mla-options.php:421
3159
+ #: includes/class-mla-options.php:502 includes/class-mla-options.php:557
3160
  #, php-format
3161
  msgid "%1$s: Custom %2$s unknown action \"%3$s\""
3162
  msgstr ""
3219
  msgstr ""
3220
 
3221
  #: includes/class-mla-options.php:411 includes/class-mla-options.php:492
3222
+ #: includes/class-mla-options.php:547
3223
  #, php-format
3224
  msgid "Update custom %1$s"
3225
  msgstr ""
3226
 
3227
  #: includes/class-mla-options.php:418 includes/class-mla-options.php:499
3228
+ #: includes/class-mla-options.php:554
3229
  #, php-format
3230
  msgid "Reset custom %1$s"
3231
  msgstr ""
3245
  #: includes/class-mla-options.php:456
3246
  #: includes/class-mla-settings-custom-fields-tab.php:455
3247
  #: includes/class-mla-settings-custom-fields-tab.php:759
3248
+ #: includes/class-mla-settings-iptc-exif-tab.php:455
3249
+ #: includes/class-mla-settings-iptc-exif-tab.php:841
3250
  #: includes/class-mla-settings-shortcodes-tab.php:401
3251
  #: includes/class-mla-settings-shortcodes-tab.php:472
3252
  #: includes/mla-main-search-box-template.php:49
3266
  msgid "Terms"
3267
  msgstr ""
3268
 
3269
+ #: includes/class-mla-options.php:940 includes/class-mla-options.php:986
3270
+ #: includes/class-mla-options.php:1826 includes/class-mla-options.php:1857
3271
  #: includes/class-mla-settings-upload-tab.php:128
3272
  msgid "None (select a value)"
3273
  msgstr ""
3274
 
3275
+ #: includes/class-mla-options.php:993
3276
  msgid "Metadata (see below)"
3277
  msgstr ""
3278
 
3279
+ #: includes/class-mla-options.php:1000
3280
  msgid "Template (see below)"
3281
  msgstr ""
3282
 
3283
+ #: includes/class-mla-options.php:1072 includes/class-mla-options.php:2139
3284
  #, php-format
3285
  msgid "%1$s: New field %2$s already exists."
3286
  msgstr ""
3287
 
3288
+ #: includes/class-mla-options.php:1077 includes/class-mla-options.php:2144
3289
  #, php-format
3290
  msgid "Adding new field %1$s."
3291
  msgstr ""
3292
 
3293
+ #: includes/class-mla-options.php:1085 includes/class-mla-options.php:2152
3294
  #, php-format
3295
  msgid "Adding new rule for %1$s."
3296
  msgstr ""
3297
 
3298
+ #: includes/class-mla-options.php:1111 includes/class-mla-options.php:2009
3299
+ #: includes/class-mla-options.php:2178
3300
  #, php-format
3301
  msgid "Deleting rule for %1$s."
3302
  msgstr ""
3303
 
3304
+ #: includes/class-mla-options.php:1134 includes/class-mla-options.php:1155
3305
+ #: includes/class-mla-options.php:1205 includes/class-mla-options.php:1212
3306
+ #: includes/class-mla-options.php:1925 includes/class-mla-options.php:1932
3307
+ #: includes/class-mla-options.php:1939 includes/class-mla-options.php:2034
3308
+ #: includes/class-mla-options.php:2041 includes/class-mla-options.php:2076
3309
+ #: includes/class-mla-options.php:2083 includes/class-mla-options.php:2188
3310
+ #: includes/class-mla-options.php:2195 includes/class-mla-options.php:2230
3311
+ #: includes/class-mla-options.php:2237
3312
  #, php-format
3313
  msgid "%1$s changing %2$s from %3$s to %4$s."
3314
  msgstr ""
3315
 
3316
+ #: includes/class-mla-options.php:1134
3317
  #: includes/class-mla-settings-custom-fields-tab.php:463
3318
  #: includes/class-mla-settings-custom-fields-tab.php:763
3319
  msgid "Data Source"
3320
  msgstr ""
3321
 
3322
+ #: includes/class-mla-options.php:1140 includes/class-mla-options.php:1959
3323
+ #: includes/class-mla-options.php:2061 includes/class-mla-options.php:2215
3324
  msgid "Replace to Keep"
3325
  msgstr ""
3326
 
3327
+ #: includes/class-mla-options.php:1143 includes/class-mla-options.php:1962
3328
+ #: includes/class-mla-options.php:2064 includes/class-mla-options.php:2218
3329
  msgid "Keep to Replace"
3330
  msgstr ""
3331
 
3332
+ #: includes/class-mla-options.php:1148 includes/class-mla-options.php:1169
3333
+ #: includes/class-mla-options.php:1183 includes/class-mla-options.php:1197
3334
+ #: includes/class-mla-options.php:1226 includes/class-mla-options.php:1953
3335
+ #: includes/class-mla-options.php:1967 includes/class-mla-options.php:2055
3336
+ #: includes/class-mla-options.php:2069 includes/class-mla-options.php:2209
3337
+ #: includes/class-mla-options.php:2223 includes/class-mla-options.php:2251
3338
  #, php-format
3339
  msgid "%1$s changing %2$s value from %3$s."
3340
  msgstr ""
3341
 
3342
+ #: includes/class-mla-options.php:1148 includes/class-mla-options.php:1967
3343
+ #: includes/class-mla-options.php:2069 includes/class-mla-options.php:2223
3344
  #: includes/class-mla-settings-custom-fields-tab.php:477
3345
  #: includes/class-mla-settings-custom-fields-tab.php:777
3346
+ #: includes/class-mla-settings-iptc-exif-tab.php:474
3347
+ #: includes/class-mla-settings-iptc-exif-tab.php:856
3348
  msgid "Existing Text"
3349
  msgstr ""
3350
 
3351
+ #: includes/class-mla-options.php:1155 includes/class-mla-options.php:2230
3352
  #: includes/class-mla-settings-custom-fields-tab.php:482
3353
  #: includes/class-mla-settings-custom-fields-tab.php:782
3354
+ #: includes/class-mla-settings-iptc-exif-tab.php:489
3355
+ #: includes/class-mla-settings-iptc-exif-tab.php:864
3356
  msgid "Format"
3357
  msgstr ""
3358
 
3359
+ #: includes/class-mla-options.php:1161 includes/class-mla-options.php:1175
3360
+ #: includes/class-mla-options.php:1189 includes/class-mla-options.php:1218
3361
+ #: includes/class-mla-options.php:2243
3362
  msgid "unchecked to checked"
3363
  msgstr ""
3364
 
3365
+ #: includes/class-mla-options.php:1164 includes/class-mla-options.php:1178
3366
+ #: includes/class-mla-options.php:1192 includes/class-mla-options.php:1221
3367
+ #: includes/class-mla-options.php:2246
3368
  msgid "checked to unchecked"
3369
  msgstr ""
3370
 
3371
+ #: includes/class-mla-options.php:1169
3372
  #: includes/class-mla-settings-custom-fields-tab.php:469
3373
  #: includes/class-mla-settings-custom-fields-tab.php:769
3374
  #: includes/class-mla-settings-custom-fields-tab.php:1453
3375
  msgid "MLA Column"
3376
  msgstr ""
3377
 
3378
+ #: includes/class-mla-options.php:1205
3379
  msgid "Metavalue name"
3380
  msgstr ""
3381
 
3382
+ #: includes/class-mla-options.php:1212 includes/class-mla-options.php:2237
3383
  #: includes/class-mla-settings-custom-fields-tab.php:489
3384
  #: includes/class-mla-settings-custom-fields-tab.php:789
3385
+ #: includes/class-mla-settings-iptc-exif-tab.php:496
3386
+ #: includes/class-mla-settings-iptc-exif-tab.php:871
3387
  msgid "Option"
3388
  msgstr ""
3389
 
3390
+ #: includes/class-mla-options.php:1226 includes/class-mla-options.php:2251
3391
+ #: includes/class-mla-settings-iptc-exif-tab.php:508
3392
  msgid "Delete NULL values"
3393
  msgstr ""
3394
 
3395
+ #: includes/class-mla-options.php:1913
3396
  #, php-format
3397
  msgid "%1$s: No old values for %2$s."
3398
  msgstr ""
3399
 
3400
+ #: includes/class-mla-options.php:1925
3401
  msgid "Field Title"
3402
  msgstr ""
3403
 
3404
+ #: includes/class-mla-options.php:1932 includes/class-mla-options.php:2034
3405
+ #: includes/class-mla-options.php:2188
3406
+ #: includes/class-mla-settings-iptc-exif-tab.php:463
3407
+ #: includes/class-mla-settings-iptc-exif-tab.php:845
3408
  msgid "IPTC Value"
3409
  msgstr ""
3410
 
3411
+ #: includes/class-mla-options.php:1939 includes/class-mla-options.php:2041
3412
+ #: includes/class-mla-options.php:2195
3413
  msgid "EXIF Value"
3414
  msgstr ""
3415
 
3416
+ #: includes/class-mla-options.php:1945 includes/class-mla-options.php:2047
3417
+ #: includes/class-mla-options.php:2201
3418
  msgid "EXIF to IPTC"
3419
  msgstr ""
3420
 
3421
+ #: includes/class-mla-options.php:1948 includes/class-mla-options.php:2050
3422
+ #: includes/class-mla-options.php:2204
3423
  msgid "IPTC to EXIF"
3424
  msgstr ""
3425
 
3426
+ #: includes/class-mla-options.php:1953 includes/class-mla-options.php:2055
3427
+ #: includes/class-mla-options.php:2209
3428
+ #: includes/class-mla-settings-iptc-exif-tab.php:469
3429
+ #: includes/class-mla-settings-iptc-exif-tab.php:851
3430
  msgid "Priority"
3431
  msgstr ""
3432
 
3433
+ #: includes/class-mla-options.php:2076
3434
  msgid "Delimiter(s)"
3435
  msgstr ""
3436
 
3454
  msgid "Add new"
3455
  msgstr ""
3456
 
3457
+ #: includes/class-mla-polylang-support.php:1892
3458
+ #: includes/class-mla-polylang-support.php:2259
3459
  msgid "Bulk Translations"
3460
  msgstr ""
3461
 
3462
+ #: includes/class-mla-polylang-support.php:1916
3463
  msgid "Translate"
3464
  msgstr ""
3465
 
3466
+ #: includes/class-mla-polylang-support.php:2044
3467
  msgid "All Languages"
3468
  msgstr ""
3469
 
3470
+ #: includes/class-mla-polylang-support.php:2051
3471
+ #: includes/class-mla-polylang-support.php:2324
3472
+ #: includes/class-mla-polylang-support.php:2484
3473
  msgid "Quick Translate"
3474
  msgstr ""
3475
 
3476
+ #: includes/class-mla-polylang-support.php:2055
3477
  msgid "Set Language"
3478
  msgstr ""
3479
 
3480
+ #: includes/class-mla-polylang-support.php:2056
3481
+ #: includes/class-mla-polylang-support.php:2491
3482
  msgid "Bulk Translate"
3483
  msgstr ""
3484
 
3485
+ #: includes/class-mla-polylang-support.php:2057
3486
  msgid "Add or Modify Translation"
3487
  msgstr ""
3488
 
3489
+ #: includes/class-mla-polylang-support.php:2058
3490
+ #: includes/class-mla-polylang-support.php:2115
3491
+ #: includes/class-mla-polylang-support.php:2428
3492
+ #: includes/class-mla-polylang-support.php:2543
3493
  #: includes/class-mla-wpml-support.php:1584
3494
  #: includes/class-mla-wpml-support.php:1674
3495
+ #: includes/class-mla-wpml-support.php:2159
3496
  msgid "Language"
3497
  msgstr ""
3498
 
3499
+ #: includes/class-mla-polylang-support.php:2060
3500
+ #: includes/class-mla-thumbnail-generation.php:649
3501
  msgid "Options"
3502
  msgstr ""
3503
 
3504
+ #: includes/class-mla-polylang-support.php:2324
3505
  msgid "Translate this item inline"
3506
  msgstr ""
3507
 
3508
+ #: includes/class-mla-polylang-support.php:2465
3509
+ #: includes/class-mla-polylang-support.php:2570
3510
  #: includes/class-mla-wpml-support.php:1619
3511
  #: includes/class-mla-wpml-support.php:1722
3512
  msgid "Media/Assistant submenu table"
3513
  msgstr ""
3514
 
3515
+ #: includes/class-mla-polylang-support.php:2470
3516
  #: includes/class-mla-wpml-support.php:1624
3517
  msgid "Language Column"
3518
  msgstr ""
3519
 
3520
+ #: includes/class-mla-polylang-support.php:2473
3521
  #: includes/class-mla-wpml-support.php:1627
3522
  msgid ""
3523
  "Check this option to add a Language column to the Media/Assistant submenu "
3524
  "table."
3525
  msgstr ""
3526
 
3527
+ #: includes/class-mla-polylang-support.php:2477
3528
  #: includes/class-mla-wpml-support.php:1631
3529
  msgid "Translations Column"
3530
  msgstr ""
3531
 
3532
+ #: includes/class-mla-polylang-support.php:2480
3533
  #: includes/class-mla-wpml-support.php:1634
3534
  msgid ""
3535
  "Check this option to add a Translation Status column to the Media/Assistant "
3536
  "submenu table."
3537
  msgstr ""
3538
 
3539
+ #: includes/class-mla-polylang-support.php:2487
3540
  msgid ""
3541
  "Check this option to add a Quick Translate rollover action to the Media/"
3542
  "Assistant submenu table."
3543
  msgstr ""
3544
 
3545
+ #: includes/class-mla-polylang-support.php:2494
3546
  msgid ""
3547
  "Check this option to add \"Translate\" to the \"Bulk Actions\" control on "
3548
  "the Media/Assistant submenu table."
3549
  msgstr ""
3550
 
3551
+ #: includes/class-mla-polylang-support.php:2498
3552
+ #: includes/class-mla-polylang-support.php:2570
3553
  #: includes/class-mla-wpml-support.php:1638
3554
  #: includes/class-mla-wpml-support.php:1722
3555
  msgid "Term Management"
3556
  msgstr ""
3557
 
3558
+ #: includes/class-mla-polylang-support.php:2503
3559
  #: includes/class-mla-wpml-support.php:1643
3560
  msgid "Term Assignment"
3561
  msgstr ""
3562
 
3563
+ #: includes/class-mla-polylang-support.php:2506
3564
  #: includes/class-mla-wpml-support.php:1646
3565
  msgid ""
3566
  "Check this option to assign language-specific terms when items are updated."
3567
  msgstr ""
3568
 
3569
+ #: includes/class-mla-polylang-support.php:2510
3570
  #: includes/class-mla-wpml-support.php:1650
3571
  msgid "Term Synchronization"
3572
  msgstr ""
3573
 
3574
+ #: includes/class-mla-polylang-support.php:2513
3575
  #: includes/class-mla-wpml-support.php:1653
3576
  msgid ""
3577
  "Check this option to synchronize common terms among all item translations."
3578
  msgstr ""
3579
 
3580
+ #: includes/class-mla-polylang-support.php:2517
3581
  #: includes/class-mla-wpml-support.php:1657
3582
  msgid "Term Mapping Replication"
3583
  msgstr ""
3584
 
3585
+ #: includes/class-mla-polylang-support.php:2520
3586
  #: includes/class-mla-wpml-support.php:1660
3587
  msgid ""
3588
  "When mapping IPTC/EXIF metadata to taxonomy terms, make them available in "
3589
  "all languages."
3590
  msgstr ""
3591
 
3592
+ #: includes/class-mla-polylang-support.php:2568
3593
  #: includes/class-mla-wpml-support.php:1720
3594
  msgid "Language Options"
3595
  msgstr ""
3596
 
3597
+ #: includes/class-mla-polylang-support.php:2570
3598
  #, php-format
3599
  msgid ""
3600
  "In this tab you can find a number of options for controlling Polylang-"
3603
  "make."
3604
  msgstr ""
3605
 
3606
+ #: includes/class-mla-polylang-support.php:2572
3607
  #: includes/class-mla-wpml-support.php:1724
3608
  #, php-format
3609
  msgid ""
3611
  "section of the Documentation."
3612
  msgstr ""
3613
 
3614
+ #: includes/class-mla-polylang-support.php:2572
3615
  #: includes/class-mla-wpml-support.php:1724
3616
  msgid "Language Options documentation"
3617
  msgstr ""
3618
 
3619
+ #: includes/class-mla-polylang-support.php:2572
3620
  #: includes/class-mla-wpml-support.php:1724
3621
  msgid "WPML &amp; Polylang Multilingual Support; the MLA Language Tab"
3622
  msgstr ""
3623
 
3624
+ #: includes/class-mla-polylang-support.php:2575
3625
  #: includes/class-mla-settings-custom-fields-tab.php:657
3626
  #: includes/class-mla-settings-custom-fields-tab.php:756
3627
+ #: includes/class-mla-settings-iptc-exif-tab.php:738
3628
+ #: includes/class-mla-settings-iptc-exif-tab.php:836
3629
  #: includes/class-mla-settings-shortcodes-tab.php:713
3630
  #: includes/class-mla-settings-upload-tab.php:480
3631
  #: includes/class-mla-settings-upload-tab.php:530
3632
  #: includes/class-mla-settings-view-tab.php:320
3633
  #: includes/class-mla-settings-view-tab.php:372
3634
+ #: includes/class-mla-settings.php:1063 includes/class-mla-settings.php:1437
3635
+ #: includes/class-mla-settings.php:1439
3636
  #: includes/class-mla-wpml-support.php:1727
3637
  msgid "Save Changes"
3638
  msgstr ""
3639
 
3640
+ #: includes/class-mla-polylang-support.php:2576
3641
  #: includes/class-mla-wpml-support.php:1728
3642
  msgid "Delete Language options and restore default settings"
3643
  msgstr ""
3644
 
3645
+ #: includes/class-mla-polylang-support.php:2579
3646
+ #: includes/class-mla-settings.php:801 includes/class-mla-settings.php:1068
3647
  #: includes/class-mla-wpml-support.php:1731
3648
  msgid "Go to Top"
3649
  msgstr ""
3650
 
3651
+ #: includes/class-mla-polylang-support.php:2616
3652
  #: includes/class-mla-wpml-support.php:1768
3653
  msgid "Language settings saved."
3654
  msgstr ""
3655
 
3656
+ #: includes/class-mla-polylang-support.php:2647
3657
+ #: includes/class-mla-settings.php:1655
3658
  #: includes/class-mla-wpml-support.php:1799
3659
  #, php-format
3660
  msgctxt "message_list"
3661
  msgid "delete_option \"%1$s\""
3662
  msgstr ""
3663
 
3664
+ #: includes/class-mla-polylang-support.php:2655
3665
  #: includes/class-mla-wpml-support.php:1807
3666
  msgid "Language settings reset to default values."
3667
  msgstr ""
3767
  #: includes/class-mla-settings-custom-fields-tab.php:341
3768
  #: includes/class-mla-settings-custom-fields-tab.php:425
3769
  #: includes/class-mla-settings-custom-fields-tab.php:956
3770
+ #: includes/class-mla-settings-iptc-exif-tab.php:346
3771
+ #: includes/class-mla-settings-iptc-exif-tab.php:422
3772
+ #: includes/class-mla-settings-iptc-exif-tab.php:1028
3773
  msgid ": Rule update failed"
3774
  msgstr ""
3775
 
3776
  #: includes/class-mla-settings-custom-fields-tab.php:346
3777
  #: includes/class-mla-settings-custom-fields-tab.php:428
3778
+ #: includes/class-mla-settings-iptc-exif-tab.php:351
3779
+ #: includes/class-mla-settings-iptc-exif-tab.php:425
3780
  msgid "Rule updated"
3781
  msgstr ""
3782
 
3783
  #: includes/class-mla-settings-custom-fields-tab.php:370
3784
+ #: includes/class-mla-settings-iptc-exif-tab.php:375
3785
  #, php-format
3786
  msgid "Custom Field Rule \"%1$s\" deleted."
3787
  msgstr ""
3788
 
3789
  #: includes/class-mla-settings-custom-fields-tab.php:449
3790
+ #: includes/class-mla-settings-iptc-exif-tab.php:446
3791
  msgid "Edit Rule"
3792
  msgstr ""
3793
 
3794
  #: includes/class-mla-settings-custom-fields-tab.php:458
3795
+ #: includes/class-mla-settings-iptc-exif-tab.php:458
3796
  msgid ""
3797
  "This is the name of the custom field to which the rule applies.<br>Only one "
3798
  "rule is allowed for each custom field."
3799
  msgstr ""
3800
 
3801
  #: includes/class-mla-settings-custom-fields-tab.php:459
3802
+ #: includes/class-mla-settings-iptc-exif-tab.php:459
3803
  msgid "Change Name"
3804
  msgstr ""
3805
 
3806
  #: includes/class-mla-settings-custom-fields-tab.php:460
3807
+ #: includes/class-mla-settings-iptc-exif-tab.php:460
3808
  msgid "Cancel Name Change"
3809
  msgstr ""
3810
 
3811
  #: includes/class-mla-settings-custom-fields-tab.php:461
3812
  #: includes/class-mla-settings-custom-fields-tab.php:761
3813
+ #: includes/class-mla-settings-iptc-exif-tab.php:461
3814
+ #: includes/class-mla-settings-iptc-exif-tab.php:843
3815
  msgid "Enter new field"
3816
  msgstr ""
3817
 
3818
  #: includes/class-mla-settings-custom-fields-tab.php:462
3819
  #: includes/class-mla-settings-custom-fields-tab.php:762
3820
+ #: includes/class-mla-settings-iptc-exif-tab.php:462
3821
+ #: includes/class-mla-settings-iptc-exif-tab.php:844
3822
  msgid "Cancel new field"
3823
  msgstr ""
3824
 
3850
  #: includes/class-mla-settings-custom-fields-tab.php:479
3851
  #: includes/class-mla-settings-custom-fields-tab.php:779
3852
  #: includes/class-mla-settings-custom-fields-tab.php:1499
3853
+ #: includes/class-mla-settings-iptc-exif-tab.php:476
3854
+ #: includes/class-mla-settings-iptc-exif-tab.php:858
3855
+ #: includes/class-mla-settings-iptc-exif-tab.php:1560
3856
+ #: includes/class-mla-settings-iptc-exif-tab.php:2414
3857
+ #: includes/class-mla-thumbnail-generation.php:643
3858
  msgid "Keep"
3859
  msgstr ""
3860
 
3861
  #: includes/class-mla-settings-custom-fields-tab.php:484
3862
  #: includes/class-mla-settings-custom-fields-tab.php:784
3863
+ #: includes/class-mla-settings-iptc-exif-tab.php:491
3864
+ #: includes/class-mla-settings-iptc-exif-tab.php:866
3865
  msgid "Native"
3866
  msgstr ""
3867
 
3868
  #: includes/class-mla-settings-custom-fields-tab.php:486
3869
  #: includes/class-mla-settings-custom-fields-tab.php:786
3870
+ #: includes/class-mla-settings-iptc-exif-tab.php:493
3871
+ #: includes/class-mla-settings-iptc-exif-tab.php:868
3872
  msgid "Commas"
3873
  msgstr ""
3874
 
3875
  #: includes/class-mla-settings-custom-fields-tab.php:488
3876
  #: includes/class-mla-settings-custom-fields-tab.php:788
3877
+ #: includes/class-mla-settings-iptc-exif-tab.php:495
3878
+ #: includes/class-mla-settings-iptc-exif-tab.php:870
3879
  msgid "Raw"
3880
  msgstr ""
3881
 
3882
  #: includes/class-mla-settings-custom-fields-tab.php:491
3883
  #: includes/class-mla-settings-custom-fields-tab.php:791
3884
+ #: includes/class-mla-settings-iptc-exif-tab.php:498
3885
+ #: includes/class-mla-settings-iptc-exif-tab.php:873
3886
  msgid "Text"
3887
  msgstr ""
3888
 
3889
  #: includes/class-mla-settings-custom-fields-tab.php:493
3890
  #: includes/class-mla-settings-custom-fields-tab.php:793
3891
+ #: includes/class-mla-settings-iptc-exif-tab.php:500
3892
+ #: includes/class-mla-settings-iptc-exif-tab.php:875
3893
  msgid "Single"
3894
  msgstr ""
3895
 
3896
  #: includes/class-mla-settings-custom-fields-tab.php:495
3897
  #: includes/class-mla-settings-custom-fields-tab.php:795
3898
+ #: includes/class-mla-settings-iptc-exif-tab.php:502
3899
+ #: includes/class-mla-settings-iptc-exif-tab.php:877
3900
  msgid "Export"
3901
  msgstr ""
3902
 
3903
  #: includes/class-mla-settings-custom-fields-tab.php:497
3904
  #: includes/class-mla-settings-custom-fields-tab.php:797
3905
+ #: includes/class-mla-settings-iptc-exif-tab.php:504
3906
+ #: includes/class-mla-settings-iptc-exif-tab.php:879
3907
  msgid "Array"
3908
  msgstr ""
3909
 
3910
  #: includes/class-mla-settings-custom-fields-tab.php:499
3911
  #: includes/class-mla-settings-custom-fields-tab.php:799
3912
+ #: includes/class-mla-settings-iptc-exif-tab.php:506
3913
+ #: includes/class-mla-settings-iptc-exif-tab.php:881
3914
  msgid "Multi"
3915
  msgstr ""
3916
 
3917
  #: includes/class-mla-settings-custom-fields-tab.php:501
3918
  #: includes/class-mla-settings-custom-fields-tab.php:801
3919
+ #: includes/class-mla-settings-iptc-exif-tab.php:883
3920
  msgid "Delete NULL Values"
3921
  msgstr ""
3922
 
3923
  #: includes/class-mla-settings-custom-fields-tab.php:502
3924
  #: includes/class-mla-settings-custom-fields-tab.php:802
3925
+ #: includes/class-mla-settings-iptc-exif-tab.php:509
3926
+ #: includes/class-mla-settings-iptc-exif-tab.php:884
3927
  msgid "Do not store empty custom field values"
3928
  msgstr ""
3929
 
3931
  #: includes/class-mla-settings-custom-fields-tab.php:805
3932
  #: includes/class-mla-settings-custom-fields-tab.php:1483
3933
  #: includes/class-mla-settings-custom-fields-tab.php:1706
3934
+ #: includes/class-mla-settings-documentation-tab.php:1208
3935
+ #: includes/class-mla-settings-iptc-exif-tab.php:513
3936
+ #: includes/class-mla-settings-iptc-exif-tab.php:887
3937
+ #: includes/class-mla-settings-iptc-exif-tab.php:1576
3938
+ #: includes/class-mla-settings-iptc-exif-tab.php:1812
3939
+ #: includes/class-mla-settings-iptc-exif-tab.php:2417
3940
  #: includes/class-mla-settings-upload-tab.php:554
3941
  #: includes/class-mla-settings-upload-tab.php:1036
3942
  msgid "Active"
3946
  #: includes/class-mla-settings-custom-fields-tab.php:807
3947
  #: includes/class-mla-settings-custom-fields-tab.php:1485
3948
  #: includes/class-mla-settings-custom-fields-tab.php:1709
3949
+ #: includes/class-mla-settings-documentation-tab.php:1210
3950
+ #: includes/class-mla-settings-iptc-exif-tab.php:515
3951
+ #: includes/class-mla-settings-iptc-exif-tab.php:889
3952
+ #: includes/class-mla-settings-iptc-exif-tab.php:1578
3953
+ #: includes/class-mla-settings-iptc-exif-tab.php:1815
3954
+ #: includes/class-mla-settings-iptc-exif-tab.php:2417
3955
  #: includes/class-mla-settings-upload-tab.php:172
3956
  #: includes/class-mla-settings-upload-tab.php:540
3957
  #: includes/class-mla-settings-upload-tab.php:1034
3959
  msgstr ""
3960
 
3961
  #: includes/class-mla-settings-custom-fields-tab.php:534
3962
+ #: includes/class-mla-settings-iptc-exif-tab.php:613
3963
  #, php-format
3964
  msgid "Custom Field Rule \"%1$s\": %2$s"
3965
  msgstr ""
3970
 
3971
  #: includes/class-mla-settings-custom-fields-tab.php:583
3972
  #: includes/class-mla-settings-custom-fields-tab.php:611
3973
+ #: includes/class-mla-settings-documentation-tab.php:233
3974
+ #: includes/class-mla-settings-iptc-exif-tab.php:662
3975
+ #: includes/class-mla-settings-iptc-exif-tab.php:690
3976
  #: includes/class-mla-settings-shortcodes-tab.php:552
3977
  #: includes/class-mla-settings-upload-tab.php:400
3978
  #: includes/class-mla-settings-view-tab.php:244
3989
  msgstr ""
3990
 
3991
  #: includes/class-mla-settings-custom-fields-tab.php:724
3992
+ #: includes/class-mla-settings-iptc-exif-tab.php:805
3993
  msgid "DO NOT DO THE FOLLOWING (they will cause mapping to fail)"
3994
  msgstr ""
3995
 
3996
  #: includes/class-mla-settings-custom-fields-tab.php:725
3997
+ #: includes/class-mla-settings-iptc-exif-tab.php:806
3998
  msgid "Close the window"
3999
  msgstr ""
4000
 
4001
  #: includes/class-mla-settings-custom-fields-tab.php:726
4002
+ #: includes/class-mla-settings-iptc-exif-tab.php:807
4003
  msgid "Reload the page"
4004
  msgstr ""
4005
 
4006
  #: includes/class-mla-settings-custom-fields-tab.php:727
4007
+ #: includes/class-mla-settings-iptc-exif-tab.php:808
4008
  msgid "Click the browser&rsquo;s Stop, Back or forward buttons"
4009
  msgstr ""
4010
 
4011
  #: includes/class-mla-settings-custom-fields-tab.php:728
4012
+ #: includes/class-mla-settings-iptc-exif-tab.php:809
4013
  msgid "Progress"
4014
  msgstr ""
4015
 
4016
  #: includes/class-mla-settings-custom-fields-tab.php:729
4017
+ #: includes/class-mla-settings-iptc-exif-tab.php:810
4018
  msgid "Pause"
4019
  msgstr ""
4020
 
4021
  #: includes/class-mla-settings-custom-fields-tab.php:731
4022
+ #: includes/class-mla-settings-iptc-exif-tab.php:812
4023
  msgid "Resume"
4024
  msgstr ""
4025
 
4026
  #: includes/class-mla-settings-custom-fields-tab.php:732
4027
  #: includes/class-mla-settings-documentation-tab.php:107
4028
+ #: includes/class-mla-settings-iptc-exif-tab.php:813
4029
  #: includes/class-mla-settings-shortcodes-tab.php:476
4030
  #: includes/class-mla-template-support.php:160
4031
  #: includes/class-mla-template-support.php:166
4050
  msgstr ""
4051
 
4052
  #: includes/class-mla-settings-custom-fields-tab.php:745
4053
+ #: includes/class-mla-settings-iptc-exif-tab.php:826
4054
  msgid ""
4055
  "You can find more information about using the controls in this tab to define "
4056
  "mapping rules and apply them by clicking the \"Help\" control in the upper-"
4058
  msgstr ""
4059
 
4060
  #: includes/class-mla-settings-custom-fields-tab.php:750
4061
+ #: includes/class-mla-settings-iptc-exif-tab.php:831
4062
  #: includes/class-mla-settings-shortcodes-tab.php:711
4063
  msgid "Search results for"
4064
  msgstr ""
4065
 
4066
  #: includes/class-mla-settings-custom-fields-tab.php:752
4067
+ #: includes/class-mla-settings-iptc-exif-tab.php:832
4068
  msgid "Search Rules Text"
4069
  msgstr ""
4070
 
4071
  #: includes/class-mla-settings-custom-fields-tab.php:754
4072
+ #: includes/class-mla-settings-iptc-exif-tab.php:834
4073
  msgid "Search Rules"
4074
  msgstr ""
4075
 
4076
  #: includes/class-mla-settings-custom-fields-tab.php:757
4077
+ #: includes/class-mla-settings-iptc-exif-tab.php:837
4078
  msgid "Execute All Rules"
4079
  msgstr ""
4080
 
4081
  #: includes/class-mla-settings-custom-fields-tab.php:758
4082
+ #: includes/class-mla-settings-iptc-exif-tab.php:838
4083
  msgid "Add New Custom Field Rule"
4084
  msgstr ""
4085
 
4086
  #: includes/class-mla-settings-custom-fields-tab.php:808
4087
+ #: includes/class-mla-settings-iptc-exif-tab.php:890
4088
  msgid "Add Rule"
4089
  msgstr ""
4090
 
4091
  #: includes/class-mla-settings-custom-fields-tab.php:872
4092
  #: includes/class-mla-settings-custom-fields-tab.php:894
4093
+ #: includes/class-mla-settings-iptc-exif-tab.php:965
4094
  msgid "Nothing to execute"
4095
  msgstr ""
4096
 
4097
  #: includes/class-mla-settings-custom-fields-tab.php:928
4098
+ #: includes/class-mla-settings-iptc-exif-tab.php:1000
4099
  msgid "Rule ID not found"
4100
  msgstr ""
4101
 
4102
  #: includes/class-mla-settings-custom-fields-tab.php:932
4103
+ #: includes/class-mla-settings-iptc-exif-tab.php:1004
4104
  msgid "Rule not found"
4105
  msgstr ""
4106
 
4107
  #: includes/class-mla-settings-custom-fields-tab.php:1203
4108
+ #: includes/class-mla-settings-iptc-exif-tab.php:1279
4109
  msgctxt "list_table_column"
4110
  msgid "Bad Name"
4111
  msgstr ""
4121
  msgstr ""
4122
 
4123
  #: includes/class-mla-settings-custom-fields-tab.php:1208
4124
+ #: includes/class-mla-settings-iptc-exif-tab.php:1283
4125
  msgctxt "list_table_column"
4126
  msgid "Existing Text"
4127
  msgstr ""
4128
 
4129
  #: includes/class-mla-settings-custom-fields-tab.php:1209
4130
+ #: includes/class-mla-settings-iptc-exif-tab.php:1287
4131
  msgctxt "list_table_column"
4132
  msgid "Delete NULL"
4133
  msgstr ""
4134
 
4135
  #: includes/class-mla-settings-custom-fields-tab.php:1210
4136
+ #: includes/class-mla-settings-iptc-exif-tab.php:1288
4137
  msgctxt "list_table_column"
4138
  msgid "Format"
4139
  msgstr ""
4140
 
4141
  #: includes/class-mla-settings-custom-fields-tab.php:1211
4142
+ #: includes/class-mla-settings-iptc-exif-tab.php:1289
4143
  msgctxt "list_table_column"
4144
  msgid "Option"
4145
  msgstr ""
4146
 
4147
  #: includes/class-mla-settings-custom-fields-tab.php:1350
4148
+ #: includes/class-mla-settings-iptc-exif-tab.php:1428
4149
  msgid "Map All Attachments"
4150
  msgstr ""
4151
 
4152
  #: includes/class-mla-settings-custom-fields-tab.php:1350
4153
  #: includes/class-mla-settings-custom-fields-tab.php:1685
4154
+ #: includes/class-mla-settings-iptc-exif-tab.php:1428
4155
+ #: includes/class-mla-settings-iptc-exif-tab.php:1791
4156
  msgid "Execute"
4157
  msgstr ""
4158
 
4162
 
4163
  #: includes/class-mla-settings-custom-fields-tab.php:1352
4164
  #: includes/class-mla-settings-custom-fields-tab.php:1686
4165
+ #: includes/class-mla-settings-iptc-exif-tab.php:1431
4166
+ #: includes/class-mla-settings-iptc-exif-tab.php:1792
4167
  msgid "Purge Values"
4168
  msgstr ""
4169
 
4170
  #: includes/class-mla-settings-custom-fields-tab.php:1703
4171
+ #: includes/class-mla-settings-iptc-exif-tab.php:1809
4172
  #: includes/class-mla-settings-shortcodes-tab.php:1299
4173
  msgid "Any Status"
4174
  msgstr ""
4204
  msgstr ""
4205
 
4206
  #: includes/class-mla-settings-custom-fields-tab.php:2470
4207
+ #: includes/class-mla-settings-iptc-exif-tab.php:2738
4208
  msgctxt "table_view_singular"
4209
  msgid "Read Only"
4210
  msgstr ""
4211
 
4212
  #: includes/class-mla-settings-custom-fields-tab.php:2471
4213
+ #: includes/class-mla-settings-iptc-exif-tab.php:2739
4214
  msgctxt "table_view_plural"
4215
  msgid "Read Only"
4216
  msgstr ""
4217
 
4218
  #: includes/class-mla-settings-documentation-tab.php:82
4219
+ #: includes/class-mla-settings-documentation-tab.php:935
4220
+ #: includes/class-mla-settings-documentation-tab.php:1020
4221
+ #: includes/class-mla-settings-documentation-tab.php:1050
4222
  #, php-format
4223
  msgid "Example plugin \"%1$s\" not found"
4224
  msgstr ""
4225
 
4226
  #: includes/class-mla-settings-documentation-tab.php:97
4227
+ #: includes/class-mla-settings.php:1369
4228
  #, php-format
4229
  msgid "%1$s: Reading the %2$s file ( %3$s ) \"%4$s\"."
4230
  msgstr ""
4284
  msgid "Searches Name, Description, File Name and Tags"
4285
  msgstr ""
4286
 
4287
+ #: includes/class-mla-settings-documentation-tab.php:256
4288
  #, php-format
4289
  msgid "Empty mla_item_ID - \"%1$s\""
4290
  msgstr ""
4291
 
4292
+ #: includes/class-mla-settings-documentation-tab.php:491
4293
  msgctxt "list_table_column"
4294
  msgid "Current Version"
4295
  msgstr ""
4296
 
4297
+ #: includes/class-mla-settings-documentation-tab.php:492
4298
  msgctxt "list_table_column"
4299
  msgid "Installed Version"
4300
  msgstr ""
4301
 
4302
+ #: includes/class-mla-settings-documentation-tab.php:494
4303
  msgctxt "list_table_column"
4304
  msgid "File Name"
4305
  msgstr ""
4306
 
4307
+ #: includes/class-mla-settings-documentation-tab.php:495
4308
  msgctxt "list_table_column"
4309
  msgid "Tags"
4310
  msgstr ""
4311
 
4312
+ #: includes/class-mla-settings-documentation-tab.php:631
4313
  msgid "Install this plugin"
4314
  msgstr ""
4315
 
4316
+ #: includes/class-mla-settings-documentation-tab.php:631
4317
+ #: includes/class-mla-settings-documentation-tab.php:842
4318
  msgid "Install"
4319
  msgstr ""
4320
 
4321
+ #: includes/class-mla-settings-documentation-tab.php:635
4322
  msgid "Update this plugin"
4323
  msgstr ""
4324
 
4325
+ #: includes/class-mla-settings-documentation-tab.php:648
4326
  #: includes/class-mla-settings-shortcodes-tab.php:1069
4327
  msgid "View this item"
4328
  msgstr ""
4329
 
4330
+ #: includes/class-mla-settings-documentation-tab.php:958
4331
  #, php-format
4332
  msgid "Example plugin \"%1$s\" fs_connect failed; no action taken. Error: %2$s"
4333
  msgstr ""
4334
 
4335
+ #: includes/class-mla-settings-documentation-tab.php:963
4336
  #, php-format
4337
  msgid "Example plugin \"%1$s\" fs_connect failed; no action taken"
4338
  msgstr ""
4339
 
4340
+ #: includes/class-mla-settings-documentation-tab.php:988
4341
  #, php-format
4342
  msgid ""
4343
  "Example plugin \"%1$s\" install_package failed; no action taken. Error: %2$s"
4344
  msgstr ""
4345
 
4346
+ #: includes/class-mla-settings-documentation-tab.php:999
4347
  #, php-format
4348
  msgid "Example plugin \"%1$s\" remove old single file failed."
4349
  msgstr ""
4350
 
4351
+ #: includes/class-mla-settings-documentation-tab.php:1025
4352
  #, php-format
4353
  msgid "Example plugin \"%1$s\" already installed; no action taken"
4354
  msgstr ""
4355
 
4356
+ #: includes/class-mla-settings-documentation-tab.php:1031
4357
  #, php-format
4358
  msgid "Example plugin \"%1$s\" installed"
4359
  msgstr ""
4360
 
4361
+ #: includes/class-mla-settings-documentation-tab.php:1055
4362
  #, php-format
4363
  msgid "Example plugin \"%1$s\" not installed; no action taken"
4364
  msgstr ""
4365
 
4366
+ #: includes/class-mla-settings-documentation-tab.php:1061
4367
  #, php-format
4368
  msgid "Example plugin \"%1$s\" updated"
4369
  msgstr ""
4370
 
4371
+ #: includes/class-mla-settings-documentation-tab.php:1206
4372
  msgid "Network"
4373
  msgstr ""
4374
 
4375
+ #: includes/class-mla-settings-documentation-tab.php:1539
4376
  msgctxt "table_view_singular"
4377
  msgid "Installed"
4378
  msgstr ""
4379
 
4380
+ #: includes/class-mla-settings-documentation-tab.php:1540
4381
  msgctxt "table_view_plural"
4382
  msgid "Installed"
4383
  msgstr ""
4384
 
4385
+ #: includes/class-mla-settings-documentation-tab.php:1551
4386
  msgctxt "table_view_singular"
4387
  msgid "Network"
4388
  msgstr ""
4389
 
4390
+ #: includes/class-mla-settings-documentation-tab.php:1552
4391
  msgctxt "table_view_plural"
4392
  msgid "Network"
4393
  msgstr ""
4394
 
4395
+ #: includes/class-mla-settings-documentation-tab.php:1555
4396
  msgctxt "table_view_singular"
4397
  msgid "Uninstalled"
4398
  msgstr ""
4399
 
4400
+ #: includes/class-mla-settings-documentation-tab.php:1556
4401
  msgctxt "table_view_plural"
4402
  msgid "Uninstalled"
4403
  msgstr ""
4414
  msgid "updated."
4415
  msgstr ""
4416
 
4417
+ #: includes/class-mla-settings-iptc-exif-tab.php:465
4418
+ #: includes/class-mla-settings-iptc-exif-tab.php:847
4419
  msgid "EXIF/Template Value"
4420
  msgstr ""
4421
 
4422
+ #: includes/class-mla-settings-iptc-exif-tab.php:468
4423
+ #: includes/class-mla-settings-iptc-exif-tab.php:850
4424
  msgid "EXIF element name or Content Template"
4425
  msgstr ""
4426
 
4427
+ #: includes/class-mla-settings-iptc-exif-tab.php:468
4428
+ msgid " (starting with \"template:\")"
4429
+ msgstr ""
4430
+
4431
+ #: includes/class-mla-settings-iptc-exif-tab.php:471
4432
+ #: includes/class-mla-settings-iptc-exif-tab.php:853
4433
+ #: includes/class-mla-settings-iptc-exif-tab.php:1544
4434
  msgid "IPTC"
4435
  msgstr ""
4436
 
4437
+ #: includes/class-mla-settings-iptc-exif-tab.php:473
4438
+ #: includes/class-mla-settings-iptc-exif-tab.php:855
4439
+ #: includes/class-mla-settings-iptc-exif-tab.php:1547
4440
  msgid "EXIF"
4441
  msgstr ""
4442
 
4443
+ #: includes/class-mla-settings-iptc-exif-tab.php:481
4444
+ #: includes/class-mla-settings-iptc-exif-tab.php:861
4445
  msgid "Delimiters"
4446
  msgstr ""
4447
 
4448
+ #: includes/class-mla-settings-iptc-exif-tab.php:536
4449
  msgid "Standard field mapping"
4450
  msgstr ""
4451
 
4452
+ #: includes/class-mla-settings-iptc-exif-tab.php:539
4453
  msgid "Taxonomy term mapping"
4454
  msgstr ""
4455
 
4456
+ #: includes/class-mla-settings-iptc-exif-tab.php:554
4457
  msgid "Custom field mapping"
4458
  msgstr ""
4459
 
4460
+ #: includes/class-mla-settings-iptc-exif-tab.php:649
4461
  msgid "Edit IPTC EXIF Rule cancelled."
4462
  msgstr ""
4463
 
4464
+ #: includes/class-mla-settings-iptc-exif-tab.php:735
4465
  msgid "IPTC/EXIF Mapping Support is disabled"
4466
  msgstr ""
4467
 
4468
+ #: includes/class-mla-settings-iptc-exif-tab.php:804
4469
  msgid "IPTC &amp; EXIF Mapping Progress"
4470
  msgstr ""
4471
 
4472
+ #: includes/class-mla-settings-iptc-exif-tab.php:822
4473
  msgid "IPTC &amp; EXIF Processing Options"
4474
  msgstr ""
4475
 
4476
+ #: includes/class-mla-settings-iptc-exif-tab.php:824
4477
  msgid ""
4478
  "In this tab you can define the rules for mapping IPTC (International Press "
4479
  "Telecommunications Council) and EXIF (EXchangeable Image File) metadata to "
4480
  "WordPress standard attachment fields, taxonomy terms and custom fields."
4481
  msgstr ""
4482
 
4483
+ #: includes/class-mla-settings-iptc-exif-tab.php:1280
4484
  msgctxt "list_table_column"
4485
  msgid "IPTC Value"
4486
  msgstr ""
4487
 
4488
+ #: includes/class-mla-settings-iptc-exif-tab.php:1281
4489
  msgctxt "list_table_column"
4490
  msgid "EXIF/Template Value"
4491
  msgstr ""
4492
 
4493
+ #: includes/class-mla-settings-iptc-exif-tab.php:1282
4494
  msgctxt "list_table_column"
4495
  msgid "Priority "
4496
  msgstr ""
4497
 
4498
+ #: includes/class-mla-settings-iptc-exif-tab.php:1285
4499
  msgctxt "list_table_column"
4500
  msgid "Delimiter(s)"
4501
  msgstr ""
4502
 
4503
+ #: includes/class-mla-settings-iptc-exif-tab.php:1286
4504
  msgctxt "list_table_column"
4505
  msgid "Parent"
4506
  msgstr ""
4507
 
4508
+ #: includes/class-mla-settings-iptc-exif-tab.php:1431
4509
  msgid "Purge IPTC EXIF values"
4510
  msgstr ""
4511
 
4512
+ #: includes/class-mla-settings-iptc-exif-tab.php:2726
4513
  msgctxt "table_view_singular"
4514
  msgid "Standard"
4515
  msgstr ""
4516
 
4517
+ #: includes/class-mla-settings-iptc-exif-tab.php:2727
4518
  msgctxt "table_view_plural"
4519
  msgid "Standard"
4520
  msgstr ""
4521
 
4522
+ #: includes/class-mla-settings-iptc-exif-tab.php:2730
4523
  msgctxt "table_view_singular"
4524
  msgid "Taxonomy"
4525
  msgstr ""
4526
 
4527
+ #: includes/class-mla-settings-iptc-exif-tab.php:2731
4528
  msgctxt "table_view_plural"
4529
  msgid "Taxonomy"
4530
  msgstr ""
4628
 
4629
  #: includes/class-mla-settings-shortcodes-tab.php:319
4630
  #: includes/class-mla-settings-shortcodes-tab.php:322
4631
+ #: includes/class-mla-settings.php:956
4632
  msgid "Shortcodes"
4633
  msgstr ""
4634
 
4774
  msgstr ""
4775
 
4776
  #: includes/class-mla-settings-shortcodes-tab.php:1282
4777
+ #: includes/class-mla-thumbnail-generation.php:646
4778
  msgid "Delete"
4779
  msgstr ""
4780
 
5121
  msgid "No view slug found"
5122
  msgstr ""
5123
 
5124
+ #: includes/class-mla-settings.php:429 includes/class-mla-settings.php:655
5125
+ #: includes/class-mla-settings.php:1478
5126
  msgid "Settings"
5127
  msgstr ""
5128
 
5150
  msgid "Plugins per page"
5151
  msgstr ""
5152
 
5153
+ #: includes/class-mla-settings.php:653
5154
+ msgid "Guide"
5155
+ msgstr ""
5156
+
5157
+ #: includes/class-mla-settings.php:727 includes/class-mla-settings.php:764
5158
+ #: includes/class-mla-settings.php:904
5159
  #, php-format
5160
  msgctxt "error_log"
5161
  msgid "%1$s: %2$s unknown type = \"%3$s\""
5162
  msgstr ""
5163
 
5164
+ #: includes/class-mla-settings.php:802 includes/class-mla-settings.php:1069
5165
  msgid "Go to Bottom"
5166
  msgstr ""
5167
 
5168
+ #: includes/class-mla-settings.php:953
5169
  msgid "General"
5170
  msgstr ""
5171
 
5172
+ #: includes/class-mla-settings.php:954
5173
  msgid "Views"
5174
  msgstr ""
5175
 
5176
+ #: includes/class-mla-settings.php:955
5177
  msgid "Uploads"
5178
  msgstr ""
5179
 
5180
+ #: includes/class-mla-settings.php:957
5181
  msgid "Custom Fields"
5182
  msgstr ""
5183
 
5184
+ #: includes/class-mla-settings.php:958
5185
  msgid "IPTC/EXIF"
5186
  msgstr ""
5187
 
5188
+ #: includes/class-mla-settings.php:959
5189
  msgid "Documentation"
5190
  msgstr ""
5191
 
5192
+ #: includes/class-mla-settings.php:960
5193
  msgid "Debug"
5194
  msgstr ""
5195
 
5196
+ #: includes/class-mla-settings.php:1060
5197
  msgid "General Processing Options"
5198
  msgstr ""
5199
 
5200
+ #: includes/class-mla-settings.php:1062
5201
  #, php-format
5202
  msgid ""
5203
  "In this tab you can find a number of options for controlling the "
5206
  "any changes you make."
5207
  msgstr ""
5208
 
5209
+ #: includes/class-mla-settings.php:1062
5210
  msgid "Media/Assistant Table Defaults"
5211
  msgstr ""
5212
 
5213
+ #: includes/class-mla-settings.php:1062
5214
  msgid "Media Manager Enhancements"
5215
  msgstr ""
5216
 
5217
+ #: includes/class-mla-settings.php:1065
5218
  msgid "Delete General options and restore default settings"
5219
  msgstr ""
5220
 
5221
+ #: includes/class-mla-settings.php:1070 includes/class-mla-settings.php:1470
5222
  msgid "Support Our Work"
5223
  msgstr ""
5224
 
5225
+ #: includes/class-mla-settings.php:1071 includes/class-mla-settings.php:1074
5226
  msgid "Donate to FTJ"
5227
  msgstr ""
5228
 
5229
+ #: includes/class-mla-settings.php:1072 includes/class-mla-settings.php:1471
5230
  msgid "Donate"
5231
  msgstr ""
5232
 
5233
+ #: includes/class-mla-settings.php:1074
5234
  #, php-format
5235
  msgid ""
5236
  "This plugin was inspired by my work on the WordPress web site for our "
5239
  "our work. Thank you!"
5240
  msgstr ""
5241
 
5242
+ #: includes/class-mla-settings.php:1074
5243
  msgid "tax-deductible donation"
5244
  msgstr ""
5245
 
5246
+ #: includes/class-mla-settings.php:1093
5247
  msgid "enhanced version of the WordPress [gallery] shortcode."
5248
  msgstr ""
5249
 
5250
+ #: includes/class-mla-settings.php:1094
5251
  msgid "enhanced version of the WordPress Tag Cloud."
5252
  msgstr ""
5253
 
5254
+ #: includes/class-mla-settings.php:1095
5255
  msgid ""
5256
  "provides flat or hierarchical lists, dropdown controls and checkbox lists of "
5257
  "taxonomy terms."
5258
  msgstr ""
5259
 
5260
+ #: includes/class-mla-settings.php:1107
5261
  msgid "Shortcodes made available by this plugin"
5262
  msgstr ""
5263
 
5264
+ #: includes/class-mla-settings.php:1222
5265
  msgid "Debug settings saved."
5266
  msgstr ""
5267
 
5268
+ #: includes/class-mla-settings.php:1318
5269
  #, php-format
5270
  msgid "%1$s: Reseting the %2$s file ( %3$s ) \"%4$s\"."
5271
  msgstr ""
5272
 
5273
+ #: includes/class-mla-settings.php:1318 includes/class-mla-settings.php:1369
5274
+ #: includes/class-mla-settings.php:1392 includes/class-mla-settings.php:1402
5275
+ #: includes/class-mla-settings.php:1428
5276
  msgid "Error Log"
5277
  msgstr ""
5278
 
5279
+ #: includes/class-mla-settings.php:1379
5280
  #, php-format
5281
  msgid "Error log file (%1$s) not found; click Reset to create it."
5282
  msgstr ""
5283
 
5284
+ #: includes/class-mla-settings.php:1423 includes/class-mla-settings.php:1439
5285
  msgid "Debug Options"
5286
  msgstr ""
5287
 
5288
+ #: includes/class-mla-settings.php:1426
5289
  msgid "Debug Settings"
5290
  msgstr ""
5291
 
5292
+ #: includes/class-mla-settings.php:1430
5293
  #, php-format
5294
  msgid ""
5295
  "You can find more information about the MLA Reporting/MLA_DEBUG_LEVEL values "
5296
  "in the %1$s section of the Documentation tab."
5297
  msgstr ""
5298
 
5299
+ #: includes/class-mla-settings.php:1430
5300
  msgid "MLA Debug Tab documentation"
5301
  msgstr ""
5302
 
5303
+ #: includes/class-mla-settings.php:1430
5304
  msgid "MLA Debug Tab"
5305
  msgstr ""
5306
 
5307
+ #: includes/class-mla-settings.php:1439
5308
  #, php-format
5309
  msgid "Click %1$s to update the %2$s."
5310
  msgstr ""
5311
 
5312
+ #: includes/class-mla-settings.php:1458
5313
  msgid "You do not have permission to manage plugin settings."
5314
  msgstr ""
5315
 
5316
+ #: includes/class-mla-settings.php:1490
5317
  msgid "Cannot render content tab"
5318
  msgstr ""
5319
 
5320
+ #: includes/class-mla-settings.php:1493
5321
  msgid "Unknown content tab"
5322
  msgstr ""
5323
 
5324
+ #: includes/class-mla-settings.php:1509
5325
  msgid "Dismiss this notice"
5326
  msgstr ""
5327
 
5328
+ #: includes/class-mla-settings.php:1536
5329
  #, php-format
5330
  msgid "%s attachment"
5331
  msgid_plural "%s attachments"
5332
  msgstr[0] ""
5333
  msgstr[1] ""
5334
 
5335
+ #: includes/class-mla-settings.php:1538
5336
  #, php-format
5337
  msgid "Deleted custom field value from %1$s."
5338
  msgstr ""
5339
 
5340
+ #: includes/class-mla-settings.php:1541
5341
  msgid "No attachments contained this custom field."
5342
  msgstr ""
5343
 
5344
+ #: includes/class-mla-settings.php:1571 includes/class-mla-settings.php:1581
5345
  #, php-format
5346
  msgctxt "message_list"
5347
  msgid "%1$s - references updated."
5348
  msgstr ""
5349
 
5350
+ #: includes/class-mla-settings.php:1624
5351
  msgid "General settings saved."
5352
  msgstr ""
5353
 
5354
+ #: includes/class-mla-settings.php:1663
5355
  msgid "General settings reset to default values."
5356
  msgstr ""
5357
 
5358
+ #: includes/class-mla-settings.php:1705
5359
  msgid "select settings"
5360
  msgstr ""
5361
 
5362
+ #: includes/class-mla-settings.php:1725
5363
  msgid "Import ALL Settings"
5364
  msgstr ""
5365
 
5366
+ #: includes/class-mla-settings.php:1754 includes/class-mla-settings.php:1770
5367
  msgctxt "message_list"
5368
  msgid "exported"
5369
  msgstr ""
5370
 
5371
+ #: includes/class-mla-settings.php:1756 includes/class-mla-settings.php:1772
5372
  msgctxt "message_list"
5373
  msgid "skipped"
5374
  msgstr ""
5375
 
5376
+ #: includes/class-mla-settings.php:1779
5377
  msgid "ALL settings exported."
5378
  msgstr ""
5379
 
5380
+ #: includes/class-mla-settings.php:1790
5381
  #, php-format
5382
  msgid "%1$s: The settings directory ( %2$s ) cannot be created."
5383
  msgstr ""
5384
 
5385
+ #: includes/class-mla-settings.php:1794
5386
  #, php-format
5387
  msgid "%1$s: The settings directory ( %2$s ) is not writable."
5388
  msgstr ""
5389
 
5390
+ #: includes/class-mla-settings.php:1805
5391
  #, php-format
5392
  msgid "%1$s: The settings file ( %2$s ) could not be opened."
5393
  msgstr ""
5394
 
5395
+ #: includes/class-mla-settings.php:1812
5396
  #, php-format
5397
  msgctxt "error_log"
5398
  msgid "%1$s: _export_settings $error_info = \"%2$s\"."
5399
  msgstr ""
5400
 
5401
+ #: includes/class-mla-settings.php:1821
5402
  #, php-format
5403
  msgid "%1$s: Writing the settings file ( %2$s ) \"%3$s\"."
5404
  msgstr ""
5405
 
5406
+ #: includes/class-mla-settings.php:1827
5407
  #, php-format
5408
  msgid "Settings exported; %1$s settings recorded."
5409
  msgstr ""
5410
 
5411
+ #: includes/class-mla-settings.php:1845
5412
  msgid "No settings imported."
5413
  msgstr ""
5414
 
5415
+ #: includes/class-mla-settings.php:1854
5416
  msgid "Please select an import settings file from the dropdown list."
5417
  msgstr ""
5418
 
5419
+ #: includes/class-mla-settings.php:1858
5420
  msgid "The import settings dropdown selection is missing."
5421
  msgstr ""
5422
 
5423
+ #: includes/class-mla-settings.php:1866
5424
  #, php-format
5425
  msgctxt "error_log"
5426
  msgid "%1$s: _import_settings $error_info = \"%2$s\"."
5427
  msgstr ""
5428
 
5429
+ #: includes/class-mla-settings.php:1875
5430
  #, php-format
5431
  msgid "%1$s: Reading the settings file ( %2$s ) \"%3$s\"."
5432
  msgstr ""
5433
 
5434
+ #: includes/class-mla-settings.php:1894 includes/class-mla-settings.php:1910
5435
  msgctxt "message_list"
5436
  msgid "updated"
5437
  msgstr ""
5438
 
5439
+ #: includes/class-mla-settings.php:1897 includes/class-mla-settings.php:1913
5440
  msgctxt "message_list"
5441
  msgid "unchanged"
5442
  msgstr ""
5443
 
5444
+ #: includes/class-mla-settings.php:1918
5445
  #, php-format
5446
  msgid "Settings imported; %1$s updated, %2$s unchanged."
5447
  msgstr ""
5449
  #: includes/class-mla-shortcode-support.php:440
5450
  #: includes/class-mla-shortcode-support.php:1809
5451
  #: includes/class-mla-shortcode-support.php:3893
5452
+ #: includes/class-mla-shortcode-support.php:4179
5453
  msgid "Previous"
5454
  msgstr ""
5455
 
5456
  #: includes/class-mla-shortcode-support.php:441
5457
  #: includes/class-mla-shortcode-support.php:1810
5458
  #: includes/class-mla-shortcode-support.php:3942
5459
+ #: includes/class-mla-shortcode-support.php:4185
5460
  msgid "Next"
5461
  msgstr ""
5462
 
5514
  msgid "no-terms"
5515
  msgstr ""
5516
 
5517
+ #: includes/class-mla-shortcode-support.php:4609
5518
+ #: includes/class-mla-shortcode-support.php:5013
5519
+ #: includes/class-mla-shortcode-support.php:5050
5520
  msgid "Invalid mla_gallery"
5521
  msgstr ""
5522
 
5523
+ #: includes/class-mla-shortcode-support.php:5338
5524
  msgid "mla_debug query"
5525
  msgstr ""
5526
 
5527
+ #: includes/class-mla-shortcode-support.php:5339
5528
  msgid "mla_debug request"
5529
  msgstr ""
5530
 
5531
+ #: includes/class-mla-shortcode-support.php:5340
5532
  msgid "mla_debug query_vars"
5533
  msgstr ""
5534
 
5535
+ #: includes/class-mla-shortcode-support.php:5341
5536
  msgid "mla_debug post_count"
5537
  msgstr ""
5538
 
5539
+ #: includes/class-mla-shortcode-support.php:5409
5540
  msgid "mla_debug WHERE filter"
5541
  msgstr ""
5542
 
5543
+ #: includes/class-mla-shortcode-support.php:5433
5544
  msgid "mla_debug modified WHERE filter"
5545
  msgstr ""
5546
 
5547
+ #: includes/class-mla-shortcode-support.php:5456
5548
  msgid "mla_debug ORDER BY filter, incoming"
5549
  msgstr ""
5550
 
5551
+ #: includes/class-mla-shortcode-support.php:5456
5552
  msgid "Replacement ORDER BY clause"
5553
  msgstr ""
5554
 
5555
+ #: includes/class-mla-shortcode-support.php:5479
5556
  msgid "mla_debug posts_clauses filter"
5557
  msgstr ""
5558
 
5559
+ #: includes/class-mla-shortcode-support.php:5497
5560
  msgid "mla_debug posts_clauses_request filter"
5561
  msgstr ""
5562
 
5563
+ #: includes/class-mla-shortcode-support.php:5686
5564
  msgid "Invalid taxonomy"
5565
  msgstr ""
5566
 
5567
+ #: includes/class-mla-shortcode-support.php:5866
5568
  msgid "mla_debug query arguments"
5569
  msgstr ""
5570
 
5571
+ #: includes/class-mla-shortcode-support.php:5867
5572
  msgid "mla_debug last_query"
5573
  msgstr ""
5574
 
5575
+ #: includes/class-mla-shortcode-support.php:5868
5576
  msgid "mla_debug last_error"
5577
  msgstr ""
5578
 
5579
+ #: includes/class-mla-shortcode-support.php:5869
5580
  msgid "mla_debug num_rows"
5581
  msgstr ""
5582
 
5583
+ #: includes/class-mla-shortcode-support.php:5870
5584
  msgid "mla_debug found_rows"
5585
  msgstr ""
5586
 
5742
 
5743
  #: includes/class-mla-thumbnail-generation.php:96
5744
  #: includes/class-mla-thumbnail-generation.php:98
5745
+ #: includes/class-mla-thumbnail-generation.php:629
5746
  msgid "Generate Thumbnails"
5747
  msgstr ""
5748
 
5749
+ #: includes/class-mla-thumbnail-generation.php:383
5750
  #, php-format
5751
  msgid "Item %1$d"
5752
  msgstr ""
5753
 
5754
+ #: includes/class-mla-thumbnail-generation.php:400
5755
  msgid "has native thumbnail."
5756
  msgstr ""
5757
 
5758
+ #: includes/class-mla-thumbnail-generation.php:420
5759
  msgid "Featured Image retained."
5760
  msgstr ""
5761
 
5762
+ #: includes/class-mla-thumbnail-generation.php:428
5763
  #, php-format
5764
  msgid "%1$s: %2$sno attached file."
5765
  msgstr ""
5766
 
5767
+ #: includes/class-mla-thumbnail-generation.php:432
5768
  msgid "unsupported file type."
5769
  msgstr ""
5770
 
 
5771
  #: includes/class-mla-thumbnail-generation.php:440
5772
+ #: includes/class-mla-thumbnail-generation.php:452
5773
  #, php-format
5774
  msgid "%1$s: %2$sthumbnail generation failed"
5775
  msgstr ""
5776
 
5777
+ #: includes/class-mla-thumbnail-generation.php:448
5778
  #, php-format
5779
  msgid "%1$sWordPress-style thumbnail generated."
5780
  msgstr ""
5781
 
5782
+ #: includes/class-mla-thumbnail-generation.php:496
5783
  #, php-format
5784
  msgid "%1$s: %2$swp_insert_attachment failed."
5785
  msgstr ""
5786
 
5787
+ #: includes/class-mla-thumbnail-generation.php:513
5788
  #, php-format
5789
  msgid "%1$sthumbnail generated as new item %2$s."
5790
  msgstr ""
5791
 
5792
+ #: includes/class-mla-thumbnail-generation.php:562
5793
+ #: includes/class-mla-thumbnail-generation.php:673
5794
  msgid "Generated Thumbnails"
5795
  msgstr ""
5796
 
5797
+ #: includes/class-mla-thumbnail-generation.php:619
5798
  msgid ""
5799
  "Type &ldquo;WP&rdquo; generates native WordPress thumbnails without creating "
5800
  "a separate image item."
5801
  msgstr ""
5802
 
5803
+ #: includes/class-mla-thumbnail-generation.php:630
5804
  msgid ""
5805
  "Pull down the Help menu and select Thumbnail Generation for setting details"
5806
  msgstr ""
5807
 
5808
+ #: includes/class-mla-thumbnail-generation.php:631
5809
  msgid "Width"
5810
  msgstr ""
5811
 
5812
+ #: includes/class-mla-thumbnail-generation.php:632
5813
  msgid "Height"
5814
  msgstr ""
5815
 
5816
+ #: includes/class-mla-thumbnail-generation.php:633
5817
  msgid "Best Fit"
5818
  msgstr ""
5819
 
5820
+ #: includes/class-mla-thumbnail-generation.php:634
5821
  msgid "Page"
5822
  msgstr ""
5823
 
5824
+ #: includes/class-mla-thumbnail-generation.php:635
5825
  msgid "Resolution"
5826
  msgstr ""
5827
 
5828
+ #: includes/class-mla-thumbnail-generation.php:636
5829
  msgid "Quality"
5830
  msgstr ""
5831
 
5832
+ #: includes/class-mla-thumbnail-generation.php:642
5833
  msgid "Existing Items"
5834
  msgstr ""
5835
 
5836
+ #: includes/class-mla-thumbnail-generation.php:644
5837
  msgid "Ignore"
5838
  msgstr ""
5839
 
5840
+ #: includes/class-mla-thumbnail-generation.php:647
5841
  msgid "Suffix"
5842
  msgstr ""
5843
 
5865
  "\"Save Changes\" at the bottom of the tab to save any changes you make."
5866
  msgstr ""
5867
 
5868
+ #: includes/class-mla-wpml-support.php:2273
5869
+ #: includes/class-mla-wpml-support.php:2279
5870
  #, php-format
5871
  msgid "Edit the %s translation"
5872
  msgstr ""
5873
 
5874
+ #: includes/class-mla-wpml-support.php:2285
5875
  #, php-format
5876
  msgid "Add translation to %s"
5877
  msgstr ""
languages/media-library-assistant-en_US.po CHANGED
@@ -1,8 +1,8 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Media Library Assistant\n"
4
- "POT-Creation-Date: 2017-11-29 16:08-0800\n"
5
- "PO-Revision-Date: 2017-11-29 16:09-0800\n"
6
  "Language-Team: David Lingren <david@fairtradejudaica.org>\n"
7
  "MIME-Version: 1.0\n"
8
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +19,41 @@ msgstr ""
19
  "X-Poedit-SearchPath-1: tests\n"
20
  "X-Poedit-SearchPath-2: index.php\n"
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  msgid "Media Library Assistant"
23
  msgstr ""
24
 
@@ -43,18 +78,9 @@ msgstr ""
43
  msgid "Published"
44
  msgstr ""
45
 
46
- msgid "Scheduled"
47
- msgstr ""
48
-
49
  msgid "Pending Review"
50
  msgstr ""
51
 
52
- msgid "Draft"
53
- msgstr ""
54
-
55
- msgid "Y/m/d"
56
- msgstr ""
57
-
58
  msgid "ERROR"
59
  msgstr ""
60
 
@@ -94,9 +120,6 @@ msgstr ""
94
  msgid "Enabled"
95
  msgstr ""
96
 
97
- msgid "Disabled"
98
- msgstr ""
99
-
100
  msgid "Search database posts and pages for Featured Image attachments."
101
  msgstr ""
102
 
@@ -255,9 +278,6 @@ msgstr ""
255
  msgid "Order By"
256
  msgstr ""
257
 
258
- msgid "None"
259
- msgstr ""
260
-
261
  msgid "ID/Parent"
262
  msgstr ""
263
 
@@ -276,6 +296,12 @@ msgstr ""
276
  msgid "Choose the sort order."
277
  msgstr ""
278
 
 
 
 
 
 
 
279
  msgid "Views Width"
280
  msgstr ""
281
 
@@ -747,6 +773,9 @@ msgstr ""
747
  msgid "Description"
748
  msgstr ""
749
 
 
 
 
750
  msgid "Enable View and Post MIME Type Support"
751
  msgstr ""
752
 
@@ -830,10 +859,6 @@ msgctxt "post_mime_types_description"
830
  msgid "All application subtypes"
831
  msgstr ""
832
 
833
- msgctxt "table_view_singular"
834
- msgid "Unattached"
835
- msgstr ""
836
-
837
  msgctxt "table_view_plural"
838
  msgid "Unattached"
839
  msgstr ""
@@ -886,7 +911,9 @@ msgstr ""
886
 
887
  msgid ""
888
  "Enter the name of an alternate, MLA-specific debug log file; leave blank to "
889
- "use the PHP error_log."
 
 
890
  msgstr ""
891
 
892
  msgid "Replace PHP error_log file"
@@ -1103,9 +1130,6 @@ msgctxt "error_log"
1103
  msgid "%1$s: mla_query_posts_clauses_request_filter = \"%2$s\"."
1104
  msgstr ""
1105
 
1106
- msgid "NO REFERENCE TESTS"
1107
- msgstr ""
1108
-
1109
  msgid "ORPHAN"
1110
  msgstr ""
1111
 
@@ -1313,6 +1337,13 @@ msgstr ""
1313
  msgid "An ajax.done error has occurred. Please reload the page and try again."
1314
  msgstr ""
1315
 
 
 
 
 
 
 
 
1316
  msgid "more"
1317
  msgstr ""
1318
 
@@ -1363,10 +1394,45 @@ msgstr ""
1363
  msgid "IPTC/EXIF mapping is disabled."
1364
  msgstr ""
1365
 
1366
- msgid "M j, Y @ G:i"
1367
  msgstr ""
1368
 
1369
- msgid "Last modified"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1370
  msgstr ""
1371
 
1372
  msgid "Map Custom Field metadata for this item"
@@ -1392,19 +1458,12 @@ msgctxt "error_log"
1392
  msgid "%1$s: %2$s discarding \"%3$s\"; no title/order"
1393
  msgstr ""
1394
 
1395
- msgctxt "post state"
1396
- msgid "Pending"
1397
- msgstr ""
1398
-
1399
  msgid "Post Parent"
1400
  msgstr ""
1401
 
1402
  msgid "Select Parent"
1403
  msgstr ""
1404
 
1405
- msgid "PARENT"
1406
- msgstr ""
1407
-
1408
  msgid "All"
1409
  msgstr ""
1410
 
@@ -1425,12 +1484,6 @@ msgstr ""
1425
  msgid "column_default: %1$s, %2$s"
1426
  msgstr ""
1427
 
1428
- msgid "Edit"
1429
- msgstr ""
1430
-
1431
- msgid "Trash"
1432
- msgstr ""
1433
-
1434
  msgid "Restore this item from the Trash"
1435
  msgstr ""
1436
 
@@ -1487,9 +1540,6 @@ msgstr ""
1487
  msgid "%1$s ago"
1488
  msgstr ""
1489
 
1490
- msgid "(Private post)"
1491
- msgstr ""
1492
-
1493
  msgid "Set Parent"
1494
  msgstr ""
1495
 
@@ -1548,7 +1598,13 @@ msgstr[1] ""
1548
  msgid "Item %1$d moved to Trash."
1549
  msgstr ""
1550
 
1551
- msgid "Entries per page"
 
 
 
 
 
 
1552
  msgstr ""
1553
 
1554
  msgid "You are not allowed to edit Attachment: "
@@ -1606,9 +1662,6 @@ msgstr ""
1606
  msgid "Unattached"
1607
  msgstr ""
1608
 
1609
- msgid "Cancel"
1610
- msgstr ""
1611
-
1612
  msgid "Bulk Edit"
1613
  msgstr ""
1614
 
@@ -2741,6 +2794,9 @@ msgstr ""
2741
  msgid "EXIF element name or Content Template"
2742
  msgstr ""
2743
 
 
 
 
2744
  msgid "IPTC"
2745
  msgstr ""
2746
 
@@ -3269,6 +3325,9 @@ msgstr ""
3269
  msgid "Plugins per page"
3270
  msgstr ""
3271
 
 
 
 
3272
  #, php-format
3273
  msgctxt "error_log"
3274
  msgid "%1$s: %2$s unknown type = \"%3$s\""
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Media Library Assistant\n"
4
+ "POT-Creation-Date: 2018-03-25 15:56-0700\n"
5
+ "PO-Revision-Date: 2018-03-25 15:57-0700\n"
6
  "Language-Team: David Lingren <david@fairtradejudaica.org>\n"
7
  "MIME-Version: 1.0\n"
8
  "Content-Type: text/plain; charset=UTF-8\n"
19
  "X-Poedit-SearchPath-1: tests\n"
20
  "X-Poedit-SearchPath-2: index.php\n"
21
 
22
+ msgid "Draft"
23
+ msgstr ""
24
+
25
+ msgid "Scheduled"
26
+ msgstr ""
27
+
28
+ msgctxt "post state"
29
+ msgid "Pending"
30
+ msgstr ""
31
+
32
+ msgid "Trash"
33
+ msgstr ""
34
+
35
+ msgid "NO REFERENCE TESTS"
36
+ msgstr ""
37
+
38
+ msgid "Disabled"
39
+ msgstr ""
40
+
41
+ msgid "PARENT"
42
+ msgstr ""
43
+
44
+ msgid "None"
45
+ msgstr ""
46
+
47
+ msgid "(Private post)"
48
+ msgstr ""
49
+
50
+ msgid "Y/m/d"
51
+ msgstr ""
52
+
53
+ msgctxt "table_view_singular"
54
+ msgid "Unattached"
55
+ msgstr ""
56
+
57
  msgid "Media Library Assistant"
58
  msgstr ""
59
 
78
  msgid "Published"
79
  msgstr ""
80
 
 
 
 
81
  msgid "Pending Review"
82
  msgstr ""
83
 
 
 
 
 
 
 
84
  msgid "ERROR"
85
  msgstr ""
86
 
120
  msgid "Enabled"
121
  msgstr ""
122
 
 
 
 
123
  msgid "Search database posts and pages for Featured Image attachments."
124
  msgstr ""
125
 
278
  msgid "Order By"
279
  msgstr ""
280
 
 
 
 
281
  msgid "ID/Parent"
282
  msgstr ""
283
 
296
  msgid "Choose the sort order."
297
  msgstr ""
298
 
299
+ msgid "Entries per page"
300
+ msgstr ""
301
+
302
+ msgid "Enter the number of Media/Assistant submenu table items per page."
303
+ msgstr ""
304
+
305
  msgid "Views Width"
306
  msgstr ""
307
 
773
  msgid "Description"
774
  msgstr ""
775
 
776
+ msgid "Uploaded on"
777
+ msgstr ""
778
+
779
  msgid "Enable View and Post MIME Type Support"
780
  msgstr ""
781
 
859
  msgid "All application subtypes"
860
  msgstr ""
861
 
 
 
 
 
862
  msgctxt "table_view_plural"
863
  msgid "Unattached"
864
  msgstr ""
911
 
912
  msgid ""
913
  "Enter the name of an alternate, MLA-specific debug log file; leave blank to "
914
+ "use the PHP error_log.<br>&nbsp;&nbsp;The WP_CONTENT_DIR value (below) will "
915
+ "be prepended to the value here, e.g., enter something like \"/uploads/mla.log"
916
+ "\"."
917
  msgstr ""
918
 
919
  msgid "Replace PHP error_log file"
1130
  msgid "%1$s: mla_query_posts_clauses_request_filter = \"%2$s\"."
1131
  msgstr ""
1132
 
 
 
 
1133
  msgid "ORPHAN"
1134
  msgstr ""
1135
 
1337
  msgid "An ajax.done error has occurred. Please reload the page and try again."
1338
  msgstr ""
1339
 
1340
+ #, php-format
1341
+ msgid "Uploaded on: %s"
1342
+ msgstr ""
1343
+
1344
+ msgid "Last modified"
1345
+ msgstr ""
1346
+
1347
  msgid "more"
1348
  msgstr ""
1349
 
1394
  msgid "IPTC/EXIF mapping is disabled."
1395
  msgstr ""
1396
 
1397
+ msgid "Month"
1398
  msgstr ""
1399
 
1400
+ #, php-format
1401
+ msgid "%1$s-%2$s"
1402
+ msgstr ""
1403
+
1404
+ msgid "Day"
1405
+ msgstr ""
1406
+
1407
+ msgid "Year"
1408
+ msgstr ""
1409
+
1410
+ msgid "Hour"
1411
+ msgstr ""
1412
+
1413
+ msgid "Minute"
1414
+ msgstr ""
1415
+
1416
+ #, php-format
1417
+ msgid "%1$s %2$s, %3$s @ %4$s:%5$s"
1418
+ msgstr ""
1419
+
1420
+ msgid "OK"
1421
+ msgstr ""
1422
+
1423
+ msgid "Cancel"
1424
+ msgstr ""
1425
+
1426
+ msgid "M j, Y @ H:i"
1427
+ msgstr ""
1428
+
1429
+ msgid "Edit"
1430
+ msgstr ""
1431
+
1432
+ msgid "Edit upload date and time"
1433
+ msgstr ""
1434
+
1435
+ msgid "Upload Date and time"
1436
  msgstr ""
1437
 
1438
  msgid "Map Custom Field metadata for this item"
1458
  msgid "%1$s: %2$s discarding \"%3$s\"; no title/order"
1459
  msgstr ""
1460
 
 
 
 
 
1461
  msgid "Post Parent"
1462
  msgstr ""
1463
 
1464
  msgid "Select Parent"
1465
  msgstr ""
1466
 
 
 
 
1467
  msgid "All"
1468
  msgstr ""
1469
 
1484
  msgid "column_default: %1$s, %2$s"
1485
  msgstr ""
1486
 
 
 
 
 
 
 
1487
  msgid "Restore this item from the Trash"
1488
  msgstr ""
1489
 
1540
  msgid "%1$s ago"
1541
  msgstr ""
1542
 
 
 
 
1543
  msgid "Set Parent"
1544
  msgstr ""
1545
 
1598
  msgid "Item %1$d moved to Trash."
1599
  msgstr ""
1600
 
1601
+ msgid "download path out of bounds."
1602
+ msgstr ""
1603
+
1604
+ msgid "download path invalid."
1605
+ msgstr ""
1606
+
1607
+ msgid "download argument(s) not set."
1608
  msgstr ""
1609
 
1610
  msgid "You are not allowed to edit Attachment: "
1662
  msgid "Unattached"
1663
  msgstr ""
1664
 
 
 
 
1665
  msgid "Bulk Edit"
1666
  msgstr ""
1667
 
2794
  msgid "EXIF element name or Content Template"
2795
  msgstr ""
2796
 
2797
+ msgid " (starting with \"template:\")"
2798
+ msgstr ""
2799
+
2800
  msgid "IPTC"
2801
  msgstr ""
2802
 
3325
  msgid "Plugins per page"
3326
  msgstr ""
3327
 
3328
+ msgid "Guide"
3329
+ msgstr ""
3330
+
3331
  #, php-format
3332
  msgctxt "error_log"
3333
  msgid "%1$s: %2$s unknown type = \"%3$s\""
languages/media-library-assistant-en_US.pot CHANGED
@@ -2,7 +2,7 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Media Library Assistant\n"
5
- "POT-Creation-Date: 2017-11-29 16:08-0800\n"
6
  "PO-Revision-Date: 2015-08-21 21:38-0800\n"
7
  "Last-Translator: David Lingren <david@fairtradejudaica.org>\n"
8
  "Language-Team: David Lingren <david@fairtradejudaica.org>\n"
@@ -20,6 +20,41 @@ msgstr ""
20
  "X-Poedit-SearchPath-1: tests\n"
21
  "X-Poedit-SearchPath-2: index.php\n"
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  msgid "Media Library Assistant"
24
  msgstr ""
25
 
@@ -44,18 +79,9 @@ msgstr ""
44
  msgid "Published"
45
  msgstr ""
46
 
47
- msgid "Scheduled"
48
- msgstr ""
49
-
50
  msgid "Pending Review"
51
  msgstr ""
52
 
53
- msgid "Draft"
54
- msgstr ""
55
-
56
- msgid "Y/m/d"
57
- msgstr ""
58
-
59
  msgid "ERROR"
60
  msgstr ""
61
 
@@ -95,9 +121,6 @@ msgstr ""
95
  msgid "Enabled"
96
  msgstr ""
97
 
98
- msgid "Disabled"
99
- msgstr ""
100
-
101
  msgid "Search database posts and pages for Featured Image attachments."
102
  msgstr ""
103
 
@@ -256,9 +279,6 @@ msgstr ""
256
  msgid "Order By"
257
  msgstr ""
258
 
259
- msgid "None"
260
- msgstr ""
261
-
262
  msgid "ID/Parent"
263
  msgstr ""
264
 
@@ -277,6 +297,12 @@ msgstr ""
277
  msgid "Choose the sort order."
278
  msgstr ""
279
 
 
 
 
 
 
 
280
  msgid "Views Width"
281
  msgstr ""
282
 
@@ -748,6 +774,9 @@ msgstr ""
748
  msgid "Description"
749
  msgstr ""
750
 
 
 
 
751
  msgid "Enable View and Post MIME Type Support"
752
  msgstr ""
753
 
@@ -831,10 +860,6 @@ msgctxt "post_mime_types_description"
831
  msgid "All application subtypes"
832
  msgstr ""
833
 
834
- msgctxt "table_view_singular"
835
- msgid "Unattached"
836
- msgstr ""
837
-
838
  msgctxt "table_view_plural"
839
  msgid "Unattached"
840
  msgstr ""
@@ -887,7 +912,9 @@ msgstr ""
887
 
888
  msgid ""
889
  "Enter the name of an alternate, MLA-specific debug log file; leave blank to "
890
- "use the PHP error_log."
 
 
891
  msgstr ""
892
 
893
  msgid "Replace PHP error_log file"
@@ -1104,9 +1131,6 @@ msgctxt "error_log"
1104
  msgid "%1$s: mla_query_posts_clauses_request_filter = \"%2$s\"."
1105
  msgstr ""
1106
 
1107
- msgid "NO REFERENCE TESTS"
1108
- msgstr ""
1109
-
1110
  msgid "ORPHAN"
1111
  msgstr ""
1112
 
@@ -1314,6 +1338,13 @@ msgstr ""
1314
  msgid "An ajax.done error has occurred. Please reload the page and try again."
1315
  msgstr ""
1316
 
 
 
 
 
 
 
 
1317
  msgid "more"
1318
  msgstr ""
1319
 
@@ -1364,10 +1395,45 @@ msgstr ""
1364
  msgid "IPTC/EXIF mapping is disabled."
1365
  msgstr ""
1366
 
1367
- msgid "M j, Y @ G:i"
1368
  msgstr ""
1369
 
1370
- msgid "Last modified"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1371
  msgstr ""
1372
 
1373
  msgid "Map Custom Field metadata for this item"
@@ -1393,19 +1459,12 @@ msgctxt "error_log"
1393
  msgid "%1$s: %2$s discarding \"%3$s\"; no title/order"
1394
  msgstr ""
1395
 
1396
- msgctxt "post state"
1397
- msgid "Pending"
1398
- msgstr ""
1399
-
1400
  msgid "Post Parent"
1401
  msgstr ""
1402
 
1403
  msgid "Select Parent"
1404
  msgstr ""
1405
 
1406
- msgid "PARENT"
1407
- msgstr ""
1408
-
1409
  msgid "All"
1410
  msgstr ""
1411
 
@@ -1426,12 +1485,6 @@ msgstr ""
1426
  msgid "column_default: %1$s, %2$s"
1427
  msgstr ""
1428
 
1429
- msgid "Edit"
1430
- msgstr ""
1431
-
1432
- msgid "Trash"
1433
- msgstr ""
1434
-
1435
  msgid "Restore this item from the Trash"
1436
  msgstr ""
1437
 
@@ -1488,9 +1541,6 @@ msgstr ""
1488
  msgid "%1$s ago"
1489
  msgstr ""
1490
 
1491
- msgid "(Private post)"
1492
- msgstr ""
1493
-
1494
  msgid "Set Parent"
1495
  msgstr ""
1496
 
@@ -1549,7 +1599,13 @@ msgstr[1] ""
1549
  msgid "Item %1$d moved to Trash."
1550
  msgstr ""
1551
 
1552
- msgid "Entries per page"
 
 
 
 
 
 
1553
  msgstr ""
1554
 
1555
  msgid "You are not allowed to edit Attachment: "
@@ -1607,9 +1663,6 @@ msgstr ""
1607
  msgid "Unattached"
1608
  msgstr ""
1609
 
1610
- msgid "Cancel"
1611
- msgstr ""
1612
-
1613
  msgid "Bulk Edit"
1614
  msgstr ""
1615
 
@@ -2742,6 +2795,9 @@ msgstr ""
2742
  msgid "EXIF element name or Content Template"
2743
  msgstr ""
2744
 
 
 
 
2745
  msgid "IPTC"
2746
  msgstr ""
2747
 
@@ -3270,6 +3326,9 @@ msgstr ""
3270
  msgid "Plugins per page"
3271
  msgstr ""
3272
 
 
 
 
3273
  #, php-format
3274
  msgctxt "error_log"
3275
  msgid "%1$s: %2$s unknown type = \"%3$s\""
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Media Library Assistant\n"
5
+ "POT-Creation-Date: 2018-03-25 15:56-0700\n"
6
  "PO-Revision-Date: 2015-08-21 21:38-0800\n"
7
  "Last-Translator: David Lingren <david@fairtradejudaica.org>\n"
8
  "Language-Team: David Lingren <david@fairtradejudaica.org>\n"
20
  "X-Poedit-SearchPath-1: tests\n"
21
  "X-Poedit-SearchPath-2: index.php\n"
22
 
23
+ msgid "Draft"
24
+ msgstr ""
25
+
26
+ msgid "Scheduled"
27
+ msgstr ""
28
+
29
+ msgctxt "post state"
30
+ msgid "Pending"
31
+ msgstr ""
32
+
33
+ msgid "Trash"
34
+ msgstr ""
35
+
36
+ msgid "NO REFERENCE TESTS"
37
+ msgstr ""
38
+
39
+ msgid "Disabled"
40
+ msgstr ""
41
+
42
+ msgid "PARENT"
43
+ msgstr ""
44
+
45
+ msgid "None"
46
+ msgstr ""
47
+
48
+ msgid "(Private post)"
49
+ msgstr ""
50
+
51
+ msgid "Y/m/d"
52
+ msgstr ""
53
+
54
+ msgctxt "table_view_singular"
55
+ msgid "Unattached"
56
+ msgstr ""
57
+
58
  msgid "Media Library Assistant"
59
  msgstr ""
60
 
79
  msgid "Published"
80
  msgstr ""
81
 
 
 
 
82
  msgid "Pending Review"
83
  msgstr ""
84
 
 
 
 
 
 
 
85
  msgid "ERROR"
86
  msgstr ""
87
 
121
  msgid "Enabled"
122
  msgstr ""
123
 
 
 
 
124
  msgid "Search database posts and pages for Featured Image attachments."
125
  msgstr ""
126
 
279
  msgid "Order By"
280
  msgstr ""
281
 
 
 
 
282
  msgid "ID/Parent"
283
  msgstr ""
284
 
297
  msgid "Choose the sort order."
298
  msgstr ""
299
 
300
+ msgid "Entries per page"
301
+ msgstr ""
302
+
303
+ msgid "Enter the number of Media/Assistant submenu table items per page."
304
+ msgstr ""
305
+
306
  msgid "Views Width"
307
  msgstr ""
308
 
774
  msgid "Description"
775
  msgstr ""
776
 
777
+ msgid "Uploaded on"
778
+ msgstr ""
779
+
780
  msgid "Enable View and Post MIME Type Support"
781
  msgstr ""
782
 
860
  msgid "All application subtypes"
861
  msgstr ""
862
 
 
 
 
 
863
  msgctxt "table_view_plural"
864
  msgid "Unattached"
865
  msgstr ""
912
 
913
  msgid ""
914
  "Enter the name of an alternate, MLA-specific debug log file; leave blank to "
915
+ "use the PHP error_log.<br>&nbsp;&nbsp;The WP_CONTENT_DIR value (below) will "
916
+ "be prepended to the value here, e.g., enter something like \"/uploads/mla.log"
917
+ "\"."
918
  msgstr ""
919
 
920
  msgid "Replace PHP error_log file"
1131
  msgid "%1$s: mla_query_posts_clauses_request_filter = \"%2$s\"."
1132
  msgstr ""
1133
 
 
 
 
1134
  msgid "ORPHAN"
1135
  msgstr ""
1136
 
1338
  msgid "An ajax.done error has occurred. Please reload the page and try again."
1339
  msgstr ""
1340
 
1341
+ #, php-format
1342
+ msgid "Uploaded on: %s"
1343
+ msgstr ""
1344
+
1345
+ msgid "Last modified"
1346
+ msgstr ""
1347
+
1348
  msgid "more"
1349
  msgstr ""
1350
 
1395
  msgid "IPTC/EXIF mapping is disabled."
1396
  msgstr ""
1397
 
1398
+ msgid "Month"
1399
  msgstr ""
1400
 
1401
+ #, php-format
1402
+ msgid "%1$s-%2$s"
1403
+ msgstr ""
1404
+
1405
+ msgid "Day"
1406
+ msgstr ""
1407
+
1408
+ msgid "Year"
1409
+ msgstr ""
1410
+
1411
+ msgid "Hour"
1412
+ msgstr ""
1413
+
1414
+ msgid "Minute"
1415
+ msgstr ""
1416
+
1417
+ #, php-format
1418
+ msgid "%1$s %2$s, %3$s @ %4$s:%5$s"
1419
+ msgstr ""
1420
+
1421
+ msgid "OK"
1422
+ msgstr ""
1423
+
1424
+ msgid "Cancel"
1425
+ msgstr ""
1426
+
1427
+ msgid "M j, Y @ H:i"
1428
+ msgstr ""
1429
+
1430
+ msgid "Edit"
1431
+ msgstr ""
1432
+
1433
+ msgid "Edit upload date and time"
1434
+ msgstr ""
1435
+
1436
+ msgid "Upload Date and time"
1437
  msgstr ""
1438
 
1439
  msgid "Map Custom Field metadata for this item"
1459
  msgid "%1$s: %2$s discarding \"%3$s\"; no title/order"
1460
  msgstr ""
1461
 
 
 
 
 
1462
  msgid "Post Parent"
1463
  msgstr ""
1464
 
1465
  msgid "Select Parent"
1466
  msgstr ""
1467
 
 
 
 
1468
  msgid "All"
1469
  msgstr ""
1470
 
1485
  msgid "column_default: %1$s, %2$s"
1486
  msgstr ""
1487
 
 
 
 
 
 
 
1488
  msgid "Restore this item from the Trash"
1489
  msgstr ""
1490
 
1541
  msgid "%1$s ago"
1542
  msgstr ""
1543
 
 
 
 
1544
  msgid "Set Parent"
1545
  msgstr ""
1546
 
1599
  msgid "Item %1$d moved to Trash."
1600
  msgstr ""
1601
 
1602
+ msgid "download path out of bounds."
1603
+ msgstr ""
1604
+
1605
+ msgid "download path invalid."
1606
+ msgstr ""
1607
+
1608
+ msgid "download argument(s) not set."
1609
  msgstr ""
1610
 
1611
  msgid "You are not allowed to edit Attachment: "
1663
  msgid "Unattached"
1664
  msgstr ""
1665
 
 
 
 
1666
  msgid "Bulk Edit"
1667
  msgstr ""
1668
 
2795
  msgid "EXIF element name or Content Template"
2796
  msgstr ""
2797
 
2798
+ msgid " (starting with \"template:\")"
2799
+ msgstr ""
2800
+
2801
  msgid "IPTC"
2802
  msgstr ""
2803
 
3326
  msgid "Plugins per page"
3327
  msgstr ""
3328
 
3329
+ msgid "Guide"
3330
+ msgstr ""
3331
+
3332
  #, php-format
3333
  msgctxt "error_log"
3334
  msgid "%1$s: %2$s unknown type = \"%3$s\""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: attachments, gallery, images, media, media library, tag cloud, media-tags,
5
  Requires at least: 3.5.0
6
  Tested up to: 4.9.1
7
  Requires PHP: 5.3
8
- Stable tag: 2.70
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -183,6 +183,31 @@ All of the MLA source code has been annotated with "DocBlocks", a special type o
183
 
184
  == Changelog ==
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  = 2.70 =
187
  * New: A new Debug logging category has been created for "where-used" reporting.
188
  * New: The Att. Categories and Att. Tags taxonomies can now be displayed a columns on the Media/Library list mode admin submenu.
@@ -285,8 +310,8 @@ All of the MLA source code has been annotated with "DocBlocks", a special type o
285
 
286
  == Upgrade Notice ==
287
 
288
- = 2.70 =
289
- Improved file download security, Polylang fixes. Two enhancements, seven fixes.
290
 
291
  == Other Notes ==
292
 
5
  Requires at least: 3.5.0
6
  Tested up to: 4.9.1
7
  Requires PHP: 5.3
8
+ Stable tag: 2.72
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
183
 
184
  == Changelog ==
185
 
186
+ = 2.72 =
187
+ * Fix: Remove "Circular Reference" PHP Warnings in class-mla-mime-types.php.
188
+
189
+ = 2.71 =
190
+ * New: For Admin Columns Pro v4.2.3+, **Media/Assistant submenu table now supports CSV Export**.
191
+ * New: Powerful **regular expression match/replace functions** are now available within MLA shortcodes, custom markup templates, mapping rules and the Bulk Edit area. Of course, they can be used within Content Templates in any of these areas as well.
192
+ * New: You can replace the "Uploaded on" date in the Media/Assistant Bulk Edit area, and you can define a mapping rule for the date in the Settings/Media Library Assistant IPTC/EXIF tab. Both of these support Content Templates, so you can compose values from a variety of sources.
193
+ * New: You can edit/change the "Uploaded on" date on the Media/Edit Media screen and in the Media/Assistant Quick Edit area.
194
+ * New: The "MLA Insert Fixit" example plugin has a new "Parent Terms to item" tool that will copy terms assigned to a parent post/page to the items attached to the parent. You can select the source and target taxonomies for the tool.
195
+ * New: The "MLA Insert Fixit" example plugin has a new "Attach Referenced In" tool that attaches items to the first post/page where they appear in a "class-wp-image-" or "ids=" element.
196
+ * New: The "MLA Insert Fixit" example plugin is enhanced so the "Attach Media Library items" tools will (optionally) replace existing parent assignments. You can also specify the oldest or the most recent post/page to become the parent.
197
+ * New: A new "MLA Uploaded on Example" plugin reformats Media/Assistant column display for Uploaded on and Modified dates.
198
+ * New: For the Media/Assistant Bulk Edit function, an offset can be added to the `[+index+]` data source. For example, `[+index,99+]` will give a starting value of 100.
199
+ * New: The Media/Assistant Bulk Edit and Quick Edit functions are now compatible with the "Media File Renamer" plugin, by Jordy Meow.
200
+ * New: You can change the Media/Assistant "Entries per page" value on the Settings/Media LIbrary Assistant General tab. This gives a recovery method when the setting is too high to successfully load the Media/Assistant submenu table.
201
+ * New: A new "MLA Path Mapping Example" plugin adds hierarchical path specification support to the IPTC/EXIF taxonomy mapping rules.
202
+ * New: A new Debug logging category has been created for Views and Uploads MIME Type processing.
203
+ * Fix: When WPML is active, handling of the "current language" on the Media/Assistant admin submenu has been improved.
204
+ * Fix: NONCE URL handling for WP 3.5.x has been restored, e.g., for the Settings/Media Library Assistant Documentation tab's "Example Plugins" link.
205
+ * Fix: PHP `stripslashes` is now applied to new IPTC/EXIF and Custom Field rule templates so special characters like backslash are handled correctly.
206
+ * Fix: The PHP error log can once again be downloaded from the Settings/Media Library Assistant Debug tab.
207
+ * Fix: A file extension problem (jpe Vs jpg) has been fixed for PDF thumbnail generation using older versions of ImageMagick.
208
+ * Fix: PDF Thumbnail files generated by MLA are now placed in the correct directory, i.e., tha same directory as the original PDF document.
209
+ * Fix: For `[mla_gallery]`, processing file names with special characters such as quotes no longer creates PHP Warning messages.
210
+
211
  = 2.70 =
212
  * New: A new Debug logging category has been created for "where-used" reporting.
213
  * New: The Att. Categories and Att. Tags taxonomies can now be displayed a columns on the Media/Library list mode admin submenu.
310
 
311
  == Upgrade Notice ==
312
 
313
+ = 2.72 =
314
+ Remove "Circular Reference" PHP Warnings in class-mla-mime-types.php.
315
 
316
  == Other Notes ==
317
 
tpls/admin-inline-edit-form.tpl CHANGED
@@ -56,6 +56,9 @@
56
  <input type="text" name="image_alt" value="" />
57
  </span> </label>
58
  <div class="inline-edit-group">
 
 
 
59
  <label class="inline-edit-post-parent alignleft"> <span class="title">[+Parent ID+]</span> <span class="input-text-wrap">
60
  <input type="text" name="post_parent" value="" />
61
  </span> </label>
@@ -108,6 +111,9 @@
108
  <label class="inline-edit-image-alt"> <span class="title">[+ALT Text+]</span> <span class="input-text-wrap">
109
  <input type="text" name="image_alt" value="" />
110
  </span> </label>
 
 
 
111
  <div class="inline-edit-group">
112
  <label class="inline-edit-post-parent alignleft"> <span class="title">[+Parent ID+]</span> <span class="input-text-wrap">
113
  <input type="text" name="post_parent" value="" />
@@ -164,6 +170,9 @@
164
  <label class="inline-edit-image-alt"> <span class="title">[+ALT Text+]</span> <span class="input-text-wrap">
165
  <input type="text" name="image_alt" value="" />
166
  </span> </label>
 
 
 
167
  <div class="inline-edit-group">
168
  <label class="inline-edit-post-parent alignleft"> <span class="title">[+Parent ID+]</span> <span class="input-text-wrap">
169
  <input type="text" name="post_parent" value="" />
56
  <input type="text" name="image_alt" value="" />
57
  </span> </label>
58
  <div class="inline-edit-group">
59
+ [+Uploaded on+]
60
+ </div>
61
+ <div class="inline-edit-group">
62
  <label class="inline-edit-post-parent alignleft"> <span class="title">[+Parent ID+]</span> <span class="input-text-wrap">
63
  <input type="text" name="post_parent" value="" />
64
  </span> </label>
111
  <label class="inline-edit-image-alt"> <span class="title">[+ALT Text+]</span> <span class="input-text-wrap">
112
  <input type="text" name="image_alt" value="" />
113
  </span> </label>
114
+ <label class="inline-edit-post-date"><span class="title">[+Bulk Uploaded on+]</span><span class="input-text-wrap">
115
+ <input type="text" name="post_date" value="" />
116
+ </span></label>
117
  <div class="inline-edit-group">
118
  <label class="inline-edit-post-parent alignleft"> <span class="title">[+Parent ID+]</span> <span class="input-text-wrap">
119
  <input type="text" name="post_parent" value="" />
170
  <label class="inline-edit-image-alt"> <span class="title">[+ALT Text+]</span> <span class="input-text-wrap">
171
  <input type="text" name="image_alt" value="" />
172
  </span> </label>
173
+ <label class="inline-edit-post-date"><span class="title">[+Bulk Uploaded on+]</span><span class="input-text-wrap">
174
+ <input type="text" name="post_date" value="" />
175
+ </span></label>
176
  <div class="inline-edit-group">
177
  <label class="inline-edit-post-parent alignleft"> <span class="title">[+Parent ID+]</span> <span class="input-text-wrap">
178
  <input type="text" name="post_parent" value="" />
tpls/documentation-settings-tab.tpl CHANGED
@@ -1,11 +1,11 @@
1
  <!-- template="documentation-tab" -->
2
  <h2>Plugin and Shortcode Documentation. In this tab, jump to:</h2>
3
- <div class="mla-display-settings-page" id="mla-display-settings-documentation-tab" style="width:700px">
4
  <p class="submit mla-settings-submit">
5
  Browse and install:
6
- <a href="[+example_url+]" class="button button-primary">Example Plugins</a><br>
7
  &nbsp;<br />
8
- For more information about the example plugins, jump to <a href="#mla_example_plugins">The Example Plugins</a><br>
9
  &nbsp;
10
  </p>
11
  <div id="mla-doc-gallery-shortcode"><a href="#mla_gallery"><strong>MLA Gallery Shortcode</strong></a>
@@ -77,12 +77,12 @@ For more information about the example plugins, jump to <a href="#mla_example_pl
77
  <li>
78
  <a href="#gallery_examples"><strong>MLA Gallery Examples</strong></a>
79
  </li>
80
- <ul class="mla-doc-toc-list">
81
  <li><a href="#simple_examples">Simple Examples</a></li>
82
  <li><a href="#paginated_gallery">A Paginated Gallery</a></li>
83
  <li><a href="#cloud_and_gallery">Tag Cloud and Gallery</a></li>
84
  <li><a href="#search_form_and_gallery">Search Form and Gallery</a></li>
85
- </ul>
86
  <li>
87
  <a href="#mla_output_parameter"><strong>Support for Alternative Gallery Output, e.g., Pagination</strong></a>
88
  </li>
@@ -95,31 +95,43 @@ For more information about the example plugins, jump to <a href="#mla_example_pl
95
  <li>
96
  <a href="#mla_gallery_templates"><strong>Style and Markup Templates</strong></a>
97
  </li>
98
- <ul class="mla-doc-toc-list">
99
  <li><a href="#argument_parameters">Argument substitution parameters</a></li>
100
  <li><a href="#gallery_specific">Gallery-specific substitution parameters</a></li>
101
  <li><a href="#mla_style_parameters">Substitution parameters for style templates</a></li>
102
  <li><a href="#mla_markup_parameters">Substitution parameters for markup templates</a></li>
103
  <li><a href="#mla_attachment_parameters">Attachment-specific substitution parameters for the markup template Item part</a></li>
104
- </ul>
105
  <li>
106
  <a href="#mla_table_example"><strong>A table-based Style and Markup template example</strong></a>
107
  </li>
108
  <li>
109
  <a href="#mla_variable_parameters"><strong>Field-level substitution parameters</strong></a>
110
  </li>
111
- <ul class="mla-doc-toc-list">
112
  <li><a href="#field_level_prefixes">Field-level prefix values</a></li>
113
  <li><a href="#field_level_formats">Field-level option/format values</a></li>
114
  <li><a href="#field_level_data_sources">Field-level data sources</a></li>
115
- <li><a href="#mla_iptc_identifiers">Field-level IPTC identifiers and friendly names</a>
116
  <li><a href="#mla_camera_values">Field-level Enhanced EXIF CAMERA values</a></li>
117
  <li><a href="#mla_gps_values">Field-level Enhanced EXIF GPS values</a></li>
118
  <li><a href="#pdf_metadata">Field-level metadata in PDF documents</a></li>
119
  <li><a href="#substitution_parameter_filters">Field-level substitution parameter filters (Hooks)</a></li>
120
- </ul>
121
  <li>
122
  <a href="#mla_template_parameters"><strong>Content Templates</strong></a>
 
 
 
 
 
 
 
 
 
 
 
 
123
  <li>
124
  <a href="#mla_text_widget"><strong>The MLA Text Widget</strong></a>
125
  </li>
@@ -156,23 +168,23 @@ For more information about the example plugins, jump to <a href="#mla_example_pl
156
  <li>
157
  <a href="#mla_custom_field_mapping"><strong>Custom Field and Attachment Metadata Processing Options</strong></a>
158
  </li>
159
- <ul class="mla-doc-toc-list">
160
  <li><a href="#custom_field_mapping_example">Custom field mapping example</a></li>
161
  <li><a href="#custom_field_rule_elements">The custom field rule elements</a></li>
162
  <li><a href="#attachment_metadata_mapping">Adding or Changing Attachment Metadata</a></li>
163
  <li><a href="#custom_field_mapping_with_templates">Custom field mapping with Content Templates</a></li>
164
- </ul>
165
  <li>
166
  <a href="#mla_iptc_exif_mapping"><strong>IPTC &amp; EXIF Processing Options</strong></a>
167
  </li>
168
- <ul class="mla-doc-toc-list">
169
  <li><a href="#iptc_exif_mapping_example">IPTC/EXIF mapping example</a></li>
170
  <li><a href="#iptc_exif_mapping_tables">The IPTC/EXIF rule elements</a></li>
171
  <li><a href="#iptc_exif_mapping_with_templates">EXIF/Template mapping with Content Templates</a></li>
 
172
  <li><a href="#pdf_iptc_exif_mapping">IPTC/EXIF Mapping for PDF Documents</a></li>
173
  <li><a href="#wordpress_default_mapping">WordPress default title, slug and description mapping</a></li>
174
- </li>
175
- </ul>
176
  <li><a href="#mla_mapping_hooks"><strong>MLA Custom Field and IPTC/EXIF Mapping Actions and Filters (Hooks)</strong></a></li>
177
  <li><a href="#mla_debug_tab"><strong>MLA Debug Tab</strong></a></li>
178
  <li><a href="#mla_language_tab"><strong>WPML &amp; Polylang Multilingual Support; the MLA Language Tab</strong></a></li>
@@ -187,9 +199,8 @@ have a look at the <a title="MLA Internationalization Guide.pdf" href="[+transla
187
  <p>
188
  If you are a developer interested in how this plugin is put together, you should
189
  have a look at the <a title="Consult the phpDocs documentation" href="[+phpDocs_url+]" target="_blank" class="mla-doc-bold-link">phpDocs documentation</a>.
190
- </p>
191
  <a name="mla_gallery"></a>
192
- &nbsp;
193
  <p>
194
  <a href="#backtotop">Go to Top</a>
195
  </p>
@@ -221,6 +232,7 @@ All of the options/parameters documented for the <code>[gallery]</code> shortcod
221
  <h4>Substitution Parameters</h4>
222
  <p>
223
  Substitution parameters are a powerful way to add general and attachment-specific values to the gallery display. For example, if you code "<code>mla_rollover_text='{+date+} : {+description+}'</code>, the rollover text will contain the upload date, a colon, and the full description of each gallery item. There are dozens of parameter names like `date` and `description` divided in several categories:
 
224
  <table>
225
  <tr>
226
  <td class="mla-doc-table-label"><a href="#gallery_specific">Gallery-specific</a></td>
@@ -247,7 +259,7 @@ Substitution parameters are a powerful way to add general and attachment-specifi
247
  <td>lets you compose a value from multiple substitution parameters and test for empty values, choose among two or more alternatives or suppress output entirely</td>
248
  </tr>
249
  </table>
250
- &nbsp;<br />
251
  Click on any of the category names in the above table to go to the Documentation section describing the names available in that category and how to use them.
252
  </p>
253
  <p>
@@ -427,7 +439,7 @@ Twelve <code>[mla_gallery]</code> parameters provide an easy way to control the
427
  All but the "mla_target" parameter support the <a href="#mla_markup_parameters">Markup</a>, <a href="#mla_attachment_parameters">Attachment-specific</a>, <a href="#mla_variable_parameters">Field-level</a> and <a href="#mla_template_parameters">Content Template</a> substitution parameters defined for Markup Templates. For example, if you code "<code>mla_rollover_text='{+date+} : {+description+}'</code>, the rollover text will contain the upload date, a colon, and the full description of each gallery item. Simply add "{+" before the substitution parameter name and add "+}" after the name. Note that the enclosing delimiters are different than those used in the templates, since the WordPress shortcode parser reserves square brackets ("[" and "]") for its own use.
428
  </p>
429
  <p>
430
- The "mla_link_href" parameter is a great way to change the destination your gallery item links to or add arguments to the link for later processing. For example, to make a gallery item link back to the page/post it is attached to, you can code: <code>mla_link_href='{+site_url+}/?page_id={+parent+}'</code>. You can also add arguments to the link, e.g., <code>mla_link_href='{+link_url+}?myarg1=myvalue1&amp;amp;myarg2=myvalue2'</code>. Note the use of the HTML entity name "&amp;amp;" to put an ampersand in the value; the WordPress "visual" post editor will replace "&", "<" and ">" with "&amp;amp;", "&amp;lt;" and "&amp;gt;" whether you like it not. The <strong>only</strong> markup parameter modified by this parameter is "link". Other markup parameters such as "pagelink", "filelink" and "link_url" are not modified.
431
  </p>
432
  <p>
433
  The "mla_link_attributes" and "mla_image_attributes" parameters accept any value and adds it to the "&lt;a&gt;" or "&lt;img&gt;" tags for the gallery item. For example, you can create a Shadowbox JS (plugin) album by adding <code>mla_link_attributes='rel="shadowbox{sbalbum-{+instance+}};player=img"'</code> to your shortcode query (note the use of single quotes around the parameter value and the double quotes within the parameter). <strong>IMPORTANT:</strong> since the shortcode parser reserves square brackets ("[" and "]") for its own use, <strong>you must substitute curly braces for square brackets</strong> if your attributes require brackets (as this example does). In this case, the actual attribute added to the link will be <code>rel="shadowbox[sbalbum-1];player=img"</code>. If you must code a curly brace in your attribute value, preface it with <strong>two backslash characters</strong>, e.g., "\\{" or "\\}". If you code an attribute already present in the tag, your value will override the existing value.
@@ -497,6 +509,7 @@ When this feature is active, gallery items for which WordPress can generate a th
497
  </p>
498
  <p>
499
  Five options in the Settings/Media Library Assistant MLA Gallery tab allow control over mla_viewer operation:
 
500
  <ul class="mla_settings">
501
  <li><strong>Enable thumbnail substitution</strong><br />
502
  Check this option to allow the "mla_viewer" to generate thumbnail images for PDF documents. Thumbnails are generated dynamically, each time the item appears in an <code>[mla_gallery]</code> display.<br />
@@ -511,8 +524,7 @@ Check this option to enable the explicit check for Ghostscript support required
511
  <li><strong>Ghostscript path</strong><br />
512
  If your Ghostscript software is in a non-standard location, enter the full path and name of the executable here. The value you enter will be used as-is and the search for Ghostscript in the usual locations will be bypassed.</li>
513
  </ul>
514
- <a name="order_orderby"></a>
515
- </p>
516
  <h4>Order, Orderby</h4>
517
  <p>
518
  The Orderby parameter specifies which database field(s) are used to sort the gallery. You can sort the gallery by one or more of these values (there is additional information on some of these values in the <a href="http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters" title="WordPress Codex link" target="_blank">Codex WP_Query class reference</a>):
@@ -664,7 +676,7 @@ The "mla_named_transfer" parameter activates a different approach to handling th
664
  <p>
665
  The links generated for mla_named_transfer items are of the form:<br />
666
  &nbsp;<br />
667
- <code>http://mysite.com/wp-admin/admin-ajax.php?action=mla_named_transfer&mla_item=item-name&mla_disposition=inline</code><br />
668
  &nbsp;<br />
669
  Where the query arguments are:
670
  </p>
@@ -687,7 +699,7 @@ Where the query arguments are:
687
  </tr>
688
  </table>
689
  <p>
690
- This alternate approach provides a small measure of security by obscuring the directory structure used to locate the file. It also makes it possible to generate SEO-friendly "pretty links" and use the <a href="https://codex.wordpress.org/Rewrite_API" title="Codex article: Rewrite API" target="_blank">WordPress Rewrite API</a> to translate the pretty links to the Transfer by Item Name syntax. The <a title="Find the Pretty Links Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Item+Transfer+Pretty+Links%22" class="mla-doc-bold-link">MLA Item Transfer Pretty Links</a> example plugin shows how this can be done.
691
  <a name="include_exclude"></a>
692
  </p>
693
  <h4>Include, Exclude</h4>
@@ -817,10 +829,10 @@ If you have two or more simple taxonomy queries, they will be joined by "AND". M
817
  </p>
818
  <table>
819
  <tr>
820
- <tr>
821
  <td class="mla-doc-table-label">tax_relation</td>
822
  <td>SQL operator to join multiple taxonomy queries; can be "AND" (the default) or "OR".</td>
823
  </tr>
 
824
  <td class="mla-doc-table-label">tax_operator</td>
825
  <td>SQL operator to join the terms within each taxonomy; can be "IN" (the default), "NOT IN" or "AND".</td>
826
  </tr>
@@ -939,10 +951,10 @@ Searching for keywords within the names of taxonomy terms is a completely differ
939
  <td>If you enter multiple phrases (separated by the <code>mla_phrase_delimiter</code>) in the <code>mla_terms_phrases</code> parameter, this parameter controls how they are connected. Choose from OR to require that any one of the phrases must match for the search to succeed, or <strong>AND (the default)</strong> to require that all of the phrases must match.</td>
940
  </tr>
941
  <tr>
942
- <tr>
943
  <td class="mla-doc-table-label">mla_term_delimiter</td>
944
  <td>A single character that separates the terms in <code>mla_terms_phrases</code>. The <strong>default delimiter</strong> is a comma (',') since term names can contain spaces.</td>
945
  </tr>
 
946
  <td class="mla-doc-table-label">mla_term_connector</td>
947
  <td>If you enter multiple terms (separated by the <code>mla_term_delimiter</code>) in the <code>mla_terms_phrases</code> parameter, this parameter controls how they are connected. Choose from <strong>OR (the default)</strong> to require that any one of the terms must match for the search to succeed, or AND to require that all of the terms must match.</td>
948
  </tr>
@@ -961,9 +973,11 @@ For compatibility with the WordPress <code>[gallery]</code> shortcode, these par
961
  </p>
962
  <p>
963
  You can change the <code>post_type</code> parameter to compose a "gallery" of WordPress objects such as posts, pages and custom post types. For example, to display a gallery of the published posts in a particular category you can code something like:
 
964
  <p>
965
  <code>[mla_gallery category=some-term post_type=post post_status=publish post_mime_type=all post_parent=all]</code>
966
  </p>
 
967
  Note that you must also change the <code>post_status</code> <code>post_mime_type</code> and <code>post_parent</code> because the default values for those parameters are set for Media Library image items.
968
  </p>
969
  <p>
@@ -1071,11 +1085,13 @@ The <code>[mla_gallery]</code> shortcode supports the simple custom field parame
1071
  <td class="mla-doc-table-label">meta_value&nbsp;(string)</td>
1072
  <td>Custom field value; string-based comparison.</td>
1073
  </tr>
 
1074
  <td class="mla-doc-table-label">meta_value_num&nbsp;(number)</td>
1075
  <td>Custom field value; numeric comparison.</td>
1076
  </tr>
 
1077
  <td class="mla-doc-table-label">meta_compare&nbsp;(string)</td>
1078
- <td>Operator to test the 'meta_value'. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' or 'RLIKE'. Default value is '='. </td>
1079
  </tr>
1080
  </table>
1081
  <p>
@@ -1116,7 +1132,7 @@ You can use the <code>mla_search_connector</code> and <code>mla_search_fields</c
1116
  </tr>
1117
  <tr>
1118
  <td class="mla-doc-table-label">mla_search_fields</td>
1119
- <td>The fields in which to search. Choose from title, content, excerpt, name, terms. Searching on alt-text is not supported.</td>
1120
  </tr>
1121
  <tr>
1122
  <td class="mla-doc-table-label">mla_terms_taxonomies</td>
@@ -1171,7 +1187,8 @@ If you code <code>mla_debug=log</code> all of the information will be written to
1171
  </p>
1172
  <h4>MLA Gallery Filters and Actions (Hooks)</h4>
1173
  <p>
1174
- The <code>[mla_gallery]</code> shortcode supports a comprehensive set of filters and actions that give you complete control over gallery composition from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Gallery Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Gallery+Hooks+Example%22" class="mla-doc-bold-link">MLA Gallery Hooks Example</a>. To run the example:
 
1175
  <ol>
1176
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
1177
  <li>Hover over "MLA Gallery Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -1180,7 +1197,6 @@ The <code>[mla_gallery]</code> shortcode supports a comprehensive set of filters
1180
  <li>Create a new <code>[mla_gallery]</code> shortcode or modify an existing shortcode, adding the <code>my_filter="all custom"</code> parameter to activate the example output.</li>
1181
  <li>View the post or page on which the modified shortcode appears to see a list of each item's custom fields appended to the gallery captions.</li>
1182
  </ol>
1183
- </p>
1184
  <p>
1185
  The example code documents each hook with comments in the filter/action function that intercepts each hook. Generally, each part of the gallery supports three hooks: 1) a "<strong>values</strong>" hook, which lets you record or update the substitution values for that gallery part, 2) a "<strong>template</strong>" hook, which lets you record/update the template used to generate the HTML markup, and 3) a "<strong>parse</strong>" hook which lets you modify or replace the markup generated for a gallery part. The current hooks are:
1186
  </p>
@@ -1476,7 +1492,6 @@ Nine parameters provide an easy way to control the contents of tag cloud items w
1476
  </p>
1477
  <table>
1478
  <tr>
1479
- <tr>
1480
  <td class="mla-doc-table-label">mla_link_attributes</td>
1481
  <td>adds one or more HTML attributes to the hyperlink for each item; see below</td>
1482
  </tr>
@@ -1517,7 +1532,7 @@ Nine parameters provide an easy way to control the contents of tag cloud items w
1517
  All but the "mla_target" parameter support the <a href="#tag_cloud_markup_parameters">Markup</a>, <a href="#tag_cloud_item_parameters">Item-specific</a>, <a href="#tag_cloud_variable_parameters">Field-level</a> and <a href="#mla_template_parameters">Content Template</a> substitution parameters defined for Markup Templates. For example, if you code "<code>mla_rollover_text='{+slug+} : {+rollover_text+}'</code>, the rollover text will contain the term slug, a colon, and the appropriate "single text" or "multiple text". Simply add "{+" before the substitution parameter name and add "+}" after the name. Note that the enclosing delimiters are different than those used in the templates, since the WordPress shortcode parser reserves square brackets ("[" and "]") for its own use.
1518
  </p>
1519
  <p>
1520
- The "mla_link_href" parameter is a great way to change the destination your cloud item links to and/or add arguments to the link for later processing. For example, to make a gallery item link back to the current page/post you can code: <code>mla_link_href='{+page_url+}'</code>. You can also add arguments to the link, e.g., <code>mla_link_href='{+page_url+}?firstarg=value1&amp;amp;myarg=myvalue'</code>. Note the use of the HTML entity name "&amp;amp;" to put an ampersand in the value; the WordPress "visual" post editor will replace "&", "<" and ">" with "&amp;amp;", "&amp;lt;" and "&amp;gt;" whether you like it not. The <strong>only</strong> markup parameters modified by this parameter are "link_url" and "thelink". The markup parameters "viewlink" and "editlink" are not modified.
1521
  </p>
1522
  <p>
1523
  The "mla_link_attributes" parameter accepts any value and adds it to the "&lt;a&gt;" or "&lt;span&gt;" tags for the item. For example, you can add a unique identifier to each item by adding <code>mla_link_attributes='id="{+selector}-{+index+}"'</code> to your shortcode (note the use of single quotes around the parameter value and the double quotes within the parameter). <strong>IMPORTANT:</strong> since the shortcode parser reserves square brackets ("[" and "]") for its own use, <strong>you must substitute curly braces for square brackets</strong> if your attributes require brackets. If you must code a curly brace in your attribute value, preface it with <strong>two backslash characters</strong>, e.g., "\\{" or "\\}". If you code an attribute already present in the tag, your value will override the existing value.
@@ -1628,6 +1643,7 @@ If you code <code>mla_debug=log</code> all of the information will be written to
1628
  <h4>Tag Cloud Substitution Parameters</h4>
1629
  <p>
1630
  Substitution parameters are a powerful way to add general and attachment-specific values to the gallery display. For example, if you code "<code>mla_link_href="{+page_url+}?current_id={+term_id+}&amp;mla_cloud_current={+request:mla_cloud_current+}"</code>, the hyperlinks behind each cloud term will contain the page URL and the taxonomy term ID. There are many parameter names like `page_url` and `term_id` divided in several categories:
 
1631
  <table>
1632
  <tr>
1633
  <td class="mla-doc-table-label">Cloud-specific</td>
@@ -1642,7 +1658,7 @@ Substitution parameters are a powerful way to add general and attachment-specifi
1642
  <td>values that are known at the beginning of cloud output processing and remain the same for the entire cloud</td>
1643
  </tr>
1644
  <tr>
1645
- <td class="mla-doc-table-label">Item-specific</a></td>
1646
  <td style="vertical-align: top">values that change for each term/item in the cloud, such as Name and Description</td>
1647
  </tr>
1648
  <tr>
@@ -1654,7 +1670,7 @@ Substitution parameters are a powerful way to add general and attachment-specifi
1654
  <td>lets you compose a value from multiple substitution parameters and test for empty values, choose among two or more alternatives or suppress output entirely</td>
1655
  </tr>
1656
  </table>
1657
- &nbsp;<br />
1658
  The following paragraphs go into more detail about each category and the parameter names within them.
1659
  </p>
1660
  <p>
@@ -1662,6 +1678,7 @@ To use a substitution parameter in your shortcode, simply add "{+" before the su
1662
  </p>
1663
  <p>
1664
  <strong>Cloud-specific substitution parameters</strong> are known at the beginning of shortcode processing and they do not change during processing. They can be used, for example, in any of the data selection parameters to change the items selected for the cloud based on information about the post/page on which the cloud appears. The cloud-specific substitution parameters are:
 
1665
  <table>
1666
  <tr>
1667
  <td class="mla-doc-table-label">site_url</td>
@@ -1688,7 +1705,6 @@ To use a substitution parameter in your shortcode, simply add "{+" before the su
1688
  <td style="vertical-align: top">the <code>ID</code> value of the post/page in which the cloud appears</td>
1689
  </tr>
1690
  <tr>
1691
- <tr>
1692
  <td class="mla-doc-table-label">page_author</td>
1693
  <td>the <code>post_author</code> value of the post/page in which the cloud appears</td>
1694
  </tr>
@@ -1753,6 +1769,7 @@ The following <strong>field-level substitution parameters</strong> are available
1753
  <tr>
1754
  <td class="mla-doc-table-label">query</td>
1755
  <td>The parameters defined in the <code>[mla_tag_cloud]</code> shortcode. For example, if your shortcode is <code>[mla_tag_cloud taxonomy=attachment_tag div-class=some_class]</code> you can access the parameters as <code>[+query:taxonomy+]</code> and <code>[+query:div-class+]</code> respectively. You can define your own parameters, e.g., "div-class"; they will be accessible as field-level data but will otherwise be ignored.</td>
 
1756
  <tr>
1757
  <td class="mla-doc-table-label">template</td>
1758
  <td>A Content Template, which lets you compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing output entirely. See the <a href="#mla_template_parameters">Content Templates</a> section for details. Note that the formatting option is not supported for content templates.</td>
@@ -1974,6 +1991,7 @@ Tag cloud <strong>item-specific substitution parameters</strong> for the Markup
1974
  <td class="mla-doc-table-label">rollover_text</td>
1975
  <td>the "title" attribute value, drawn from single_text/multiple_text or the mla_rollover_text parameters</td>
1976
  </tr>
 
1977
  <td class="mla-doc-table-label">link_style</td>
1978
  <td>the CSS "style" attribute, drawn from the font_size and unit parameters</td>
1979
  </tr>
@@ -2005,6 +2023,7 @@ Tag cloud <strong>item-specific substitution parameters</strong> for the Markup
2005
  <h4>Tag Cloud Pagination Parameters</h4>
2006
  <p>
2007
  If you have a large number of terms in your cloud taxonomy you may want to paginate the cloud display, i.e., divide the cloud into two or more pages of a reasonable size. Pagination support for <code>[mla_tag_cloud]</code> is modeled on similar functions for<code>[mla_gallery]</code>, and you can find more explanation of the ideas behind pagination in the <a href="#mla_output_parameter"><strong>Support for Alternative Gallery Output, e.g., Pagination</strong></a> section. Five parameters are supplied for this purpose:
 
2008
  <table>
2009
  <tr>
2010
  <td class="mla-doc-table-label">limit</td>
@@ -2029,6 +2048,7 @@ If you have a large number of terms in your cloud taxonomy you may want to pagin
2029
  </table>
2030
  <p>
2031
  The <code>[mla_tag_cloud]</code> shortcode can be used to provide "Previous" and "Next" links that support moving among the individual items in a cloud or among cloud "pages". For example, if you have many terms in your Att. Category or Att. Tag taxonomies you can build a term-specific <code>[mla_gallery]</code> page with links to the previous/next term in the taxonomy (a complete pagination example is included below). You can also build a page that shows a large taxonomy in groups, or "cloud pages", of ten terms with links to the previous/next ten terms or links to all of the cloud pages of terms in the taxonomy.
 
2032
  <p>
2033
  The <strong>"mla_output"</strong> parameter determines the type of output the shortcode will return. For pagination output, you can choose from six values:
2034
  </p>
@@ -2037,6 +2057,7 @@ The <strong>"mla_output"</strong> parameter determines the type of output the sh
2037
  <td class="mla-doc-table-label">next_link</td>
2038
  <td>returns a link to the next cloud item, based on the "term_id" parameter value. The optional "<strong>,wrap</strong>" qualifier determines what happens at the end of the cloud. If you omit the qualifier, an empty string is returned for the "next_link" from the last item. If you code the ",wrap" qualifier, the "next_link" from the last item will be to the first item.</td>
2039
  </tr>
 
2040
  <td class="mla-doc-table-label">current_link</td>
2041
  <td>returns a link to the current cloud item, based on the "term_id" parameter value. This gives you an easy way to provide a visual indication of where you are within the taxonomy. The "span" and "none" link formats are often used with this mla_output type.</td>
2042
  </tr>
@@ -2128,7 +2149,8 @@ The "smallest=12" and "largest=12" parameters make "font-size" the same for all
2128
  </p>
2129
  <h4>MLA Tag Cloud Filters (Hooks)</h4>
2130
  <p>
2131
- The <code>[mla_tag_cloud]</code> shortcode supports a comprehensive set of filters that give you complete control over cloud composition from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Gallery Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Tag+Cloud+Hooks+Example%22" class="mla-doc-bold-link">MLA Tag Cloud Hooks Example</a>. To run the example:
 
2132
  <ol>
2133
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
2134
  <li>Hover over "MLA Tag Cloud Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -2136,7 +2158,6 @@ The <code>[mla_tag_cloud]</code> shortcode supports a comprehensive set of filte
2136
  <li>Create a new <code>[mla_tag_cloud]</code> shortcode or modify an existing shortcode, adding the <code>my_filter="color cloud"</code> parameter to activate the example output.</li>
2137
  <li>View the post or page on which the modified shortcode appears to see a tag cloud with a range of colors applied to the terms.</li>
2138
  </ol>
2139
- </p>
2140
  <p>
2141
  The example code documents each hook with comments in the filter/action function that intercepts the hook. Generally, each part of the cloud supports three hooks: 1) a "<strong>values</strong>" hook, which lets you record or update the substitution values for that cloud part, 2) a "<strong>template</strong>" hook, which lets you record/update the template used to generate the HTML markup, and 3) a "<strong>parse</strong>" hook which lets you modify or replace the markup generated for a cloud part. The current hooks are:
2142
  </p>
@@ -2438,7 +2459,6 @@ Eight parameters provide an easy way to control the contents of list items witho
2438
  </p>
2439
  <table>
2440
  <tr>
2441
- <tr>
2442
  <td class="mla-doc-table-label">mla_link_attributes</td>
2443
  <td>adds one or more HTML attributes to the hyperlink for each item; see below</td>
2444
  </tr>
@@ -2475,7 +2495,7 @@ Eight parameters provide an easy way to control the contents of list items witho
2475
  All but the "mla_target" parameter support the <a href="#term_list_markup_parameters">Markup</a>, <a href="#term_list_item_parameters">Item-specific</a>, <a href="#term_list_variable_parameters">Field-level</a> and <a href="#mla_template_parameters">Content Template</a> substitution parameters defined for Markup Templates. For example, if you code "<code>mla_rollover_text='{+slug+} : {+rollover_text+}'</code>, the rollover text will contain the term slug, a colon, and the appropriate "single text" or "multiple text". Simply add "{+" before the substitution parameter name and add "+}" after the name. Note that the enclosing delimiters are different than those used in the templates, since the WordPress shortcode parser reserves square brackets ("[" and "]") for its own use.
2476
  </p>
2477
  <p>
2478
- The "mla_link_href" parameter is a great way to change the destination your list item links to and/or add arguments to the link for later processing. For example, to make a gallery item link back to the current page/post you can code: <code>mla_link_href='{+page_url+}'</code>. You can also add arguments to the link, e.g., <code>mla_link_href='{+page_url+}?firstarg=value1&amp;amp;myarg=myvalue'</code>. Note the use of the HTML entity name "&amp;amp;" to put an ampersand in the value; the WordPress "visual" post editor will replace "&", "<" and ">" with "&amp;amp;", "&amp;lt;" and "&amp;gt;" whether you like it not. The <strong>only</strong> markup parameters modified by this parameter are "link_url" and "thelink". The markup parameters "currentlink", "viewlink" and "editlink" are not modified.
2479
  </p>
2480
  <p>
2481
  The "mla_link_attributes" parameter accepts any value and adds it to the "&lt;a&gt;" or "&lt;span&gt;" tags for the item. For example, you can add a unique identifier to each item by adding <code>mla_link_attributes='id="{+selector}-{+index+}"'</code> to your shortcode (note the use of single quotes around the parameter value and the double quotes within the parameter). <strong>IMPORTANT:</strong> since the shortcode parser reserves square brackets ("[" and "]") for its own use, <strong>you must substitute curly braces for square brackets</strong> if your attributes require brackets. If you must code a curly brace in your attribute value, preface it with <strong>two backslash characters</strong>, e.g., "\\{" or "\\}". If you code an attribute already present in the tag, your value will override the existing value.
@@ -2499,11 +2519,11 @@ Dropdown and Checklist formats do not generate hyperlinks; they generate HTML in
2499
  </tr>
2500
  <tr>
2501
  <td class="mla-doc-table-label">mla_option_value</td>
2502
- <td>replaces the <strong>term_id (default)</strong> value returned for each option. For <strong>dropdown</strong> controls containing terms from multiple taxonomies, the default is <strong><code>[+taxonomy+].[+term_id+]</code>.</td>
2503
  </tr>
2504
  <tr>
2505
  <td class="mla-doc-table-label">hide_if_empty</td>
2506
- <td>If <strong>false (default)</strong>, display a control with "option_none" text & value. If true, display mla_nolink_text or nothing.</td>
2507
  </tr>
2508
  <tr>
2509
  <td class="mla-doc-table-label">mla_nolink_text</td>
@@ -2562,7 +2582,6 @@ You could use the <code>mla_control_name</code> shortcode parameter to move the
2562
  <h4>Term List Other Parameters</h4>
2563
  <table>
2564
  <tr>
2565
- <tr>
2566
  <td class="mla-doc-table-label">mla_debug</td>
2567
  <td>controls debug log output; <strong>default false</strong>. See below for details.</td>
2568
  </tr>
@@ -2701,7 +2720,7 @@ Substitution parameters are a powerful way to add general and attachment-specifi
2701
  <td>values that are known at the beginning of list output processing and remain the same for the entire list</td>
2702
  </tr>
2703
  <tr>
2704
- <td class="mla-doc-table-label">Item-specific</a></td>
2705
  <td style="vertical-align: top">values that change for each term/item in the list, such as Name and Description</td>
2706
  </tr>
2707
  <tr>
@@ -2721,6 +2740,7 @@ To use a substitution parameter in your shortcode, simply add "{+" before the su
2721
  </p>
2722
  <p>
2723
  <strong>list-specific substitution parameters</strong> are known at the beginning of shortcode processing and they do not change during processing. They can be used, for example, in any of the data selection parameters to change the items selected for the list based on information about the post/page on which the list appears. The list-specific substitution parameters are:
 
2724
  <table>
2725
  <tr>
2726
  <td class="mla-doc-table-label">site_url</td>
@@ -2747,7 +2767,6 @@ To use a substitution parameter in your shortcode, simply add "{+" before the su
2747
  <td style="vertical-align: top">the <code>ID</code> value of the post/page in which the list appears</td>
2748
  </tr>
2749
  <tr>
2750
- <tr>
2751
  <td class="mla-doc-table-label">page_author</td>
2752
  <td>the <code>post_author</code> value of the post/page in which the list appears</td>
2753
  </tr>
@@ -2815,6 +2834,7 @@ The following <strong>field-level substitution parameters</strong> are available
2815
  <tr>
2816
  <td class="mla-doc-table-label">query</td>
2817
  <td>The parameters defined in the <code>[mla_term_list]</code> shortcode. For example, if your shortcode is <code>[mla_term_list taxonomy=attachment_tag div-class=some_class]</code> you can access the parameters as <code>[+query:taxonomy+]</code> and <code>[+query:div-class+]</code> respectively. You can define your own parameters, e.g., "div-class"; they will be accessible as field-level data but will otherwise be ignored.</td>
 
2818
  <tr>
2819
  <td class="mla-doc-table-label">template</td>
2820
  <td>A Content Template, which lets you compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing output entirely. See the <a href="#mla_template_parameters">Content Templates</a> section for details. Note that the formatting option is not supported for content templates.</td>
@@ -3005,6 +3025,7 @@ Term list <strong>item-specific substitution parameters</strong> for the Markup
3005
  <td class="mla-doc-table-label">rollover_text</td>
3006
  <td>the "title" attribute value, drawn from single_text/multiple_text or the mla_rollover_text parameters</td>
3007
  </tr>
 
3008
  <td class="mla-doc-table-label">link_style</td>
3009
  <td>the CSS "style" attribute, drawn from the font_size and unit parameters</td>
3010
  </tr>
@@ -3050,7 +3071,7 @@ Here is a simple example of a dropdown control for the Att. Categories taxonomy:
3050
  [mla_gallery]<br />
3051
  attachment_category="{+template:({+request:tax_input.attachment_category+}|no-term-selected)+}"<br />
3052
  posts_per_page=3 mla_output="paginate_links,prev_next"<br />
3053
- mla_link_href='{+new_url+}?mla_paginate_current={+new_page+}&tax_input[attachment_category]="{+query:attachment_category,text+}"'<br />
3054
  [/mla_gallery]<br />
3055
  &nbsp;<br />
3056
  [mla_gallery attachment_category="{+template:({+request:tax_input.attachment_category+}|no-term-selected)+}" posts_per_page=3 mla_caption="{+title+} : {+description+}" mla_nolink_text="&lt;br&gt;Select a term to display the gallery.&lt;br&gt;"]
@@ -3069,7 +3090,8 @@ You will also see that the term you select doesn&rsquo;t &ldquo;stick&rdquo; in
3069
  </p>
3070
  <h4>MLA Term List Filters (Hooks)</h4>
3071
  <p>
3072
- The <code>[mla_term_list]</code> shortcode supports a comprehensive set of filters that give you complete control over list composition from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Term List Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Term+List+Hooks+Example%22" class="mla-doc-bold-link">MLA Term List Hooks Example</a>. To run the example:
 
3073
  <ol>
3074
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
3075
  <li>Hover over "MLA Term List Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -3077,7 +3099,6 @@ The <code>[mla_term_list]</code> shortcode supports a comprehensive set of filte
3077
  <li>Create a new <code>[mla_term_list]</code> shortcode or modify an existing shortcode, adding the <code>my_filter="color list"</code> parameter to activate the example output.</li>
3078
  <li>View the post or page on which the modified shortcode appears to see a term list with a range of colors applied to the terms.</li>
3079
  </ol>
3080
- </p>
3081
  <p>
3082
  The example code documents each hook with comments in the filter/action function that intercepts the hook. Generally, each part of the list supports three hooks: 1) a "<strong>values</strong>" hook, which lets you record or update the substitution values for that list part, 2) a "<strong>template</strong>" hook, which lets you record/update the template used to generate the HTML markup, and 3) a "<strong>parse</strong>" hook which lets you modify or replace the markup generated for a list part. The current hooks are:
3083
  </p>
@@ -3134,7 +3155,6 @@ As you can tell from the number of parameters available, the <code>[mla_gallery]
3134
  <a name="simple_examples"></a>
3135
  </p>
3136
  <h4>Simple Examples</h4>
3137
- <p>
3138
  <ul class="mla_settings">
3139
  <li><code>[mla_gallery]</code> - will display all the images "attached" to the current post/page.</li>
3140
  <li><code>[mla_gallery ids="1,3,2,4"]</code> - will display specific images on any post/page. The numbers are the ID values of the images. You can use the "Add Media..." popup window and "Create Gallery" to get the list, then change the shortcode name to "mla_gallery" if you want to add other <code>[mla_gallery]</code> specific parameters.</li>
@@ -3143,7 +3163,6 @@ As you can tell from the number of parameters available, the <code>[mla_gallery]
3143
  <li><code>[mla_gallery post_parent=all post_mime_type="audio,video"]</code> - will display all the audio and video documents in your Media Library.</li>
3144
  <li><code>[mla_gallery post_parent=all post_mime_type=application/pdf size=icon link=file]</code> - will display all the PDF documents in your Media Library. The "PDF icon" will display in place of the thumbnail. When the icon is clicked, the document itself will be displayed in the browser.</li>
3145
  </ul>
3146
- </p>
3147
  <p>
3148
  Perhaps the most popular Media Library Assistant feature is the ability to assign category and tag values to Media Library Items and use the values to filter a gallery display. "Categories" and "Tags" are built-in WordPress "taxonomies" and have been used for a long time to organize posts and pages. WordPress does not have built-in support for using them with attachments and that was one of the original motivations for MLA.
3149
  </p>
@@ -3166,12 +3185,12 @@ The category_name example does not follow the general rule of "taxonomy-slug = t
3166
  <h4>A Paginated Gallery</h4>
3167
  <p>
3168
  If your gallery display includes a large number of items it may be useful to divide the display into "pages" with a fixed upper limit of items per page. The <a href="#mla_output_parameter"><strong>Support for Alternative Gallery Output, e.g., Pagination</strong></a> section explains several ways to do that; here is one example. Put <strong>both of these shortcodes</strong> on a post or page to display a paginated gallery:
 
3169
  <blockquote>
3170
  <code>[mla_gallery attachment_category=big-dog posts_per_page=12]</code><br />
3171
  &nbsp;<br />
3172
  <code>[mla_gallery attachment_category=big-dog posts_per_page=12 mla_output="paginate_links,prev_next"]</code>
3173
  </blockquote>
3174
- </p>
3175
  <p>
3176
  Note that <strong>two shortcodes are required</strong>; one for the gallery display and a second one for the pagination controls. The first <code>[mla_gallery]</code> displays the images assigned to <code>attachment_category=big-dog</code> and displays a maximum of 12 images at once. The second <code>[mla_gallery]</code> has <strong>exactly the same</strong> data selection parameter and posts per page parameter; that's essential to match up with the first shortcode. It adds one more parameter, <code>mla_output</code>. This parameter changes the display from a set of images to a set of pagination controls.
3177
  </p>
@@ -3182,12 +3201,12 @@ MLA will add and manage a "current page" parameter of its own so the two shortco
3182
  <h4>Tag Cloud and Gallery</h4>
3183
  <p>
3184
  Adding the "taxonomy=term" parameter to your shortcode is all well and good, but letting the viewer choose a term when they view the post/page is often better. One easy way to do this is to add the <code>[mla_tag_cloud]</code> shortcode. Here is a simple combination of a cloud and a gallery display:
 
3185
  <blockquote>
3186
  <code>[mla_tag_cloud taxonomy=attachment_category number=0 mla_link_href="{+page_url+}?term_slug={+slug+}"]</code><br />
3187
  &nbsp;<br />
3188
  <code>[mla_gallery attachment_category="{+template:({+request:term_slug+}|a-bad-term)+}" mla_nolink_text="Click a term to display the gallery."]</code>
3189
  </blockquote>
3190
- </p>
3191
  <p>
3192
  The <code>[mla_tag_cloud]</code> displays Att. Categories terms in the familiar cloud format. The <code>number=0</code> parameter ensures that all of the terms are displayed. The <code>mla_link_href</code> parameter links each term back to the current page (<code>{+page_url}</code>) and passes a variable back with the term selection (<code>?term_slug={+slug+}</code>). If you put the <code>[mla_tag_cloud]</code> shortcode on another page or in a widget you will have to hard-code the URL portion of the link.
3193
  </p>
@@ -3203,6 +3222,7 @@ The <code>[mla_gallery]</code> displays the images assigned to the selected atta
3203
  </ul>
3204
  <p>
3205
  You can read more about templates in the <a href="#mla_template_parameters">Content Templates</a> section. You can paginate your gallery by adding a third shortcode to the post/page. Put the new shortcode between the cloud and gallery so the pagination controls will appear above the gallery display:
 
3206
  <blockquote>
3207
  <code>[mla_tag_cloud taxonomy=attachment_category number=0 mla_link_href="{+page_url+}?term_slug={+slug+}"]</code><br />
3208
  &nbsp;<br />
@@ -3210,7 +3230,6 @@ You can read more about templates in the <a href="#mla_template_parameters">Cont
3210
  &nbsp;<br />
3211
  <code>[mla_gallery attachment_category="{+template:({+request:term_slug+}|a-bad-term)+}" posts_per_page=12 mla_nolink_text="Click a term to display the gallery."]</code>
3212
  </blockquote>
3213
- </p>
3214
  <p>
3215
  The <code>posts_per_page=12</code> parameter has been added to the gallery display shortcode (the third shortcode). A new <code>[mla_gallery]</code> is added to display the pagination controls. The data selection parameter and <code>posts_per_page=12</code> parameter match the gallery display shortcode below it. The <code>mla_output</code> parameter displays the pagination controls. Finally, the <code>mla_link_href="{+page_url+}?term_slug={+request:term_slug+}"</code> parameter is added so the pagination controls pass the <code>term_slug</code> from page to page.
3216
  <a name="search_form_and_gallery"></a>
@@ -3218,6 +3237,7 @@ The <code>posts_per_page=12</code> parameter has been added to the gallery displ
3218
  <h4>Search Form and Gallery</h4>
3219
  <p>
3220
  A common alternative to the taxonomy filtering in the previous examples is a keyword-based search. This example shows a simple HTML form with a text box and a button to run the search. The user can enter one or more words to search for in the Title or Description of Media Library items, then click "Search" to display a gallery of matching images:
 
3221
  <blockquote>
3222
  <code>&lt;form id="mla-search-form" action="." method="post"><br />
3223
  &lt;input id="mla-search-box" name="search-string" type="text" value="" />&amp;nbsp;&lt;input id="submit" name="submit" type="submit" value="Search" /><br />
@@ -3225,11 +3245,12 @@ A common alternative to the taxonomy filtering in the previous examples is a key
3225
  &nbsp;<br />
3226
  <code>[mla_gallery s="{+template:({+request:search-string+}|a-bad-term)+}" mla_nolink_text="Enter a search value above to display gallery."]</code>
3227
  </blockquote>
3228
- </p>
3229
  <p>
3230
  In this example the <code>name="search-string"</code> parameter is passed from the form to the <code>s="{+request:search-string+}</code>... parameter in the shortcode. As in the Cloud and Gallery example a Content Template is used to supply <code>a-bad-term</code> before the form is completed, which displays an empty gallery because it doesn't match anything. You can find more information on the <code>s=</code> parameter and other search parameters in the <a href="#search_keywords">Keyword(s) Search</a> section.
 
3231
  <p>
3232
  As in the Cloud and Gallery example, paginating your gallery display requires a slight modification of the <code>[mla_gallery]</code> shortcode (at the bottom of the next example) and adding a second <code>[mla_gallery]</code> shortcode (in the middle of the next example) to display the pagination controls:
 
3233
  <blockquote>
3234
  <code>&lt;form id="mla-search-form" action="." method="post"><br />
3235
  &lt;input id="mla-search-box" name="search-string" type="text" value="" />&amp;nbsp;&lt;input id="submit" name="submit" type="submit" value="Search" /><br />
@@ -3239,10 +3260,10 @@ As in the Cloud and Gallery example, paginating your gallery display requires a
3239
  &nbsp;<br />
3240
  <code>[mla_gallery s="{+template:({+request:search-string+}|a-bad-term)+}" mla_nolink_text="Enter a search value above to display gallery." posts_per_page=12]</code>
3241
  </blockquote>
3242
- </p>
3243
  <p>
3244
  The <code>posts_per_page=12</code> parameter has been added to the gallery display shortcode (the third shortcode). A new <code>[mla_gallery]</code> is added to display the pagination controls. The data selection parameter (<code>s="{+request:search-string+}</code>...) and <code>posts_per_page=12</code> parameter match the gallery display shortcode below it. The <code>mla_output</code> parameter displays the pagination controls. Finally, the <code>mla_link_href="{+page_url+}?search-string={+request:search-string+}"</code> parameter is added so the pagination controls pass the <code>search-string</code> from page to page.
3245
  <a name="mla_output_parameter"></a>
 
3246
  <p>
3247
  <a href="#backtotop">Go to Top</a>
3248
  </p>
@@ -3266,6 +3287,7 @@ The <strong>"mla_output"</strong> parameter determines the type of output the sh
3266
  <td class="mla-doc-table-label">next_link</td>
3267
  <td>returns a link to the next gallery item. The optional "<strong>,wrap</strong>" qualifier determines what happens at the end of the gallery. If you omit the qualifier, an empty string is returned for the "next_link" from the last item in the gallery. If you code the ",wrap" qualifier, the "next_link" from the last item will be to the first gallery item.</td>
3268
  </tr>
 
3269
  <td class="mla-doc-table-label">current_link</td>
3270
  <td>returns a link to the current gallery item. This gives you an easy way to provide a visual indication of where you are within the overall gallery. The "span" and "none" link formats are often used with this mla_output type.</td>
3271
  </tr>
@@ -3310,12 +3332,12 @@ In this example <code>/single-sample/</code>, the URL portion of the link, is th
3310
  </p>
3311
  <code>
3312
  [mla_gallery columns=1 ids="{+request:current_id+}" size=medium]
3313
- <br />&nbsp;<br>
3314
  &lt;div style="clear: both; float: left"&gt;<br />
3315
- [mla_gallery mla_output="previous_link,wrap" mla_link_text='&amp;larr; Previous Sample' attachment_tag="{+request:attachment_tag+}" id="{+request:current_id+}" mla_rollover_text="{+title+}" mla_link_href="{+page_url+}?current_id={+attachment_ID+}&amp;attachment_tag={+query:attachment_tag+}"]<br>
3316
- &lt;/div&gt;<br>
3317
- &lt;div style="float: right"&gt;<br>
3318
- [mla_gallery mla_output="next_link,wrap" mla_link_text='Next Sample &amp;rarr;' attachment_tag="{+request:attachment_tag+}" id="{+request:current_id+}" mla_rollover_text="{+title+}" mla_link_href="{+page_url+}?current_id={+attachment_ID+}&amp;attachment_tag={+query:attachment_tag+}"]<br>
3319
  &lt;/div&gt;
3320
  </code>
3321
  <p>
@@ -3495,12 +3517,12 @@ Expanding the "attachment tag gallery" example, you can select images using the
3495
  </p>
3496
  <code>
3497
  [mla_gallery attachment_tag="sample" posts_per_page=10 mla_caption="{+title+}"]
3498
- <br>&nbsp;<br>
3499
  &lt;div style="clear: both; float: left"&gt;<br />
3500
- [mla_gallery attachment_tag="sample" posts_per_page=10 mla_output="previous_page,first" mla_link_text='&amp;larr; Previous Gallery Page' mla_rollover_text="Previous or first page for this tag"]<br>
3501
- &lt;/div&gt;<br>
3502
- &lt;div style="float: right"&gt;<br>
3503
- [mla_gallery attachment_tag="sample" posts_per_page=10 mla_output="next_page,last" mla_link_text='&amp;larr; Next Gallery Page' mla_rollover_text="Next or last page for this tag"]<br>
3504
  &lt;/div&gt;
3505
  </code>
3506
  <p>
@@ -3544,14 +3566,13 @@ Expanding the "attachment tag gallery" example, you can select images using the
3544
  </p>
3545
  <code>
3546
  [mla_gallery attachment_tag="sample" posts_per_page=10 mla_caption="{+title+}"]
3547
- <br>&nbsp;<br>
3548
- [mla_gallery attachment_tag="sample" posts_per_page=10 mla_output="paginate_links,prev_next" mla_nolink_text='No Gallery Pages']<br>
3549
  </code>
3550
  <p>
3551
  This example is even simpler that the two earlier examples because there's just one additional <code>[mla_gallery]</code> shortcode for pagination links.
3552
- </p>
3553
  <a name="alt_shortcode"></a>
3554
- &nbsp;
3555
  <p>
3556
  <a href="#backtotop">Go to Top</a>
3557
  </p>
@@ -3619,10 +3640,8 @@ You can also use the "enclosing shortcode" form if the alternate shortcode, such
3619
  </p>
3620
  <p>
3621
  <strong>NOTE:</strong> When you use "mla_alt_shortcode" to pass format/display responsibility off to another shortcode you will lose the <code>[mla_gallery]</code> Gallery Display Style (e.g. "mla_float") and Gallery Display Content (e.g. "mla_caption") parameters. There is no reliable way for <code>[mla_gallery]</code> to pass this information on to the other shortcode you've specified.
3622
- </p>
3623
- <p>
3624
  <a name="photonic_gallery"></a>
3625
- &nbsp;
3626
  <p>
3627
  <a href="#backtotop">Go to Top</a>
3628
  </p>
@@ -3678,6 +3697,7 @@ In the arguments section you can separate the parameters with one or more spaces
3678
  <h4>Gallery-specific Substitution Parameters</h4>
3679
  <p>
3680
  Gallery-specific substitution parameters are known at the beginning of shortcode processing and they do not change during processing. They can be used, for example, in any of the data selection parameters to change the items selected for the gallery based on information about the post/page on which the gallery appears. The gallery-specific substitution parameters are:
 
3681
  <table>
3682
  <tr>
3683
  <td class="mla-doc-table-label">site_url</td>
@@ -3704,7 +3724,6 @@ Gallery-specific substitution parameters are known at the beginning of shortcode
3704
  <td style="vertical-align: top">the <code>ID</code> value of the post/page in which the gallery appears</td>
3705
  </tr>
3706
  <tr>
3707
- <tr>
3708
  <td class="mla-doc-table-label">page_author</td>
3709
  <td>the <code>post_author</code> value of the post/page in which the gallery appears</td>
3710
  </tr>
@@ -3757,8 +3776,7 @@ Gallery-specific substitution parameters are known at the beginning of shortcode
3757
  <td>absolute URL to the page or post on which the gallery appears, if any, with trailing slash</td>
3758
  </tr>
3759
  </table>
3760
- <a name="mla_style_parameters"></a>
3761
- &nbsp;
3762
  <p>
3763
  <a href="#backtotop">Go to Top</a>
3764
  </p>
@@ -3858,6 +3876,7 @@ The item-level substitution parameter names are:
3858
  <td class="mla-doc-table-label">captiontag_content</td>
3859
  <td>if both captiontag and caption are not empty, contains the complete HTML markup for the caption. This can be used to omit empty tags (as it is in the default template).</td>
3860
  </tr>
 
3861
  <td class="mla-doc-table-label">excerpt</td>
3862
  <td>always contains post_excerpt</td>
3863
  </tr>
@@ -3901,6 +3920,7 @@ The item-level substitution parameter names are:
3901
  <td class="mla-doc-table-label">parent_date</td>
3902
  <td>upload date of the parent</td>
3903
  </tr>
 
3904
  <td class="mla-doc-table-label">parent_permalink</td>
3905
  <td>permalink to the parent</td>
3906
  </tr>
@@ -4009,7 +4029,6 @@ The item-level substitution parameter names are:
4009
  <td>for image/icon items, width of the gallery image/icon</td>
4010
  </tr>
4011
  <tr>
4012
- <tr>
4013
  <td class="mla-doc-table-label">thumbnail_height</td>
4014
  <td>for image/icon items, height of the gallery image/icon</td>
4015
  </tr>
@@ -4155,7 +4174,7 @@ The next sections define each of the prefix and option/format values.
4155
  </p>
4156
  <h4>Prefix values</h4>
4157
  <p>
4158
- There are eleven prefix values for field-level parameters. Prefix values must be coded as shown; all lowercase letters.
4159
  </p>
4160
  <table>
4161
  <tr>
@@ -4275,6 +4294,10 @@ MLA adds three fields of its own to the XMP metadata information:
4275
  <td class="mla-doc-table-label">template</td>
4276
  <td>A Content Template, which lets you compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing output entirely. See the <a href="#mla_template_parameters">Content Templates</a> section for details. Note that the formatting option is not supported for templates.</td>
4277
  </tr>
 
 
 
 
4278
  </table>
4279
  <a name="field_level_formats"></a>
4280
  &nbsp;<br />
@@ -4316,7 +4339,7 @@ Eight "format" values help you reformat fields or encode them for use in HTML at
4316
  </tr>
4317
  <tr>
4318
  <td class="mla-doc-table-label">,attr</td>
4319
- <td>If you use a substitution parameter in an HTML attribute such as the <code>title</code> attribute of a hyperlink (<code>a</code>) or <code>img</code> tag you can add the ",attr" option to encode the <, >, &, " and ' (less than, greater than, ampersand, double quote and single quote) characters.</td>
4320
  </tr>
4321
  <tr>
4322
  <td class="mla-doc-table-label">,url</td>
@@ -4348,6 +4371,25 @@ Eight "format" values help you reformat fields or encode them for use in HTML at
4348
  </tr>
4349
  </table>
4350
  <p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4351
  <a name="field_level_data_sources"></a>&nbsp;
4352
  <p>
4353
  <a href="#backtotop">Go to Top</a>
@@ -4515,6 +4557,7 @@ Each Media Library attachment item has a row in the "posts" database table that
4515
  <td class="mla-doc-table-label">size_dimensions</td>
4516
  <td>image dimensions for thumbnail versions of the image, e.g., "150x150, 300x225, 600x288"</td>
4517
  </tr>
 
4518
  <td class="mla-doc-table-label">size_name[size]</td>
4519
  <td>image file name for a specific thumbnail version, e.g., size_name[medium] = "image-300x225.jpg"; set to empty string if the specified size does not exist. There will be a [size] choice for every thumbnail version registered with WordPress for the site.</td>
4520
  </tr>
@@ -4527,7 +4570,6 @@ Each Media Library attachment item has a row in the "posts" database table that
4527
  <td>image size in pixels for a specific thumbnail version, e.g., size_pixels[medium] = "67500"</td>
4528
  </tr>
4529
  <tr>
4530
- <tr>
4531
  <td class="mla-doc-table-label" style="width: 12em">size_dimensions[size]</td>
4532
  <td style="padding-bottom: 2em;">image dimensions for a specific thumbnail version, e.g., size_dimensions[medium] = "300x225"; set to empty string if the specified size does not exist. There will be a [size] choice for every thumbnail version registered with WordPress for the site.</td>
4533
  </tr>
@@ -4540,12 +4582,10 @@ Each Media Library attachment item has a row in the "posts" database table that
4540
  <td>for "attached" (post_parent not zero) objects, post type of the parent object</td>
4541
  </tr>
4542
  <tr>
4543
- <tr>
4544
  <td class="mla-doc-table-label">parent_title</td>
4545
  <td>for "attached" (post_parent not zero) objects, post title of the parent object</td>
4546
  </tr>
4547
  <tr>
4548
- <tr>
4549
  <td class="mla-doc-table-label">parent_issues</td>
4550
  <td>summary of parent status (only) "issues", e.g., bad parent, invalid parent, unattached</td>
4551
  </tr>
@@ -5027,8 +5067,7 @@ The native format of this data is somewhat complicated, so MLA converts the most
5027
  <td class="mla-doc-table-sublabel">The geodetic survey data used by the GPS receiver</td>
5028
  </tr>
5029
  </table>
5030
- <a name="pdf_metadata"></a>
5031
- &nbsp;
5032
  <p>
5033
  <a href="#backtotop">Go to Top</a>
5034
  </p>
@@ -5076,6 +5115,7 @@ Metadata in PDF documents comes from two sources. Early versions of the PDF spec
5076
  </table>
5077
  <p>
5078
  More recent versions of the specification add a second source of metadata, Metadata Streams, holding data defined by the <a href="https://www.adobe.com/products/xmp/" title="Adobe XMP site" target="_blank">Extensible Metadata Platform (XMP)</a> framework. XMP metadata varies from document to document but is often extensive. MLA provides access to this data in four ways:
 
5079
  <ol>
5080
  <li>
5081
  If a D.I.D. field is not stored in the document, MLA will copy appropriate values from the XMP data into the empty field to populate it as often as possible. For example, the "creator" value(s) in the "dc" namespace ("dc.creator") might be copied to an empty "Author" field, or the "dc.subject" value(s) might be copied to an empty Keywords field.
@@ -5090,7 +5130,6 @@ Other namespaces in the document are copied to arrays at the root level. For exa
5090
  For consistency with other file types, all XMP data found in a PDF document is also available with the "xmp:" prefix.
5091
  </li>
5092
  </ol>
5093
- </p>
5094
  <p>
5095
  MLA adds five fields of its own to the metadata information:
5096
  </p>
@@ -5116,14 +5155,14 @@ MLA adds five fields of its own to the metadata information:
5116
  <td>a special "pseudo value" that returns a string representation of all the metadata. You can use this pseudo-value to examine the metadata in a document, find field names and see what values are present.</td>
5117
  </tr>
5118
  </table>
5119
- <a name="substitution_parameter_filters"></a>
5120
- &nbsp;
5121
  <p>
5122
  <a href="#backtotop">Go to Top</a>
5123
  </p>
5124
  <h4>Field-level substitution parameter filters (Hooks)</h4>
5125
  <p>
5126
- Field-level substitution parameters can be extended to include any data values your application requires. They are supported by a set of filters that enables PHP code in your theme or in another plugin to create data values and make them available to MLA. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Substitution Parameter Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Substitution+Parameter+Hooks+Example%22" class="mla-doc-bold-link">MLA Substitution Parameter Hooks Example</a>. To run the example:
 
5127
  <ol>
5128
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5129
  <li>Hover over "MLA Substitution Parameter Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -5191,7 +5230,9 @@ The conditional and choice elements are the key to templates' power, particularl
5191
  </p>
5192
  <p>
5193
  Conditional, choice and template elements can be nested as needed. For example, a conditional element can have a choice element within it or a choice alternative could include a conditional. Here's an example:
5194
- <p><code>[+template: Terms: (([+terms:category+], [+terms:post_tag+])|[+ terms: category +]|[+terms:post_tag +]|none)+]</code>
 
 
5195
  </p>
5196
  <p>
5197
  This template has a String, "Terms: " and a Conditional, "(([+terms: ... none)". This Conditional separates the "Terms: " literal from the first alternative in the Choice. Within the Conditional is a Choice having four alternatives. The first alternative is a Conditional, which will be empty unless both categories and tags are present. The second and third alternatives handle the cases where one of the two taxonomies has terms, and the final alternative is used when neither categories nor tags are present.
@@ -5205,24 +5246,127 @@ The conditional and choice elements require delimiters, "(", ")" and "|". If you
5205
  </p>
5206
  <p>
5207
  <strong>In a shortcode parameter:</strong> If your template is coded in a shortcode parameter, preface the template delimiters with two backslash characters, e.g., "\\(". If you need a backslash in your template, code it as four backslash characters, i.e., "\\\\". The doubling of backslash characters is required because of the way WordPress processes shortcode parameters.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5208
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5209
  <a name="mla_text_widget"></a>
5210
- &nbsp;
5211
  <p>
5212
  <a href="#backtotop">Go to Top</a>
5213
  </p>
5214
  <h3>The MLA Text Widget</h3>
5215
  <p>
5216
  The MLA Text Widget lets you add content such as <code>[mla_gallery]</code> and <code>[mla_tag_cloud]</code> displays to your site's sidebars. It is an easy way to add slide shows and navigation features to all your pages. The MLA Text Widget is based on the WordPress Text widget, but adds the ability to include <strong>any</strong> shortcode to widget content. To use the MLA Text Widget:
 
5217
  <ol>
5218
  <li>Go to the Appearance/Widgets Administration screen</li>
5219
  <li>Open the sidebar, footer, or Theme section to which you wish to add the Text Widget</li>
5220
  <li>Find the Text Widget in the list of Widgets</li>
5221
  <li>Click and drag the Widget to the spot you wish it to appear</li>
5222
  </ol>
5223
- </p>
5224
  <p>
5225
  To open and edit the MLA Text Widget:
 
5226
  <ol>
5227
  <li>Click the down arrow to the right of the MLA Text Widget title</li>
5228
  <li>Set the MLA Text Widget Title (optional)</li>
@@ -5232,7 +5376,6 @@ To open and edit the MLA Text Widget:
5232
  <li>Click Close to close the Widget</li>
5233
  <li>Switch tabs in your browser and review the results; make changes if necessary</li>
5234
  </ol>
5235
- </p>
5236
  <p>
5237
  To add an <code>[mla_gallery]</code> or <code>[mla_tag_cloud]</code> shortcode to your widget, simply enter the shortcode name and parameters just as you would in the body of a post or page. Aside from the usually more limited area devoted to displaying the widget content, there are no differences in the way shortcodes are processed in the MLA Widget. Also, there is nothing special about the two MLA shortcodes; <strong>any</strong> shortcode can be added to the MLA Widget.
5238
  <a name="terms_search"></a>
@@ -5262,11 +5405,12 @@ The first example would match each word separately. The second would match "man"
5262
  </p>
5263
  <p>
5264
  Quote marks have another effect on the search; they restrict the match to a word boundary. For example, if you enter 'man' without enclosing quotes it will match "man" or "woman", because "<strong>man</strong>" appears as a part of "wo<strong>man</strong>". If you add quotes, i.e., ' "man" ', it will match "man" or "big man" but it will not match the "man" portion of "woman".
 
5265
  <p>
5266
  In the unlikely event you need to match single or double quotes inside a phrase you can enter them as an escape sequence. Use <code>\47</code> for a single quote<code>\42</code> for a double quote.
5267
  </p>
5268
- </p>
5269
  <h4>Connecting multiple phrases</h4>
 
5270
  The search is further defined by the connector used between multiple phrases:
5271
  </p>
5272
  <ul class="mla_settings">
@@ -5358,11 +5502,12 @@ If you change your mind you can close the window without making a change by clic
5358
  The <a href="https://wordpress.org/plugins/codepress-admin-columns/" title="Admin Columns plugin directory page" target="_blank">Admin Columns</a> plugin allows you to customize columns on several admin-mode screens, including the MLA Media/Assistant submenu screen. All you have to do is install the plugin; MLA will detect its presence and automatically register the Media/Assistant submenu screen for support. With Admin Columns, you can:
5359
  </p>
5360
  <ul class="mla_settings">
5361
- <li>Reorder columns with a simple drag & drop interface.</li>
5362
  <li>Re-size columns to give more or less space to a column.</li>
5363
  <li>Remove (not just hide) columns from the submenu table.</li>
5364
  <li>Add new columns for custom fields and additional information.</li>
5365
- <li>The Admin Columns "Pro" version adds support for ACF fields and other capabilities.</li>
 
5366
  </ul>
5367
  <p>
5368
  When Admin Columns is present you will see a new "Edit Columns" button just above the Media/Assistant submenu table. Click the button to go to the Settings/Admin Columns configuration screen. There you will see "Media Library Assistant" added to the "Others:" list. Click on it to see the configuration of the Media/Assistant submenu screen.
@@ -5379,7 +5524,8 @@ When you have completed your configuration changes, click "Update Media Library
5379
  </p>
5380
  <h3>Custom Taxonomy Actions and Filters (Hooks)</h3>
5381
  <p>
5382
- The Custom Taxonomy filters and actions give you control over the registration of the Att. Categories and Att. Tags taxonomies from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Taxonomy Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Taxonomy+Hooks+Example%22" class="mla-doc-bold-link">MLA Taxonomy Hooks Example</a>. To run the example:
 
5383
  <ol>
5384
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5385
  <li>Hover over "MLA Taxonomy Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -5387,7 +5533,6 @@ The Custom Taxonomy filters and actions give you control over the registration o
5387
  <li>Go to, for example, the Media/Assistant submenu to exercise the filters and write filter/action information to the site's Error Log.</li>
5388
  <li>Examine the Error Log to see the filter/action information.</li>
5389
  </ol>
5390
- </p>
5391
  <p>
5392
  You can find more information about the types, labels and arguments in the <a href="https://codex.wordpress.org/Function_Reference/register_taxonomy" title="register_taxonomy() Documentation" target="_blank">Function Reference/register taxonomy</a> repository page.
5393
  </p>
@@ -5411,16 +5556,14 @@ The following hooks are defined in <code>/wp-admin/includes/class-mla-objects.ph
5411
  <td class="mla-doc-hook-definition">Modify the array of arguments with which the taxonomy is registered. For example, you can change the URL rewrite slug from the default <code>attachment_category/attachment_tag</code> values for SEO purposes. <strong>Note</strong>: You may need to flush the rewrite rules after changing the slug. You can do it manually by going to the Permalink Settings page and re-saving the rules -- you don't need to change them.</td>
5412
  </tr>
5413
  </table>
5414
- <p>
5415
- &nbsp;
5416
- <a name="mla_list_table_hooks"></a>
5417
- </p>
5418
  <p>
5419
  <a href="#backtotop">Go to Top</a>
5420
  </p>
5421
  <h3>Media/Assistant Submenu Actions and Filters (Hooks)</h3>
5422
  <p>
5423
- The Media/Assistant submenu supports a comprehensive set of filters and actions that give you control over table columns, inline actions and bulk actions from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the List Table Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+List+Table+Hooks+Example%22" class="mla-doc-bold-link">MLA List Table Hooks Example</a>. To run the example:
 
5424
  <ol>
5425
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5426
  <li>Hover over "MLA List Table Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -5428,7 +5571,6 @@ The Media/Assistant submenu supports a comprehensive set of filters and actions
5428
  <li>Go to the Media/Assistant submenu to exercise the filters and write filter/action information to the site's Error Log.</li>
5429
  <li>Examine the Error Log to see the filter/action information.</li>
5430
  </ol>
5431
- </p>
5432
  <p>
5433
  The example code documents each hook with comments in the filter/action function that intercepts each hook. There are hooks that let you add, modify or delete table columns.
5434
  </p>
@@ -5605,7 +5747,7 @@ The following hooks are defined in <code>/media-library-assistant/includes/class
5605
  </tr>
5606
  <tr>
5607
  <td class="mla-doc-hook-label">mla_list_table_extranav_actions</td>
5608
- <td class="mla-doc-hook-definition">Gives you an opportunity to add, remove and/or re-order the controls added to the top & bottom table navigation areas.</td>
5609
  </tr>
5610
  <tr>
5611
  <td class="mla-doc-hook-label">mla_list_table_extranav_custom_action</td>
@@ -5665,16 +5807,14 @@ The following hooks are defined in <code>/media-library-assistant/includes/class
5665
  <td class="mla-doc-hook-definition">Gives you a final chance to modify and extend the HTML markup used for the Bulk Edit on Upload form.</td>
5666
  </tr>
5667
  </table>
5668
- <p>
5669
- &nbsp;
5670
- <a name="mla_media_modal_filters"></a>
5671
- </p>
5672
  <p>
5673
  <a href="#backtotop">Go to Top</a>
5674
  </p>
5675
  <h3>Media Manager Enhancement filters (Hooks)</h3>
5676
  <p>
5677
- Media Library Assistant adds several controls to the toolbar in the Media Manager Modal Window; more MIME type filters, year/month filter, taxonomy term filter and an enhanced Search media box. These features are supported by a comprehensive set of filters and actions that give you control over MMMW content from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Media Modal Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Media+Modal+Hooks+Example%22" class="mla-doc-bold-link">MLA Media Modal Hooks Example</a>. To run the example:
 
5678
  <ol>
5679
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5680
  <li>Hover over "MLA Media Modal Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -5692,7 +5832,7 @@ The following hooks are defined in <code>/wp-admin/includes/class-mla-media-moda
5692
  </tr>
5693
  <tr>
5694
  <td class="mla-doc-table-label">mla_media_modal_months_dropdown</td>
5695
- <td class="mla-doc-hook-definition">Change the content of the Media Manager Modal Window Month & Year Dropdown control</td>
5696
  </tr>
5697
  <tr>
5698
  <td class="mla-doc-table-label">mla_media_modal_terms_options</td>
@@ -5756,10 +5896,7 @@ The following hooks are defined in <code>/wp-admin/includes/class-mla-data-query
5756
  <td class="mla-doc-hook-definition">Substitute the results of the Media Manager Modal Window "Query Attachments" query with alternative results of your own</td>
5757
  </tr>
5758
  </table>
5759
- <p>
5760
- <a name="mla_edit_meta_boxes"></a>
5761
- &nbsp;
5762
- </p>
5763
  <p>
5764
  <a href="#backtotop">Go to Top</a>
5765
  </p>
@@ -5768,7 +5905,8 @@ The following hooks are defined in <code>/wp-admin/includes/class-mla-data-query
5768
  Media Library Assistant adds support for the "Custom Fields" meta box to the Media/Edit Media screen. MLA also adds several meta boxes to this screen with more information about the item and where it is used on your site. You can enable/disable the additional meta boxes with an option on the Settings/Media Library Assistant General tab.
5769
  </p>
5770
  <p>
5771
- You can also make individual changes in which meta boxes are displayed and in their content by using one or more of the filters MLA provides. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Meta Box Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Meta+Box+Hooks+Example%22" class="mla-doc-bold-link">MLA Meta Box Hooks Example</a>. To run the example:
 
5772
  <ol>
5773
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5774
  <li>Hover over "MLA Meta Box Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -5776,7 +5914,6 @@ You can also make individual changes in which meta boxes are displayed and in th
5776
  <li>Make any changes or additions you want to in the example plugin source code. For example, you can modify the <code>mla_inserted_in_metabox</code> example to display a simplified version of the "Inserted in" information.</li>
5777
  <li>View the Media/Edit Media screen for an item to see the effect of your changes.</li>
5778
  </ol>
5779
- </p>
5780
  <p>
5781
  The example code documents each hook with comments in the filter function that intercepts the hook. Generally, each meta box filter lets you change the size of the text box (if appropriate) and the content that appears in the box. There is also a second filter for each meta box that lets you replace <strong>all</strong> of the HTML content for most boxes; use these with caution. The current hooks are:
5782
  </p>
@@ -5818,10 +5955,7 @@ The example code documents each hook with comments in the filter function that i
5818
  <td class="mla-doc-hook-definition">modify the rows, columns and content of the "MLA Gallery in" meta box.</td>
5819
  </tr>
5820
  </table>
5821
- <p>
5822
- <a name="mla_views"></a>
5823
- &nbsp;
5824
- </p>
5825
  <p>
5826
  <a href="#backtotop">Go to Top</a>
5827
  </p>
@@ -5859,9 +5993,8 @@ The Table View list also supports custom field queries. You can choose from thre
5859
  </ul>
5860
  <p>
5861
  If you have enabled the <em><strong>Media Manager Enhanced MIME Type filter</strong></em>, the Table View list will also be available in the Media Manager/Add Media "media items" drop down list.
5862
- </p>
5863
  <a name="mla_uploads"></a>
5864
- &nbsp;
5865
  <p>
5866
  <a href="#backtotop">Go to Top</a>
5867
  </p>
@@ -5875,6 +6008,7 @@ The first time it is invoked, MLA will retrieve the current list of extensions a
5875
  <h4>Extension and MIME Type</h4>
5876
  <p>
5877
  The Extension is the file extension for this type, and unique key for the item. It must be all lowercase and contain only letters, numbers and hyphens (-). The MIME Type value must be all lowercase and contain only letters, numbers, periods (.), slashes (/) and hyphens (-). The MIME type specification must be a single, valid MIME specification, e.g., "image" or "image/jpeg". These two values are used to compose the list of valid extension/type associations for use within WordPress.
 
5878
  <p>
5879
  When a file is uploaded to your Media Library the MIME type associated with that file extension is saved in the WordPress database record for the item. Later, you can use the <code>post_mime_type</code> to, for example, include or exclude the item from an <code>[mla_gallery]</code> display. You can think of the MIME Type as another way to categorize items in the Media Library. Once assigned, the MIME Type is not changed if you later alter the association between file extension and MIME Type. Think twice, therefore, when adding a new association to the list or changing the MIME type associated with an existing extension on the list.
5880
  </p>
@@ -5886,6 +6020,7 @@ When a file is uploaded to your Media Library the MIME type associated with that
5886
  <h4>Source and Status</h4>
5887
  <p>
5888
  The "Source" of an Upload MIME Type reveals where the extension/MIME Type association comes from:
 
5889
  <ul class="mla_settings">
5890
  <li><strong>core</strong>: WordPress defines a core set of extensions and associated MIME types, and this list changes with new WordPress releases. These are the "official" items. You can't delete them, but you can inactivate them so they are not used to validate file uploads.</li>
5891
  <li><strong>mla</strong>: Media Library Assistant adds several more extension/type items, drawing from the most popular items found in other plugins and web sites. They are initialized as "inactive" items, so you must explicitly decide to activate them for use in file upload validation.</li>
@@ -5925,9 +6060,8 @@ The Icon Type information is used primarily in a function that matches a file ex
5925
  </ul>
5926
  <p>
5927
  The icon images can be returned in a <code>[gallery]</code> or an <code>[mla_gallery]</code> shortcode when <code>size=icon</code> is specified. The icons also appear on the Media/Library and Media/Assistant submenu tables.
5928
- </p>
5929
  <a name="mla_optional_uploads"></a>
5930
- &nbsp;
5931
  <p>
5932
  <a href="#backtotop">Go to Top</a>
5933
  </p>
@@ -5943,6 +6077,7 @@ The <em><strong>Known File Extension/MIME Type Associations</strong></em> list w
5943
  </p>
5944
  <p>
5945
  For your own research, I suggest starting with these resources:
 
5946
  <ul class="mla_settings">
5947
  <li><a href="http://www.iana.org/assignments/media-types" target="_blank">Internet Assigned Number Authority MIME Media Types</a></li>
5948
  <li><a href="http://en.wikipedia.org/wiki/Internet_media_type" target="_blank">Wikipedia: Internet Media Type</a></li>
@@ -5960,19 +6095,24 @@ Put on your boots and have a paddle handy - it's a swamp! Good luck.
5960
  <p>
5961
  In the Custom Fields tab of the Settings screen you can define the rules for mapping several types of file and image metadata to WordPress custom fields. You can also use this screen to define rules for adding or updating elements within the WordPress-supplied "Attachment Metadata", stored in the "_wp_attachment_metadata" custom field. See the <a href="#attachment_metadata_mapping">Adding or changing Attachment Metadata</a> section below for details.
5962
  </p>
5963
- <p>In this tab there are three ways to execute one or more custom field mapping rules for <strong>ALL</strong> of your Media Library items:
 
 
5964
  <ul class="mla_settings">
5965
  <li><strong>Execute All Rules button</strong> - just below the "Enable" checkbox controls in the upper-left portion of the tab. Click this button to immediately run <strong>ALL</strong> of the active rules. Rules marked as inactive will not be executed.</li>
5966
  <li><strong>Bulk Actions "Execute"</strong> - Runs the rules you select by checking the box to the left of one or more rule names. Pull down the "Bulk Actions" control and select "Execute", then click the "Apply" button. <strong>Inactive rules will be executed</strong>; do not select them unless you want to execute them!</li>
5967
  <li><strong>"Execute" rollover action</strong> - Runs the single rule you select by clicking the rule's "Execute" rollover action. <strong>Inactive rules will be executed</strong>.</li>
5968
  </ul>
5969
- These commands process your items in "chunks" to prevent timeout errors. You can pause/resume or cancel the operation between chunks. Note that rules with a Data Source of "none" are ignored because they can't change the custom field value.</p>
5970
- <p>There are two other ways you can perform custom field mapping for one or more existing attachments:
 
 
 
 
5971
  <ul class="mla_settings">
5972
  <li><strong>Edit Media screen</strong> - You can click the "Map Custom Field metadata" link in the "Image Metadata" postbox to apply the existing mapping rules to a single attachment.</li>
5973
  <li><strong>Bulk Action edit area</strong> - To perform mapping for a group of attachments you can use the Bulk Action facility on the Media/Assistant screen. Check the attachments you want to map, select "Edit" from the Bulk Actions dropdown list and click "Apply". The bulk edit area will open with a list of the checked attachments in the left-hand column. You can click the "Map Custom Field metadata" button in the lower left corner of the area to apply the existing mapping rules to the attachments in the list.</li>
5974
  </ul>
5975
- </p>
5976
  <p>
5977
  Custom field mapping is a powerful tool, but it comes at the price of additional database storage space and processing time to maintain and retrieve the data. <strong><em>Think carefully about your needs before you use this tool.</em></strong> You can disable or delete any rules you create, so you might want to set up some rules for a special project or analysis of your library and then discard them when you're done. That said, the advantages of mapping metadata to custom fields are:
5978
  </p>
@@ -5983,15 +6123,21 @@ Custom field mapping is a powerful tool, but it comes at the price of additional
5983
  <p>
5984
  If you just want to add a custom field to the Media/Assistant submenu, the quick edit area and/or the bulk edit area you can bypass the mapping logic by leaving the Data Source value as "-- None (select a value) --".
5985
  </p>
5986
- <p>Three checkbox options control the custom field mapping when new items are added to the Media Library:
 
 
5987
  <ul class="mla_settings">
5988
  <li><strong>Enable custom field mapping</strong> - Check this option to enable the mapping rules and display the "Map" buttons on the Media/Edit Media and Media/Assistant Bulk Edit screens.</li>
5989
  <li><strong>Enable custom field mapping when adding new media</strong> - Check this option to enable mapping when uploading new items (attachments) to the Media Library.</li>
5990
  <li><strong>Enable custom field mapping when updating media metadata</strong> - Check this option to enable mapping when item (attachment) metadata is regenerated,
5991
  e.g., when the Media/Edit Media "Edit Image" functions are used.</li>
5992
  </ul>
5993
- The "when adding" and "when updating" options do <strong>NOT</strong> affect the operation of the "Map" buttons on the bulk edit or single edit screens, nor do they affect any of the "Execute" mapping functions On this Settings screen.</p>
5994
- <p>Check one or more options to enable these features, then click the "Save Changes" button to record your new setting(s).</p>
 
 
 
 
5995
  <p>
5996
  Some plugins support file uploads from the WordPress "front end", usually by using the WordPress "AJAX" support. To enable mapping when these plugins are used you must add an entry to your <code>wp-config.php</code> file so MLA will load the mapping code:
5997
  </p>
@@ -6011,6 +6157,7 @@ If you cannot identify the proper "action" value or if your uploader uses anothe
6011
  <h4>Custom field mapping example</h4>
6012
  <p>
6013
  Here is a simple example of mapping the items' file size to a custom field, so you can display it in the Media/Assistant submenu table and use it in and <code>[mla_gallery]</code> shortcode. You can go to the Settings/Media Library Assistant Custom Fields tab and define a rule that maps file size to a WordPress custom field. The steps required are:
 
6014
  <ol>
6015
  <li>Navigate to the Settings/Media Library Assistant "Custom Fields" tab.</li>
6016
  <li>Make sure the "Enable custom field mapping when adding new media" box is checked. If not, check the box, scroll down and click "Save Changes".</li>
@@ -6034,7 +6181,7 @@ Here is a simple example of mapping the items' file size to a custom field, so y
6034
  &nbsp;<br />
6035
  The three parameters in the above example will select all of the images in your media library and sort your gallery so the largest files appear first. You can replace <code>post_parent=all</code> with any other data selection parameters to get the items you want. For example, you can use a "meta_query" to select only those items (of any MIME Type) whose File Size is less than 82,168 bytes (and display the size in the gallery item caption):<br />
6036
  &nbsp;<br />
6037
- <code>[mla_gallery post_mime_type=all meta_query="array( array( 'key' => 'File Size', 'value' => array( '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;82,168' ), 'compare' => 'BETWEEN' ) )" meta_key="File Size" orderby="meta_value" order="DESC" mla_caption="{+caption+}<br>{+custom:File Size+}"]</code>
6038
  </p>
6039
  <p>
6040
  Note the format of the <code>value</code> and <code>compare</code> parameters within the <code>meta_query</code>. Because the File Size custom field uses the "Commas" format, the values are stored as 15-character strings with leading spaces; this makes the values display and sort sensibly. You must use <code>'compare' => 'BETWEEN'</code> and give the lowest and highest values as an array in the <code>'value' => array( '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;82,168' )</code> parameter, padding each value out to exactly 15 characters wide.
@@ -6199,8 +6346,10 @@ WordPress stores an array of information for image, audio and video items in the
6199
  </p>
6200
  <p>
6201
  As explained elsewhere, you can access all of this data with the "meta:" <a href="#mla_variable_parameters">Field-level markup substitution parameter</a>. By coding the "meta:" prefix in the Field Title column of a field mapping rule you can add to or update this data as well, from any of the data sources listed below. You can use a <a href="#mla_template_parameters">Content Template</a> to compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing the mapping altogether for a given item.
 
6202
  <p>
6203
  Let's say, for example, that you want to add GPS coordinates to the "image_meta" element of the Attachment Metadata.
 
6204
  <ol>
6205
  <li>
6206
  Open the Settings/Media Library Assistant submenu and select the Custom Fields tab. Scroll down to the "Add a new Field and Mapping Rule" section.
@@ -6215,9 +6364,9 @@ In the Data Source dropdown, select "-- Template (see below) --". In the text bo
6215
  Set the other parts of the rule as needed. You can select "Keep" if some of your items already have this information or "Replace" to update all items. "Native" and "Text" are appropriate for this example. You can check "Delete NULL values" to remove any existing, empty values for this element. The "MLA Column", "Quick Edit" and "Bulk Edit" checkboxes have no meaning for Attachment Metadata elements and can be left blank; they will be ignored if checked.
6216
  </li>
6217
  </ol>
6218
- </p>
6219
  <p>
6220
  If you are creating an IPTC/EXIF mapping rule the details are a bit different.
 
6221
  <ol>
6222
  <li>
6223
  Open the Settings/Media Library Assistant submenu and select the IPTC/EXIF tab. Scroll down to the "Add a new Field and Mapping Rule" section.
@@ -6232,9 +6381,7 @@ In the "EXIF/Template" text box, enter "template:([+exif:GPS.LatitudeSDD+])". Th
6232
  Set the other parts of the rule as needed. You can select "EXIF" unless you also select an IPTC value and want it to have priority. You can select "Keep" if some of your items already have this information or "Replace" to update all items.
6233
  </li>
6234
  </ol>
6235
- </p>
6236
- <a name="custom_field_mapping_with_templates"></a>
6237
- &nbsp;
6238
  <p>
6239
  <a href="#backtotop">Go to Top</a>
6240
  </p>
@@ -6247,30 +6394,33 @@ Within a template, all of the data sources listed above are available. For examp
6247
  </p>
6248
  <p>
6249
  You can use a template to compose a custom field from multiple data sources, e.g., "<code>Taken with [+meta:camera+] at [+dimensions+] using ISO [+exif:ISOSpeedRatings,single+] and [+exif:ExposureTime+] exposure time</code>".
6250
- <p>
6251
  </p>
 
6252
  You can use a template to compose a custom field from alternative data sources, depending on which fields are populated for a given attachment. For example, "<code>[+pdf:Keywords+]|[+iptc:2#025+]|none</code>" will use the PDF Keywords field, if populated, then the IPTC keywords field, if populated, or the literal "none" if neither field contains a value. With this template you can get keywords from both PDF documents and images in a single field.
 
6253
  <p>
6254
  Using a template with the Option Dropdown "Text" or "Single" values will yield a text result. For example, multiple IPTC keywords would be converted into a comma-delimited list as a string. If you combine a template with the "Export", "Array" or "Multi" values the template will deliver an array result if the fields inside the template have multiple values. For example, with "Multi" you can code "<code>([+iptc:2#020<strong>,array</strong>+])([+iptc:2#025<strong>,array</strong>+])</code>" to store each of the IPTC supplemental-category <em><strong>and</strong></em> keywords values (there is no "|" in the template) in a separate custom field value. Note the use of the <strong>,array</strong> formatting option in each field; this is required to get an array result for the field. Also, note that each of the fields is enclosed in parentheses, so the field is suppressed if it contains no values.
6255
  </p>
6256
  <p>
6257
  <strong>CAUTION:</strong> If you use the <code>[+custom:ALL_CUSTOM+]</code> pseudo value in a mapping rule, and you apply the rule more than once, you will see copies of the field you are mapping to in the result. To "clear out" a field you are mapping ALL_CUSTOM into, clear out the text box containing the template, select "Replace" and check the "Delete NULL values" box. Then, click "Map All Attachments"; that will delete the old values and give you a clean start. You'll also see that the template you deleted will be restored after the mapping is complete.
 
6258
  </p>
6259
- <a name="mla_iptc_exif_mapping"></a>&nbsp;
6260
  <p>
6261
  <a href="#backtotop">Go to Top</a>
6262
  </p>
6263
  <h3>IPTC &amp; EXIF Processing Options</h3>
6264
  <p>
6265
- Some image file formats such as JPEG DCT or TIFF Rev 6.0 support the addition of data about the image, or <em>metadata</em>, in the image file. In addition, many JPEG, TIFF and PDF files use the Extensible Metadata Platform (XMP)</a> framework. XMP metadata varies from file to file but is often extensive. Many popular image processing programs such as Adobe PhotoShop allow you to populate metadata fields with information such as a copyright notice, caption, the image author and keywords that categorize the image in a larger collection. WordPress uses some of this information to populate the Title, Slug and Description fields when you add an image to the Media Library.
6266
  </p>
6267
  <p>
6268
  The Media Library Assistant has powerful tools for copying metadata to:
 
6269
  <ul class="mla_settings">
6270
  <li>the WordPress standard fields, e.g., the Caption</li>
6271
  <li>taxonomy terms, e.g., in categories, tags or custom taxonomies like Att. Categories and Att. Tags</li>
6272
  <li>WordPress Custom Fields</li>
6273
  </ul>
 
6274
  You can define the rules for mapping metadata on the "IPTC/EXIF" tab of the Settings page. You can choose to automatically apply the rules when new media are added to the Library (or not). You can click the "Map IPTC/EXIF metadata" button on the Edit Media/Edit Single Item screen or in the bulk edit area to selectively apply the rules to one or more items. You can use the "Execute" functions in the tab to apply the rules to one, some or <strong><em>ALL</em></strong> of the items in your library at one time.
6275
  </p>
6276
  <p>If you use any of the "Execute" functions, the selected rule(s) will be immediately applied to <strong>all</strong> of the attachments in your Media Library. THERE<strong> IS NO UNDO FOR THESE ACTIONS!</strong></p>
@@ -6278,25 +6428,29 @@ You can define the rules for mapping metadata on the "IPTC/EXIF" tab of the Sett
6278
  If you just want to add a custom field to the Media/Assistant submenu, the quick edit area and/or the bulk edit area go to the "Custom Fields" tab and follow the instructions there.
6279
  </p>
6280
  <p>In this tab there are three ways to execute one or more IPTC/EXIF mapping rules for <strong>ALL</strong> of your Media Library items:
 
6281
  <ul class="mla_settings">
6282
  <li><strong>Execute All Rules button</strong> - just below the "Enable" checkbox controls in the upper-left portion of the tab. Click this button to immediately run <strong>ALL</strong> of the active rules. Rules marked as inactive will not be executed.</li>
6283
  <li><strong>Bulk Actions "Execute"</strong> - Runs the rules you select by checking the box to the left of one or more rule names. Pull down the "Bulk Actions" control and select "Execute", then click the "Apply" button. <strong>Inactive rules will be executed</strong>; do not select them unless you want to execute them!</li>
6284
  <li><strong>"Execute" rollover action</strong> - Runs the single rule you select by clicking the rule's "Execute" rollover action. <strong>Inactive rules will be executed</strong>.</li>
6285
  </ul>
 
6286
  These commands process your items in "chunks" to prevent timeout errors. You can pause/resume or cancel the operation between chunks.</p>
6287
  <p>There are two other ways you can perform IPTC/EXIF mapping for one or more existing attachments:
 
6288
  <ul class="mla_settings">
6289
  <li><strong>Edit Media screen</strong> - You can click the "Map IPTC/EXIF metadata" link in the "Image Metadata" postbox to apply the existing mapping rules to a single attachment.</li>
6290
  <li><strong>Bulk Action edit area</strong> - To perform mapping for a group of attachments you can use the Bulk Action facility on the Media/Assistant screen. Check the attachments you want to map, select "Edit" from the Bulk Actions dropdown list and click "Apply". The bulk edit area will open with a list of the checked attachments in the left-hand column. You can click the "Map IPTC/EXIF metadata" button in the lower left corner of the area to apply the standing mapping rules to the attachments in the list.</li>
6291
  </ul>
6292
- </p>
6293
  <p>Three checkbox options control the IPTC/EXIF mapping when new items are added to the Media Library:
 
6294
  <ul class="mla_settings">
6295
  <li><strong>Enable IPTC/EXIF Mapping</strong> - Check this option to enable the mapping rules and display the "Map" buttons on the Media/Edit Media and Media/Assistant Bulk Edit screens.</li>
6296
  <li><strong>Enable IPTC/EXIF Mapping when adding new media</strong> - Check this option to enable mapping when uploading new items (attachments) to the Media Library.</li>
6297
  <li><strong>Enable IPTC/EXIF Mapping when updating media metadata</strong> - Check this option to enable mapping when item (attachment) metadata is regenerated,
6298
  e.g., when the Media/Edit Media "Edit Image" functions are used.</li>
6299
  </ul>
 
6300
  The "when adding" and "when updating" options do <strong>NOT</strong> affect the operation of the "Map" buttons on the bulk edit or single edit screens, nor do they affect any of the "Execute" mapping functions On this Settings screen.</p>
6301
  <p>Check one or more options to enable these features, then click the "Save Changes" button to record your new setting(s).</p>
6302
  <p>
@@ -6310,7 +6464,7 @@ The above example adds the "action" values for two popular file upload plugins,
6310
  </p>
6311
  <p>
6312
  If you cannot identify the proper "action" value or if your uploader uses another method to do its work you can try adding <code>define( 'MLA_AJAX_EXCEPTIONS', 'always' );</code> to your <code>wp-config.php</code> file. This value will unconditionally load full MLA support for AJAX operations and may give you better results. You can also use the <a href="#mla_debug_tab">Debug tab</a> and <code>define( 'MLA_DEBUG_LEVEL', 3 );</code> to log more information about file upload requests; that may help identify the appropriate "action" value.
6313
- <a name="iptc_exif_mapping_example"></a>&nbsp;
6314
  </p>
6315
  <p>
6316
  <a href="#backtotop">Go to Top</a>
@@ -6326,6 +6480,7 @@ DateTime 2012:12:01 17:37:05<br />
6326
  </blockquote>
6327
  <p>
6328
  You can go to the Settings/Media Library Assistant IPTC/EXIF tab and define a rule that maps any of these fields to a WordPress custom field. The steps required are:
 
6329
  <ol>
6330
  <li>Navigate to the Settings/Media Library Assistant IPTC/EXIF tab.</li>
6331
  <li>Make sure the "Enable IPTC/EXIF Mapping when adding new media" box is checked. If not, check the box, scroll down and click "Save Changes".</li>
@@ -6350,9 +6505,9 @@ You can use the meta_key, orderby and order parameters to sort an <code>[mla_gal
6350
  &nbsp;<br />
6351
  The three parameters in the above example will select all of the images in your media library and sort your gallery so the newest/most recent images appear first. You can replace <code>post_parent=all</code> with any other data selection parameters to get the images you want. For example, you can use a "meta_query" to select only those images created after 2012-01-01 (and display the date in the gallery item caption):<br />
6352
  &nbsp;<br />
6353
- <code>[mla_gallery meta_query="array( array( 'key' => 'Date Time Created', 'value' => '2012-01-01', 'compare' => '<' ) )" meta_key="Date Time Created" orderby="meta_value DESC" mla_caption="{+custom:Date Time Created+}" ]</code>
 
6354
  </p>
6355
- <a name="iptc_exif_mapping_tables"></a>&nbsp;
6356
  <p>
6357
  <a href="#backtotop">Go to Top</a>
6358
  </p>
@@ -6427,11 +6582,11 @@ The Format element has a "commas" value that can improve the results of sorting
6427
  If you code the "template:" prefix at the beginning of the EXIF/Template value you have all the power of Content Templates at your disposal. Do <strong>not</strong> add the "[+" and "+]" delimiters; the prefix is all you need.
6428
  </p>
6429
  <p>
6430
- A template can be used to access any XMP metadata your items contain. For example:<br>
6431
- &nbsp;<br>
6432
- <code>template:([+xmp:Title+])</code><br>
6433
- <code>template:([+xmp:Regions.RegionList.*.*.Name,array+])</code><br>
6434
- &nbsp;<br>
6435
  Note the use of parentheses around the XMP parameters, which replace missing values with an empty value to enable proper rule processing.
6436
  </p>
6437
  <p>
@@ -6439,8 +6594,8 @@ Within a template, all of the <a href="#field_level_data_sources">Data sources f
6439
  </p>
6440
  <p>
6441
  You can use a template to compose a value from multiple data sources, e.g., "<code>Taken with [+meta:camera+] at [+dimensions+] using ISO [+exif:ISOSpeedRatings,single+] and [+exif:ExposureTime+] exposure time</code>".
6442
- <p>
6443
  </p>
 
6444
  You can use a template to compose a value from alternative data sources, depending on which fields are populated for a given attachment. For example, "<code>[+iptc:2#020+]|[+iptc:2#025+]|none</code>" will use the IPTC supplemental-category field, if populated, then the IPTC keywords field, if populated, or the literal "none" if neither IPTC field contains a value.
6445
  </p>
6446
  <p>
@@ -6451,8 +6606,32 @@ In the "Standard field mapping" table a special <code>template:[+empty+]</code>
6451
  </p>
6452
  <p>
6453
  Note that the <strong>,array</strong> formatting option is <strong>not</strong> required to get an array result for the field in a Taxonomy term mapping template; it is assumed. If you want a <strong>text</strong>, <strong>single</strong> or <strong>export</strong> result you can add one of those formatting options to your field specification.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6454
  </p>
6455
- <a name="pdf_iptc_exif_mapping"></a>&nbsp;
6456
  <p>
6457
  <a href="#backtotop">Go to Top</a>
6458
  </p>
@@ -6492,6 +6671,7 @@ You can use Content Templates in the EXIF/Template Value text box to extract met
6492
  </table>
6493
  <p>
6494
  The three rules have a similar structure:
 
6495
  <ul class="mla_settings">
6496
  <li>"template:" (goes in the text box below "EXIF/Template Value") is used to access the pdf: values instead of the EXIF values.</li>
6497
  <li>The values are surrounded by parentheses "(" and ")" so they will return an empty string for documents without meta data in the field and for other items such as images.
@@ -6499,6 +6679,7 @@ The three rules have a similar structure:
6499
  <li>I have selected "Replace" to overwrite the existing text, because a default Title was assigned to the items when they were uploaded. You can change this to "Keep" if you already have values in one or more of the fields that you want to retain.
6500
  </li>
6501
  </ul>
 
6502
  The taxonomy rule also has the ",array" option to return multiple keywords as individual array elements that can be converted to taxonomy terms. For this rule, the "Delimiter(s)" text box contains a comma and a semicolon, which should cover most of the documents you will encounter.
6503
  </p>
6504
  <p>
@@ -6536,14 +6717,16 @@ If your Media Library contains a mix of images and PDF documents you will want a
6536
  </table>
6537
  <p>
6538
  The three rules have similar changes:
 
6539
  <ul class="mla_settings">
6540
  <li>A vertical bar ("|") separates the two data source specifications. This is the Content Template "Choice" operator, which takes the first non-blank alternative from among the choices.</li>
6541
  <li>A second data source for images. The PDF documents will not have "exif:"/"iptc:" data sources, and images will not have "pdf:" data sources, so only one (at most) of the two alternatives will be non-blank.
6542
  </li>
6543
  </ul>
 
6544
  In fact, WordPress contains its own rules for composing a Title from IPTC/Exif metadata (see <a href="#wordpress_default_mapping">WordPress default title, slug and description mapping</a>), so you may not need or want to extend the Title rule. WordPress also fills the Description field, but does not fill the Caption. You may want to copy the Description into the Caption; if you do, replace <code>[+exif:ImageDescription+]</code> with <code>[+post_content+]</code> in the Caption rule.
 
6545
  </p>
6546
- <a name="wordpress_default_mapping"></a>&nbsp;
6547
  <p>
6548
  <a href="#backtotop">Go to Top</a>
6549
  </p>
@@ -6553,6 +6736,7 @@ When WordPress uploads a new image file that contains IPTC and EXIF metadata it
6553
  </p>
6554
  <p>
6555
  The WordPress rules are somewhat complex; consult the source code if you need exact details. Roughly speaking, the priority order for mapping the post_title and post_name values from non-blank IPTC/EXIF metadata is:
 
6556
  <ol>
6557
  <li>EXIF "Title"</li>
6558
  <li>EXIF "ImageDescription" (if less than 80 characters)</li>
@@ -6565,14 +6749,14 @@ The priority order for mapping the post_content value from non-blank IPTC/EXIF m
6565
  <li>EXIF "ImageDescription" (if different from post_title)</li>
6566
  <li>IPTC 2#120 "caption-or-abstract" (if different from post_title)</li>
6567
  </ol>
6568
- </p>
6569
  <a name="mla_mapping_hooks"></a>&nbsp;
6570
  <p>
6571
  <a href="#backtotop">Go to Top</a>
6572
  </p>
6573
  <h3>MLA Custom Field and IPTC/EXIF Mapping Actions and Filters (Hooks)</h3>
6574
  <p>
6575
- The Custom Field and IPTC/EXIF Mapping tools support a comprehensive set of filters and actions that give you complete control over rule execution and value creation from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Mapping Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Mapping+Hooks+Example%22" class="mla-doc-bold-link">MLA Mapping Hooks Example</a>. To run the example:
 
6576
  <ol>
6577
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
6578
  <li>Hover over "MLA Mapping Hooks Example" in the Name column, then click the "Install" rollover action.</li>
@@ -6580,7 +6764,6 @@ The Custom Field and IPTC/EXIF Mapping tools support a comprehensive set of filt
6580
  <li>Upload a new attachment and/or run the mapping rules to exercise the filters and write mapping information to the site's Error Log.</li>
6581
  <li>Examine the Error Log to see the mapping information.</li>
6582
  </ol>
6583
- </p>
6584
  <p>
6585
  The example code documents each hook with comments in the filter/action function that intercepts each hook. There are hooks that run at the beginning and end of the overall mapping operation as well as hooks for each mapping rule.
6586
  </p>
@@ -6629,7 +6812,7 @@ The current mapping hooks are:
6629
  </tr>
6630
  </table>
6631
  <p>
6632
- A second example plugin, <a title="Find the Metadata Mapping Hooks Example" href="[+example_url+]&mla-example-search=Search+Plugins&s=%22MLA+Metadata+Mapping+Hooks+Example%22" class="mla-doc-bold-link">MLA Metadata Mapping Hooks Example</a>, illustrates the metadata hooks. The current insert attachment/update attachment metadata hooks are:
6633
  </p>
6634
  <table>
6635
  <tr>
@@ -6752,6 +6935,10 @@ The MLA_DEBUG_LEVEL is also used to turn categories of debug messages on and off
6752
  <td class="mla-doc-table-label">64, or 0x0040</td>
6753
  <td>writes MLA-specific messages to the log for "where-used" reference collection.</td>
6754
  </tr>
 
 
 
 
6755
  </table>
6756
  <p>
6757
  You can pick the logging categories you want by adding the above values together. For example, to log only PHP messages you can use <code>define( 'MLA_DEBUG_LEVEL', 1 );</code> or <code>define( 'MLA_DEBUG_LEVEL', 0x0001 );</code>. To add the "AJAX" messages you can use <code>define( 'MLA_DEBUG_LEVEL', 3 );</code> or <code>define( 'MLA_DEBUG_LEVEL', 0x0003 );</code>. The hexadecimal notation ( 0x0003 ) can be easier to understand when several options are involved.
@@ -6797,7 +6984,7 @@ Below the Debug Settings section is a text area with the current content of the
6797
  </ul>
6798
  <p>
6799
  If you are having an MLA problem that includes error messages in the log, copying the messages and adding them to your Support Forum topic can be most helpful; thanks!
6800
- <a name="mla_language_tab"></a>&nbsp;
6801
  </p>
6802
  <p>
6803
  <a href="#backtotop">Go to Top</a>
@@ -6877,16 +7064,21 @@ When new terms are added during IPTC/EXIF taxonomy term mapping a third task is
6877
  <p>
6878
  When a specific language is selected only the item translations for that language are shown, and only the terms for that language are displayed (except for a Polylang bug that shows all languages in the "auto-complete" list for flat taxonomies). When "All Languages"/"Show all languages" is selected the terms for all languages are displayed even if they cannot be assigned to an item. For example, a Spanish term may appear in the list be cannot be assigned to an English item translations.
6879
  </p>
 
6880
  For individual edit and quick edit updates the rule is simple:
 
6881
  <ol>
6882
  <li>For all terms selected/entered, find the equivalent term in the language of the item translation. Assign the equivalent (language-specific) term if one exists. If no equivalent term exists, ignore the selected/entered term. Assign all equivalent terms to the item translation, replacing any previous terms.</li>
6883
  </ol>
 
6884
  For bulk edit updates the rule depends on which action (add, remove, replace) has been selected. Each of the item translations in the bulk edit list is updated by these rules:
 
6885
  <ol>
6886
  <li><strong>Add</strong>: For all terms selected/entered, find the equivalent term in the language of the item translation. Assign the equivalent (language-specific) term if one exists. If the equivalent term exists, add it to the item translation.</li>
6887
  <li><strong>Remove</strong>: For all terms selected/entered, find the equivalent term in the language of the item translation. Assign the equivalent (language-specific) term if one exists. If the equivalent term exists, remove it from the item translation.</li>
6888
  <li><strong>Replace</strong>: This is the tricky case. What should happen to terms already assigned to an item translation that have not been selected/entered for the update? In particular, what about terms that do not have translations to all languages? Should a "French-only" term be preserved?</li>
6889
  </ol>
 
6890
  The "<strong>Replace</strong>" answer is the same as the individual/quick edit answer. If the term is not selected/entered for the update it is discarded along with the other old assignments. After all, in "All Languages"/"Show all languages" mode the "French-only" term would have been in the list and could be selected if desired.
6891
  </p>
6892
  <strong>Term Synchronization</strong>
@@ -6949,7 +7141,7 @@ When rules are defined in the IPTC/EXIF "Taxonomy term mapping section" they ext
6949
  </ul>
6950
  <p>
6951
  If you use Replication to automatically create terms in non-current languages they will be created with the same text value as the source term in the current language. You can always go to the taxonomy edit page and change the source text to an appropriate value for the other language(s). If you do not use Replication you can always go to the taxonomy edit page and add translations with an appropriate value for the other language(s).
6952
- <a name="mla_example_plugins"></a>&nbsp;
6953
  </p>
6954
  <p>
6955
  <a href="#backtotop">Go to Top</a>
@@ -6960,6 +7152,7 @@ The MLA example plugins have been developed to illustrate practical applications
6960
  <p>The Documentation/Example Plugins submenu lets you browse the list of MLA example plugins, install or update them in the Plugins/Installed Plugins area and see which examples you have already installed. <strong>To activate, deactivate or delete</strong> the plugins you must go to the Plugins/Installed Plugins admin submenu.</p>
6961
  <p>
6962
  The Example plugins submenu lists all of the MLA example plugins and identifies those already in the Installed Plugins area. In the submenu:
 
6963
  <ul class="mla_settings">
6964
  <li>the "Screen Options" dropdown area lets you choose which columns to display and how many items appear on each page</li>
6965
  <li>the "Help" dropdown area gives you a brief explanation of the submenu content and functions</li>
@@ -6967,7 +7160,6 @@ The Example plugins submenu lists all of the MLA example plugins and identifies
6967
  <li>bulk and rollover actions are provided to install or update example plugins</li>
6968
  <li>the table can be sorted by any of the displayed columns</li>
6969
  </ul>
6970
- </p>
6971
  <p>
6972
  Once you have installed an example plugin you can use the WordPress Plugins/Editor submenu to view the source code and (with extreme caution) make small changes to the code. <strong>Be very careful if you choose to modify the code!</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated. It is much safer to download the file(s) or use FTP access to your site to modify the code offline in a more robust HTML/PHP editor.
6973
  </p>
1
  <!-- template="documentation-tab" -->
2
  <h2>Plugin and Shortcode Documentation. In this tab, jump to:</h2>
3
+ <div class="mla-display-settings-page" id="mla-display-settings-documentation-tab" style="width:710px">
4
  <p class="submit mla-settings-submit">
5
  Browse and install:
6
+ <a href="[+example_url+]" class="button button-primary">Example Plugins</a><br />
7
  &nbsp;<br />
8
+ For more information about the example plugins, jump to <a href="#mla_example_plugins">The Example Plugins</a><br />
9
  &nbsp;
10
  </p>
11
  <div id="mla-doc-gallery-shortcode"><a href="#mla_gallery"><strong>MLA Gallery Shortcode</strong></a>
77
  <li>
78
  <a href="#gallery_examples"><strong>MLA Gallery Examples</strong></a>
79
  </li>
80
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
81
  <li><a href="#simple_examples">Simple Examples</a></li>
82
  <li><a href="#paginated_gallery">A Paginated Gallery</a></li>
83
  <li><a href="#cloud_and_gallery">Tag Cloud and Gallery</a></li>
84
  <li><a href="#search_form_and_gallery">Search Form and Gallery</a></li>
85
+ </ul></li>
86
  <li>
87
  <a href="#mla_output_parameter"><strong>Support for Alternative Gallery Output, e.g., Pagination</strong></a>
88
  </li>
95
  <li>
96
  <a href="#mla_gallery_templates"><strong>Style and Markup Templates</strong></a>
97
  </li>
98
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
99
  <li><a href="#argument_parameters">Argument substitution parameters</a></li>
100
  <li><a href="#gallery_specific">Gallery-specific substitution parameters</a></li>
101
  <li><a href="#mla_style_parameters">Substitution parameters for style templates</a></li>
102
  <li><a href="#mla_markup_parameters">Substitution parameters for markup templates</a></li>
103
  <li><a href="#mla_attachment_parameters">Attachment-specific substitution parameters for the markup template Item part</a></li>
104
+ </ul></li>
105
  <li>
106
  <a href="#mla_table_example"><strong>A table-based Style and Markup template example</strong></a>
107
  </li>
108
  <li>
109
  <a href="#mla_variable_parameters"><strong>Field-level substitution parameters</strong></a>
110
  </li>
111
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
112
  <li><a href="#field_level_prefixes">Field-level prefix values</a></li>
113
  <li><a href="#field_level_formats">Field-level option/format values</a></li>
114
  <li><a href="#field_level_data_sources">Field-level data sources</a></li>
115
+ <li><a href="#mla_iptc_identifiers">Field-level IPTC identifiers and friendly names</a></li>
116
  <li><a href="#mla_camera_values">Field-level Enhanced EXIF CAMERA values</a></li>
117
  <li><a href="#mla_gps_values">Field-level Enhanced EXIF GPS values</a></li>
118
  <li><a href="#pdf_metadata">Field-level metadata in PDF documents</a></li>
119
  <li><a href="#substitution_parameter_filters">Field-level substitution parameter filters (Hooks)</a></li>
120
+ </ul></li>
121
  <li>
122
  <a href="#mla_template_parameters"><strong>Content Templates</strong></a>
123
+ </li>
124
+ <li>
125
+ <a href="#mla_regular_expressions"><strong>Regular Expression Features</strong></a>
126
+ </li>
127
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
128
+ <li><a href="#mla_regular_expressions_patterns">Patterns and Subpatterns</a></li>
129
+ <li><a href="#mla_regular_expressions_match">The <code>,match(p)</code> option/format value</a></li>
130
+ <li><a href="#mla_regular_expressions_extract">The <code>,extract(p,v)</code> option/format value</a></li>
131
+ <li><a href="#mla_regular_expressions_replace">The <code>,replace(p,r,v)</code> option/format value</a></li>
132
+ <li><a href="#mla_regular_expressions_matches">The <code>matches:</code> field-level prefix</a></li>
133
+ <li><a href="#mla_regular_expressions_examples">Application Examples</a></li>
134
+ </ul></li>
135
  <li>
136
  <a href="#mla_text_widget"><strong>The MLA Text Widget</strong></a>
137
  </li>
168
  <li>
169
  <a href="#mla_custom_field_mapping"><strong>Custom Field and Attachment Metadata Processing Options</strong></a>
170
  </li>
171
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
172
  <li><a href="#custom_field_mapping_example">Custom field mapping example</a></li>
173
  <li><a href="#custom_field_rule_elements">The custom field rule elements</a></li>
174
  <li><a href="#attachment_metadata_mapping">Adding or Changing Attachment Metadata</a></li>
175
  <li><a href="#custom_field_mapping_with_templates">Custom field mapping with Content Templates</a></li>
176
+ </ul></li>
177
  <li>
178
  <a href="#mla_iptc_exif_mapping"><strong>IPTC &amp; EXIF Processing Options</strong></a>
179
  </li>
180
+ <li style="list-style-type:none"><ul class="mla-doc-toc-list">
181
  <li><a href="#iptc_exif_mapping_example">IPTC/EXIF mapping example</a></li>
182
  <li><a href="#iptc_exif_mapping_tables">The IPTC/EXIF rule elements</a></li>
183
  <li><a href="#iptc_exif_mapping_with_templates">EXIF/Template mapping with Content Templates</a></li>
184
+ <li><a href="#date_iptc_exif_mapping">IPTC/EXIF Mapping and Bulk Editing for the "Uploaded on" Standard Field</a></li>
185
  <li><a href="#pdf_iptc_exif_mapping">IPTC/EXIF Mapping for PDF Documents</a></li>
186
  <li><a href="#wordpress_default_mapping">WordPress default title, slug and description mapping</a></li>
187
+ </ul></li>
 
188
  <li><a href="#mla_mapping_hooks"><strong>MLA Custom Field and IPTC/EXIF Mapping Actions and Filters (Hooks)</strong></a></li>
189
  <li><a href="#mla_debug_tab"><strong>MLA Debug Tab</strong></a></li>
190
  <li><a href="#mla_language_tab"><strong>WPML &amp; Polylang Multilingual Support; the MLA Language Tab</strong></a></li>
199
  <p>
200
  If you are a developer interested in how this plugin is put together, you should
201
  have a look at the <a title="Consult the phpDocs documentation" href="[+phpDocs_url+]" target="_blank" class="mla-doc-bold-link">phpDocs documentation</a>.
 
202
  <a name="mla_gallery"></a>
203
+ </p>
204
  <p>
205
  <a href="#backtotop">Go to Top</a>
206
  </p>
232
  <h4>Substitution Parameters</h4>
233
  <p>
234
  Substitution parameters are a powerful way to add general and attachment-specific values to the gallery display. For example, if you code "<code>mla_rollover_text='{+date+} : {+description+}'</code>, the rollover text will contain the upload date, a colon, and the full description of each gallery item. There are dozens of parameter names like `date` and `description` divided in several categories:
235
+ </p>
236
  <table>
237
  <tr>
238
  <td class="mla-doc-table-label"><a href="#gallery_specific">Gallery-specific</a></td>
259
  <td>lets you compose a value from multiple substitution parameters and test for empty values, choose among two or more alternatives or suppress output entirely</td>
260
  </tr>
261
  </table>
262
+ <p>
263
  Click on any of the category names in the above table to go to the Documentation section describing the names available in that category and how to use them.
264
  </p>
265
  <p>
439
  All but the "mla_target" parameter support the <a href="#mla_markup_parameters">Markup</a>, <a href="#mla_attachment_parameters">Attachment-specific</a>, <a href="#mla_variable_parameters">Field-level</a> and <a href="#mla_template_parameters">Content Template</a> substitution parameters defined for Markup Templates. For example, if you code "<code>mla_rollover_text='{+date+} : {+description+}'</code>, the rollover text will contain the upload date, a colon, and the full description of each gallery item. Simply add "{+" before the substitution parameter name and add "+}" after the name. Note that the enclosing delimiters are different than those used in the templates, since the WordPress shortcode parser reserves square brackets ("[" and "]") for its own use.
440
  </p>
441
  <p>
442
+ The "mla_link_href" parameter is a great way to change the destination your gallery item links to or add arguments to the link for later processing. For example, to make a gallery item link back to the page/post it is attached to, you can code: <code>mla_link_href='{+site_url+}/?page_id={+parent+}'</code>. You can also add arguments to the link, e.g., <code>mla_link_href='{+link_url+}?myarg1=myvalue1&amp;amp;myarg2=myvalue2'</code>. Note the use of the HTML entity name "&amp;amp;" to put an ampersand in the value; the WordPress "visual" post editor will replace "&amp;", "&lt;" and ">" with "&amp;amp;", "&amp;lt;" and "&amp;gt;" whether you like it not. The <strong>only</strong> markup parameter modified by this parameter is "link". Other markup parameters such as "pagelink", "filelink" and "link_url" are not modified.
443
  </p>
444
  <p>
445
  The "mla_link_attributes" and "mla_image_attributes" parameters accept any value and adds it to the "&lt;a&gt;" or "&lt;img&gt;" tags for the gallery item. For example, you can create a Shadowbox JS (plugin) album by adding <code>mla_link_attributes='rel="shadowbox{sbalbum-{+instance+}};player=img"'</code> to your shortcode query (note the use of single quotes around the parameter value and the double quotes within the parameter). <strong>IMPORTANT:</strong> since the shortcode parser reserves square brackets ("[" and "]") for its own use, <strong>you must substitute curly braces for square brackets</strong> if your attributes require brackets (as this example does). In this case, the actual attribute added to the link will be <code>rel="shadowbox[sbalbum-1];player=img"</code>. If you must code a curly brace in your attribute value, preface it with <strong>two backslash characters</strong>, e.g., "\\{" or "\\}". If you code an attribute already present in the tag, your value will override the existing value.
509
  </p>
510
  <p>
511
  Five options in the Settings/Media Library Assistant MLA Gallery tab allow control over mla_viewer operation:
512
+ </p>
513
  <ul class="mla_settings">
514
  <li><strong>Enable thumbnail substitution</strong><br />
515
  Check this option to allow the "mla_viewer" to generate thumbnail images for PDF documents. Thumbnails are generated dynamically, each time the item appears in an <code>[mla_gallery]</code> display.<br />
524
  <li><strong>Ghostscript path</strong><br />
525
  If your Ghostscript software is in a non-standard location, enter the full path and name of the executable here. The value you enter will be used as-is and the search for Ghostscript in the usual locations will be bypassed.</li>
526
  </ul>
527
+ <a name="order_orderby"></a>&nbsp;
 
528
  <h4>Order, Orderby</h4>
529
  <p>
530
  The Orderby parameter specifies which database field(s) are used to sort the gallery. You can sort the gallery by one or more of these values (there is additional information on some of these values in the <a href="http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters" title="WordPress Codex link" target="_blank">Codex WP_Query class reference</a>):
676
  <p>
677
  The links generated for mla_named_transfer items are of the form:<br />
678
  &nbsp;<br />
679
+ <code>http://mysite.com/wp-admin/admin-ajax.php?action=mla_named_transfer&amp;mla_item=item-name&amp;mla_disposition=inline</code><br />
680
  &nbsp;<br />
681
  Where the query arguments are:
682
  </p>
699
  </tr>
700
  </table>
701
  <p>
702
+ This alternate approach provides a small measure of security by obscuring the directory structure used to locate the file. It also makes it possible to generate SEO-friendly "pretty links" and use the <a href="https://codex.wordpress.org/Rewrite_API" title="Codex article: Rewrite API" target="_blank">WordPress Rewrite API</a> to translate the pretty links to the Transfer by Item Name syntax. The <a title="Find the Pretty Links Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Item+Transfer+Pretty+Links%22" class="mla-doc-bold-link">MLA Item Transfer Pretty Links</a> example plugin shows how this can be done.
703
  <a name="include_exclude"></a>
704
  </p>
705
  <h4>Include, Exclude</h4>
829
  </p>
830
  <table>
831
  <tr>
 
832
  <td class="mla-doc-table-label">tax_relation</td>
833
  <td>SQL operator to join multiple taxonomy queries; can be "AND" (the default) or "OR".</td>
834
  </tr>
835
+ <tr>
836
  <td class="mla-doc-table-label">tax_operator</td>
837
  <td>SQL operator to join the terms within each taxonomy; can be "IN" (the default), "NOT IN" or "AND".</td>
838
  </tr>
951
  <td>If you enter multiple phrases (separated by the <code>mla_phrase_delimiter</code>) in the <code>mla_terms_phrases</code> parameter, this parameter controls how they are connected. Choose from OR to require that any one of the phrases must match for the search to succeed, or <strong>AND (the default)</strong> to require that all of the phrases must match.</td>
952
  </tr>
953
  <tr>
 
954
  <td class="mla-doc-table-label">mla_term_delimiter</td>
955
  <td>A single character that separates the terms in <code>mla_terms_phrases</code>. The <strong>default delimiter</strong> is a comma (',') since term names can contain spaces.</td>
956
  </tr>
957
+ <tr>
958
  <td class="mla-doc-table-label">mla_term_connector</td>
959
  <td>If you enter multiple terms (separated by the <code>mla_term_delimiter</code>) in the <code>mla_terms_phrases</code> parameter, this parameter controls how they are connected. Choose from <strong>OR (the default)</strong> to require that any one of the terms must match for the search to succeed, or AND to require that all of the terms must match.</td>
960
  </tr>
973
  </p>
974
  <p>
975
  You can change the <code>post_type</code> parameter to compose a "gallery" of WordPress objects such as posts, pages and custom post types. For example, to display a gallery of the published posts in a particular category you can code something like:
976
+ </p>
977
  <p>
978
  <code>[mla_gallery category=some-term post_type=post post_status=publish post_mime_type=all post_parent=all]</code>
979
  </p>
980
+ <p>
981
  Note that you must also change the <code>post_status</code> <code>post_mime_type</code> and <code>post_parent</code> because the default values for those parameters are set for Media Library image items.
982
  </p>
983
  <p>
1085
  <td class="mla-doc-table-label">meta_value&nbsp;(string)</td>
1086
  <td>Custom field value; string-based comparison.</td>
1087
  </tr>
1088
+ <tr>
1089
  <td class="mla-doc-table-label">meta_value_num&nbsp;(number)</td>
1090
  <td>Custom field value; numeric comparison.</td>
1091
  </tr>
1092
+ <tr>
1093
  <td class="mla-doc-table-label">meta_compare&nbsp;(string)</td>
1094
+ <td>Operator to test the 'meta_value'. Possible values are '=', '!=', '>', '>=', '&lt;', '&lt;=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' or 'RLIKE'. Default value is '='. </td>
1095
  </tr>
1096
  </table>
1097
  <p>
1132
  </tr>
1133
  <tr>
1134
  <td class="mla-doc-table-label">mla_search_fields</td>
1135
+ <td>The fields in which to search. Choose from title, name, excerpt, content, file, terms. Searching on alt-text is not supported.</td>
1136
  </tr>
1137
  <tr>
1138
  <td class="mla-doc-table-label">mla_terms_taxonomies</td>
1187
  </p>
1188
  <h4>MLA Gallery Filters and Actions (Hooks)</h4>
1189
  <p>
1190
+ The <code>[mla_gallery]</code> shortcode supports a comprehensive set of filters and actions that give you complete control over gallery composition from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Gallery Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Gallery+Hooks+Example%22" class="mla-doc-bold-link">MLA Gallery Hooks Example</a>. To run the example:
1191
+ </p>
1192
  <ol>
1193
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
1194
  <li>Hover over "MLA Gallery Hooks Example" in the Name column, then click the "Install" rollover action.</li>
1197
  <li>Create a new <code>[mla_gallery]</code> shortcode or modify an existing shortcode, adding the <code>my_filter="all custom"</code> parameter to activate the example output.</li>
1198
  <li>View the post or page on which the modified shortcode appears to see a list of each item's custom fields appended to the gallery captions.</li>
1199
  </ol>
 
1200
  <p>
1201
  The example code documents each hook with comments in the filter/action function that intercepts each hook. Generally, each part of the gallery supports three hooks: 1) a "<strong>values</strong>" hook, which lets you record or update the substitution values for that gallery part, 2) a "<strong>template</strong>" hook, which lets you record/update the template used to generate the HTML markup, and 3) a "<strong>parse</strong>" hook which lets you modify or replace the markup generated for a gallery part. The current hooks are:
1202
  </p>
1492
  </p>
1493
  <table>
1494
  <tr>
 
1495
  <td class="mla-doc-table-label">mla_link_attributes</td>
1496
  <td>adds one or more HTML attributes to the hyperlink for each item; see below</td>
1497
  </tr>
1532
  All but the "mla_target" parameter support the <a href="#tag_cloud_markup_parameters">Markup</a>, <a href="#tag_cloud_item_parameters">Item-specific</a>, <a href="#tag_cloud_variable_parameters">Field-level</a> and <a href="#mla_template_parameters">Content Template</a> substitution parameters defined for Markup Templates. For example, if you code "<code>mla_rollover_text='{+slug+} : {+rollover_text+}'</code>, the rollover text will contain the term slug, a colon, and the appropriate "single text" or "multiple text". Simply add "{+" before the substitution parameter name and add "+}" after the name. Note that the enclosing delimiters are different than those used in the templates, since the WordPress shortcode parser reserves square brackets ("[" and "]") for its own use.
1533
  </p>
1534
  <p>
1535
+ The "mla_link_href" parameter is a great way to change the destination your cloud item links to and/or add arguments to the link for later processing. For example, to make a gallery item link back to the current page/post you can code: <code>mla_link_href='{+page_url+}'</code>. You can also add arguments to the link, e.g., <code>mla_link_href='{+page_url+}?firstarg=value1&amp;amp;myarg=myvalue'</code>. Note the use of the HTML entity name "&amp;amp;" to put an ampersand in the value; the WordPress "visual" post editor will replace "&amp;", "&lt;" and ">" with "&amp;amp;", "&amp;lt;" and "&amp;gt;" whether you like it not. The <strong>only</strong> markup parameters modified by this parameter are "link_url" and "thelink". The markup parameters "viewlink" and "editlink" are not modified.
1536
  </p>
1537
  <p>
1538
  The "mla_link_attributes" parameter accepts any value and adds it to the "&lt;a&gt;" or "&lt;span&gt;" tags for the item. For example, you can add a unique identifier to each item by adding <code>mla_link_attributes='id="{+selector}-{+index+}"'</code> to your shortcode (note the use of single quotes around the parameter value and the double quotes within the parameter). <strong>IMPORTANT:</strong> since the shortcode parser reserves square brackets ("[" and "]") for its own use, <strong>you must substitute curly braces for square brackets</strong> if your attributes require brackets. If you must code a curly brace in your attribute value, preface it with <strong>two backslash characters</strong>, e.g., "\\{" or "\\}". If you code an attribute already present in the tag, your value will override the existing value.
1643
  <h4>Tag Cloud Substitution Parameters</h4>
1644
  <p>
1645
  Substitution parameters are a powerful way to add general and attachment-specific values to the gallery display. For example, if you code "<code>mla_link_href="{+page_url+}?current_id={+term_id+}&amp;mla_cloud_current={+request:mla_cloud_current+}"</code>, the hyperlinks behind each cloud term will contain the page URL and the taxonomy term ID. There are many parameter names like `page_url` and `term_id` divided in several categories:
1646
+ </p>
1647
  <table>
1648
  <tr>
1649
  <td class="mla-doc-table-label">Cloud-specific</td>
1658
  <td>values that are known at the beginning of cloud output processing and remain the same for the entire cloud</td>
1659
  </tr>
1660
  <tr>
1661
+ <td class="mla-doc-table-label"><a href="#tag_cloud_item_parameters">Item-specific</a></td>
1662
  <td style="vertical-align: top">values that change for each term/item in the cloud, such as Name and Description</td>
1663
  </tr>
1664
  <tr>
1670
  <td>lets you compose a value from multiple substitution parameters and test for empty values, choose among two or more alternatives or suppress output entirely</td>
1671
  </tr>
1672
  </table>
1673
+ <p>
1674
  The following paragraphs go into more detail about each category and the parameter names within them.
1675
  </p>
1676
  <p>
1678
  </p>
1679
  <p>
1680
  <strong>Cloud-specific substitution parameters</strong> are known at the beginning of shortcode processing and they do not change during processing. They can be used, for example, in any of the data selection parameters to change the items selected for the cloud based on information about the post/page on which the cloud appears. The cloud-specific substitution parameters are:
1681
+ </p>
1682
  <table>
1683
  <tr>
1684
  <td class="mla-doc-table-label">site_url</td>
1705
  <td style="vertical-align: top">the <code>ID</code> value of the post/page in which the cloud appears</td>
1706
  </tr>
1707
  <tr>
 
1708
  <td class="mla-doc-table-label">page_author</td>
1709
  <td>the <code>post_author</code> value of the post/page in which the cloud appears</td>
1710
  </tr>
1769
  <tr>
1770
  <td class="mla-doc-table-label">query</td>
1771
  <td>The parameters defined in the <code>[mla_tag_cloud]</code> shortcode. For example, if your shortcode is <code>[mla_tag_cloud taxonomy=attachment_tag div-class=some_class]</code> you can access the parameters as <code>[+query:taxonomy+]</code> and <code>[+query:div-class+]</code> respectively. You can define your own parameters, e.g., "div-class"; they will be accessible as field-level data but will otherwise be ignored.</td>
1772
+ </tr>
1773
  <tr>
1774
  <td class="mla-doc-table-label">template</td>
1775
  <td>A Content Template, which lets you compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing output entirely. See the <a href="#mla_template_parameters">Content Templates</a> section for details. Note that the formatting option is not supported for content templates.</td>
1991
  <td class="mla-doc-table-label">rollover_text</td>
1992
  <td>the "title" attribute value, drawn from single_text/multiple_text or the mla_rollover_text parameters</td>
1993
  </tr>
1994
+ <tr>
1995
  <td class="mla-doc-table-label">link_style</td>
1996
  <td>the CSS "style" attribute, drawn from the font_size and unit parameters</td>
1997
  </tr>
2023
  <h4>Tag Cloud Pagination Parameters</h4>
2024
  <p>
2025
  If you have a large number of terms in your cloud taxonomy you may want to paginate the cloud display, i.e., divide the cloud into two or more pages of a reasonable size. Pagination support for <code>[mla_tag_cloud]</code> is modeled on similar functions for<code>[mla_gallery]</code>, and you can find more explanation of the ideas behind pagination in the <a href="#mla_output_parameter"><strong>Support for Alternative Gallery Output, e.g., Pagination</strong></a> section. Five parameters are supplied for this purpose:
2026
+ </p>
2027
  <table>
2028
  <tr>
2029
  <td class="mla-doc-table-label">limit</td>
2048
  </table>
2049
  <p>
2050
  The <code>[mla_tag_cloud]</code> shortcode can be used to provide "Previous" and "Next" links that support moving among the individual items in a cloud or among cloud "pages". For example, if you have many terms in your Att. Category or Att. Tag taxonomies you can build a term-specific <code>[mla_gallery]</code> page with links to the previous/next term in the taxonomy (a complete pagination example is included below). You can also build a page that shows a large taxonomy in groups, or "cloud pages", of ten terms with links to the previous/next ten terms or links to all of the cloud pages of terms in the taxonomy.
2051
+ </p>
2052
  <p>
2053
  The <strong>"mla_output"</strong> parameter determines the type of output the shortcode will return. For pagination output, you can choose from six values:
2054
  </p>
2057
  <td class="mla-doc-table-label">next_link</td>
2058
  <td>returns a link to the next cloud item, based on the "term_id" parameter value. The optional "<strong>,wrap</strong>" qualifier determines what happens at the end of the cloud. If you omit the qualifier, an empty string is returned for the "next_link" from the last item. If you code the ",wrap" qualifier, the "next_link" from the last item will be to the first item.</td>
2059
  </tr>
2060
+ <tr>
2061
  <td class="mla-doc-table-label">current_link</td>
2062
  <td>returns a link to the current cloud item, based on the "term_id" parameter value. This gives you an easy way to provide a visual indication of where you are within the taxonomy. The "span" and "none" link formats are often used with this mla_output type.</td>
2063
  </tr>
2149
  </p>
2150
  <h4>MLA Tag Cloud Filters (Hooks)</h4>
2151
  <p>
2152
+ The <code>[mla_tag_cloud]</code> shortcode supports a comprehensive set of filters that give you complete control over cloud composition from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Gallery Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Tag+Cloud+Hooks+Example%22" class="mla-doc-bold-link">MLA Tag Cloud Hooks Example</a>. To run the example:
2153
+ </p>
2154
  <ol>
2155
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
2156
  <li>Hover over "MLA Tag Cloud Hooks Example" in the Name column, then click the "Install" rollover action.</li>
2158
  <li>Create a new <code>[mla_tag_cloud]</code> shortcode or modify an existing shortcode, adding the <code>my_filter="color cloud"</code> parameter to activate the example output.</li>
2159
  <li>View the post or page on which the modified shortcode appears to see a tag cloud with a range of colors applied to the terms.</li>
2160
  </ol>
 
2161
  <p>
2162
  The example code documents each hook with comments in the filter/action function that intercepts the hook. Generally, each part of the cloud supports three hooks: 1) a "<strong>values</strong>" hook, which lets you record or update the substitution values for that cloud part, 2) a "<strong>template</strong>" hook, which lets you record/update the template used to generate the HTML markup, and 3) a "<strong>parse</strong>" hook which lets you modify or replace the markup generated for a cloud part. The current hooks are:
2163
  </p>
2459
  </p>
2460
  <table>
2461
  <tr>
 
2462
  <td class="mla-doc-table-label">mla_link_attributes</td>
2463
  <td>adds one or more HTML attributes to the hyperlink for each item; see below</td>
2464
  </tr>
2495
  All but the "mla_target" parameter support the <a href="#term_list_markup_parameters">Markup</a>, <a href="#term_list_item_parameters">Item-specific</a>, <a href="#term_list_variable_parameters">Field-level</a> and <a href="#mla_template_parameters">Content Template</a> substitution parameters defined for Markup Templates. For example, if you code "<code>mla_rollover_text='{+slug+} : {+rollover_text+}'</code>, the rollover text will contain the term slug, a colon, and the appropriate "single text" or "multiple text". Simply add "{+" before the substitution parameter name and add "+}" after the name. Note that the enclosing delimiters are different than those used in the templates, since the WordPress shortcode parser reserves square brackets ("[" and "]") for its own use.
2496
  </p>
2497
  <p>
2498
+ The "mla_link_href" parameter is a great way to change the destination your list item links to and/or add arguments to the link for later processing. For example, to make a gallery item link back to the current page/post you can code: <code>mla_link_href='{+page_url+}'</code>. You can also add arguments to the link, e.g., <code>mla_link_href='{+page_url+}?firstarg=value1&amp;amp;myarg=myvalue'</code>. Note the use of the HTML entity name "&amp;amp;" to put an ampersand in the value; the WordPress "visual" post editor will replace "&amp;", "&lt;" and ">" with "&amp;amp;", "&amp;lt;" and "&amp;gt;" whether you like it not. The <strong>only</strong> markup parameters modified by this parameter are "link_url" and "thelink". The markup parameters "currentlink", "viewlink" and "editlink" are not modified.
2499
  </p>
2500
  <p>
2501
  The "mla_link_attributes" parameter accepts any value and adds it to the "&lt;a&gt;" or "&lt;span&gt;" tags for the item. For example, you can add a unique identifier to each item by adding <code>mla_link_attributes='id="{+selector}-{+index+}"'</code> to your shortcode (note the use of single quotes around the parameter value and the double quotes within the parameter). <strong>IMPORTANT:</strong> since the shortcode parser reserves square brackets ("[" and "]") for its own use, <strong>you must substitute curly braces for square brackets</strong> if your attributes require brackets. If you must code a curly brace in your attribute value, preface it with <strong>two backslash characters</strong>, e.g., "\\{" or "\\}". If you code an attribute already present in the tag, your value will override the existing value.
2519
  </tr>
2520
  <tr>
2521
  <td class="mla-doc-table-label">mla_option_value</td>
2522
+ <td>replaces the <strong>term_id (default)</strong> value returned for each option. For <strong>dropdown</strong> controls containing terms from multiple taxonomies, the default is <strong><code>[+taxonomy+].[+term_id+]</code></strong>.</td>
2523
  </tr>
2524
  <tr>
2525
  <td class="mla-doc-table-label">hide_if_empty</td>
2526
+ <td>If <strong>false (default)</strong>, display a control with "option_none" text &amp; value. If true, display mla_nolink_text or nothing.</td>
2527
  </tr>
2528
  <tr>
2529
  <td class="mla-doc-table-label">mla_nolink_text</td>
2582
  <h4>Term List Other Parameters</h4>
2583
  <table>
2584
  <tr>
 
2585
  <td class="mla-doc-table-label">mla_debug</td>
2586
  <td>controls debug log output; <strong>default false</strong>. See below for details.</td>
2587
  </tr>
2720
  <td>values that are known at the beginning of list output processing and remain the same for the entire list</td>
2721
  </tr>
2722
  <tr>
2723
+ <td class="mla-doc-table-label"><a href="#term_list_item_parameters">Item-specific</a></td>
2724
  <td style="vertical-align: top">values that change for each term/item in the list, such as Name and Description</td>
2725
  </tr>
2726
  <tr>
2740
  </p>
2741
  <p>
2742
  <strong>list-specific substitution parameters</strong> are known at the beginning of shortcode processing and they do not change during processing. They can be used, for example, in any of the data selection parameters to change the items selected for the list based on information about the post/page on which the list appears. The list-specific substitution parameters are:
2743
+ </p>
2744
  <table>
2745
  <tr>
2746
  <td class="mla-doc-table-label">site_url</td>
2767
  <td style="vertical-align: top">the <code>ID</code> value of the post/page in which the list appears</td>
2768
  </tr>
2769
  <tr>
 
2770
  <td class="mla-doc-table-label">page_author</td>
2771
  <td>the <code>post_author</code> value of the post/page in which the list appears</td>
2772
  </tr>
2834
  <tr>
2835
  <td class="mla-doc-table-label">query</td>
2836
  <td>The parameters defined in the <code>[mla_term_list]</code> shortcode. For example, if your shortcode is <code>[mla_term_list taxonomy=attachment_tag div-class=some_class]</code> you can access the parameters as <code>[+query:taxonomy+]</code> and <code>[+query:div-class+]</code> respectively. You can define your own parameters, e.g., "div-class"; they will be accessible as field-level data but will otherwise be ignored.</td>
2837
+ </tr>
2838
  <tr>
2839
  <td class="mla-doc-table-label">template</td>
2840
  <td>A Content Template, which lets you compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing output entirely. See the <a href="#mla_template_parameters">Content Templates</a> section for details. Note that the formatting option is not supported for content templates.</td>
3025
  <td class="mla-doc-table-label">rollover_text</td>
3026
  <td>the "title" attribute value, drawn from single_text/multiple_text or the mla_rollover_text parameters</td>
3027
  </tr>
3028
+ <tr>
3029
  <td class="mla-doc-table-label">link_style</td>
3030
  <td>the CSS "style" attribute, drawn from the font_size and unit parameters</td>
3031
  </tr>
3071
  [mla_gallery]<br />
3072
  attachment_category="{+template:({+request:tax_input.attachment_category+}|no-term-selected)+}"<br />
3073
  posts_per_page=3 mla_output="paginate_links,prev_next"<br />
3074
+ mla_link_href='{+new_url+}?mla_paginate_current={+new_page+}&amp;tax_input[attachment_category]="{+query:attachment_category,text+}"'<br />
3075
  [/mla_gallery]<br />
3076
  &nbsp;<br />
3077
  [mla_gallery attachment_category="{+template:({+request:tax_input.attachment_category+}|no-term-selected)+}" posts_per_page=3 mla_caption="{+title+} : {+description+}" mla_nolink_text="&lt;br&gt;Select a term to display the gallery.&lt;br&gt;"]
3090
  </p>
3091
  <h4>MLA Term List Filters (Hooks)</h4>
3092
  <p>
3093
+ The <code>[mla_term_list]</code> shortcode supports a comprehensive set of filters that give you complete control over list composition from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Term List Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Term+List+Hooks+Example%22" class="mla-doc-bold-link">MLA Term List Hooks Example</a>. To run the example:
3094
+ </p>
3095
  <ol>
3096
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
3097
  <li>Hover over "MLA Term List Hooks Example" in the Name column, then click the "Install" rollover action.</li>
3099
  <li>Create a new <code>[mla_term_list]</code> shortcode or modify an existing shortcode, adding the <code>my_filter="color list"</code> parameter to activate the example output.</li>
3100
  <li>View the post or page on which the modified shortcode appears to see a term list with a range of colors applied to the terms.</li>
3101
  </ol>
 
3102
  <p>
3103
  The example code documents each hook with comments in the filter/action function that intercepts the hook. Generally, each part of the list supports three hooks: 1) a "<strong>values</strong>" hook, which lets you record or update the substitution values for that list part, 2) a "<strong>template</strong>" hook, which lets you record/update the template used to generate the HTML markup, and 3) a "<strong>parse</strong>" hook which lets you modify or replace the markup generated for a list part. The current hooks are:
3104
  </p>
3155
  <a name="simple_examples"></a>
3156
  </p>
3157
  <h4>Simple Examples</h4>
 
3158
  <ul class="mla_settings">
3159
  <li><code>[mla_gallery]</code> - will display all the images "attached" to the current post/page.</li>
3160
  <li><code>[mla_gallery ids="1,3,2,4"]</code> - will display specific images on any post/page. The numbers are the ID values of the images. You can use the "Add Media..." popup window and "Create Gallery" to get the list, then change the shortcode name to "mla_gallery" if you want to add other <code>[mla_gallery]</code> specific parameters.</li>
3163
  <li><code>[mla_gallery post_parent=all post_mime_type="audio,video"]</code> - will display all the audio and video documents in your Media Library.</li>
3164
  <li><code>[mla_gallery post_parent=all post_mime_type=application/pdf size=icon link=file]</code> - will display all the PDF documents in your Media Library. The "PDF icon" will display in place of the thumbnail. When the icon is clicked, the document itself will be displayed in the browser.</li>
3165
  </ul>
 
3166
  <p>
3167
  Perhaps the most popular Media Library Assistant feature is the ability to assign category and tag values to Media Library Items and use the values to filter a gallery display. "Categories" and "Tags" are built-in WordPress "taxonomies" and have been used for a long time to organize posts and pages. WordPress does not have built-in support for using them with attachments and that was one of the original motivations for MLA.
3168
  </p>
3185
  <h4>A Paginated Gallery</h4>
3186
  <p>
3187
  If your gallery display includes a large number of items it may be useful to divide the display into "pages" with a fixed upper limit of items per page. The <a href="#mla_output_parameter"><strong>Support for Alternative Gallery Output, e.g., Pagination</strong></a> section explains several ways to do that; here is one example. Put <strong>both of these shortcodes</strong> on a post or page to display a paginated gallery:
3188
+ </p>
3189
  <blockquote>
3190
  <code>[mla_gallery attachment_category=big-dog posts_per_page=12]</code><br />
3191
  &nbsp;<br />
3192
  <code>[mla_gallery attachment_category=big-dog posts_per_page=12 mla_output="paginate_links,prev_next"]</code>
3193
  </blockquote>
 
3194
  <p>
3195
  Note that <strong>two shortcodes are required</strong>; one for the gallery display and a second one for the pagination controls. The first <code>[mla_gallery]</code> displays the images assigned to <code>attachment_category=big-dog</code> and displays a maximum of 12 images at once. The second <code>[mla_gallery]</code> has <strong>exactly the same</strong> data selection parameter and posts per page parameter; that's essential to match up with the first shortcode. It adds one more parameter, <code>mla_output</code>. This parameter changes the display from a set of images to a set of pagination controls.
3196
  </p>
3201
  <h4>Tag Cloud and Gallery</h4>
3202
  <p>
3203
  Adding the "taxonomy=term" parameter to your shortcode is all well and good, but letting the viewer choose a term when they view the post/page is often better. One easy way to do this is to add the <code>[mla_tag_cloud]</code> shortcode. Here is a simple combination of a cloud and a gallery display:
3204
+ </p>
3205
  <blockquote>
3206
  <code>[mla_tag_cloud taxonomy=attachment_category number=0 mla_link_href="{+page_url+}?term_slug={+slug+}"]</code><br />
3207
  &nbsp;<br />
3208
  <code>[mla_gallery attachment_category="{+template:({+request:term_slug+}|a-bad-term)+}" mla_nolink_text="Click a term to display the gallery."]</code>
3209
  </blockquote>
 
3210
  <p>
3211
  The <code>[mla_tag_cloud]</code> displays Att. Categories terms in the familiar cloud format. The <code>number=0</code> parameter ensures that all of the terms are displayed. The <code>mla_link_href</code> parameter links each term back to the current page (<code>{+page_url}</code>) and passes a variable back with the term selection (<code>?term_slug={+slug+}</code>). If you put the <code>[mla_tag_cloud]</code> shortcode on another page or in a widget you will have to hard-code the URL portion of the link.
3212
  </p>
3222
  </ul>
3223
  <p>
3224
  You can read more about templates in the <a href="#mla_template_parameters">Content Templates</a> section. You can paginate your gallery by adding a third shortcode to the post/page. Put the new shortcode between the cloud and gallery so the pagination controls will appear above the gallery display:
3225
+ </p>
3226
  <blockquote>
3227
  <code>[mla_tag_cloud taxonomy=attachment_category number=0 mla_link_href="{+page_url+}?term_slug={+slug+}"]</code><br />
3228
  &nbsp;<br />
3230
  &nbsp;<br />
3231
  <code>[mla_gallery attachment_category="{+template:({+request:term_slug+}|a-bad-term)+}" posts_per_page=12 mla_nolink_text="Click a term to display the gallery."]</code>
3232
  </blockquote>
 
3233
  <p>
3234
  The <code>posts_per_page=12</code> parameter has been added to the gallery display shortcode (the third shortcode). A new <code>[mla_gallery]</code> is added to display the pagination controls. The data selection parameter and <code>posts_per_page=12</code> parameter match the gallery display shortcode below it. The <code>mla_output</code> parameter displays the pagination controls. Finally, the <code>mla_link_href="{+page_url+}?term_slug={+request:term_slug+}"</code> parameter is added so the pagination controls pass the <code>term_slug</code> from page to page.
3235
  <a name="search_form_and_gallery"></a>
3237
  <h4>Search Form and Gallery</h4>
3238
  <p>
3239
  A common alternative to the taxonomy filtering in the previous examples is a keyword-based search. This example shows a simple HTML form with a text box and a button to run the search. The user can enter one or more words to search for in the Title or Description of Media Library items, then click "Search" to display a gallery of matching images:
3240
+ </p>
3241
  <blockquote>
3242
  <code>&lt;form id="mla-search-form" action="." method="post"><br />
3243
  &lt;input id="mla-search-box" name="search-string" type="text" value="" />&amp;nbsp;&lt;input id="submit" name="submit" type="submit" value="Search" /><br />
3245
  &nbsp;<br />
3246
  <code>[mla_gallery s="{+template:({+request:search-string+}|a-bad-term)+}" mla_nolink_text="Enter a search value above to display gallery."]</code>
3247
  </blockquote>
 
3248
  <p>
3249
  In this example the <code>name="search-string"</code> parameter is passed from the form to the <code>s="{+request:search-string+}</code>... parameter in the shortcode. As in the Cloud and Gallery example a Content Template is used to supply <code>a-bad-term</code> before the form is completed, which displays an empty gallery because it doesn't match anything. You can find more information on the <code>s=</code> parameter and other search parameters in the <a href="#search_keywords">Keyword(s) Search</a> section.
3250
+ </p>
3251
  <p>
3252
  As in the Cloud and Gallery example, paginating your gallery display requires a slight modification of the <code>[mla_gallery]</code> shortcode (at the bottom of the next example) and adding a second <code>[mla_gallery]</code> shortcode (in the middle of the next example) to display the pagination controls:
3253
+ </p>
3254
  <blockquote>
3255
  <code>&lt;form id="mla-search-form" action="." method="post"><br />
3256
  &lt;input id="mla-search-box" name="search-string" type="text" value="" />&amp;nbsp;&lt;input id="submit" name="submit" type="submit" value="Search" /><br />
3260
  &nbsp;<br />
3261
  <code>[mla_gallery s="{+template:({+request:search-string+}|a-bad-term)+}" mla_nolink_text="Enter a search value above to display gallery." posts_per_page=12]</code>
3262
  </blockquote>
 
3263
  <p>
3264
  The <code>posts_per_page=12</code> parameter has been added to the gallery display shortcode (the third shortcode). A new <code>[mla_gallery]</code> is added to display the pagination controls. The data selection parameter (<code>s="{+request:search-string+}</code>...) and <code>posts_per_page=12</code> parameter match the gallery display shortcode below it. The <code>mla_output</code> parameter displays the pagination controls. Finally, the <code>mla_link_href="{+page_url+}?search-string={+request:search-string+}"</code> parameter is added so the pagination controls pass the <code>search-string</code> from page to page.
3265
  <a name="mla_output_parameter"></a>
3266
+ </p>
3267
  <p>
3268
  <a href="#backtotop">Go to Top</a>
3269
  </p>
3287
  <td class="mla-doc-table-label">next_link</td>
3288
  <td>returns a link to the next gallery item. The optional "<strong>,wrap</strong>" qualifier determines what happens at the end of the gallery. If you omit the qualifier, an empty string is returned for the "next_link" from the last item in the gallery. If you code the ",wrap" qualifier, the "next_link" from the last item will be to the first gallery item.</td>
3289
  </tr>
3290
+ <tr>
3291
  <td class="mla-doc-table-label">current_link</td>
3292
  <td>returns a link to the current gallery item. This gives you an easy way to provide a visual indication of where you are within the overall gallery. The "span" and "none" link formats are often used with this mla_output type.</td>
3293
  </tr>
3332
  </p>
3333
  <code>
3334
  [mla_gallery columns=1 ids="{+request:current_id+}" size=medium]
3335
+ <br />&nbsp;<br />
3336
  &lt;div style="clear: both; float: left"&gt;<br />
3337
+ [mla_gallery mla_output="previous_link,wrap" mla_link_text='&amp;larr; Previous Sample' attachment_tag="{+request:attachment_tag+}" id="{+request:current_id+}" mla_rollover_text="{+title+}" mla_link_href="{+page_url+}?current_id={+attachment_ID+}&amp;attachment_tag={+query:attachment_tag+}"]<br />
3338
+ &lt;/div&gt;<br />
3339
+ &lt;div style="float: right"&gt;<br />
3340
+ [mla_gallery mla_output="next_link,wrap" mla_link_text='Next Sample &amp;rarr;' attachment_tag="{+request:attachment_tag+}" id="{+request:current_id+}" mla_rollover_text="{+title+}" mla_link_href="{+page_url+}?current_id={+attachment_ID+}&amp;attachment_tag={+query:attachment_tag+}"]<br />
3341
  &lt;/div&gt;
3342
  </code>
3343
  <p>
3517
  </p>
3518
  <code>
3519
  [mla_gallery attachment_tag="sample" posts_per_page=10 mla_caption="{+title+}"]
3520
+ <br />&nbsp;<br />
3521
  &lt;div style="clear: both; float: left"&gt;<br />
3522
+ [mla_gallery attachment_tag="sample" posts_per_page=10 mla_output="previous_page,first" mla_link_text='&amp;larr; Previous Gallery Page' mla_rollover_text="Previous or first page for this tag"]<br />
3523
+ &lt;/div&gt;<br />
3524
+ &lt;div style="float: right"&gt;<br />
3525
+ [mla_gallery attachment_tag="sample" posts_per_page=10 mla_output="next_page,last" mla_link_text='&amp;larr; Next Gallery Page' mla_rollover_text="Next or last page for this tag"]<br />
3526
  &lt;/div&gt;
3527
  </code>
3528
  <p>
3566
  </p>
3567
  <code>
3568
  [mla_gallery attachment_tag="sample" posts_per_page=10 mla_caption="{+title+}"]
3569
+ <br />&nbsp;<br />
3570
+ [mla_gallery attachment_tag="sample" posts_per_page=10 mla_output="paginate_links,prev_next" mla_nolink_text='No Gallery Pages']<br />
3571
  </code>
3572
  <p>
3573
  This example is even simpler that the two earlier examples because there's just one additional <code>[mla_gallery]</code> shortcode for pagination links.
 
3574
  <a name="alt_shortcode"></a>
3575
+ </p>
3576
  <p>
3577
  <a href="#backtotop">Go to Top</a>
3578
  </p>
3640
  </p>
3641
  <p>
3642
  <strong>NOTE:</strong> When you use "mla_alt_shortcode" to pass format/display responsibility off to another shortcode you will lose the <code>[mla_gallery]</code> Gallery Display Style (e.g. "mla_float") and Gallery Display Content (e.g. "mla_caption") parameters. There is no reliable way for <code>[mla_gallery]</code> to pass this information on to the other shortcode you've specified.
 
 
3643
  <a name="photonic_gallery"></a>
3644
+ </p>
3645
  <p>
3646
  <a href="#backtotop">Go to Top</a>
3647
  </p>
3697
  <h4>Gallery-specific Substitution Parameters</h4>
3698
  <p>
3699
  Gallery-specific substitution parameters are known at the beginning of shortcode processing and they do not change during processing. They can be used, for example, in any of the data selection parameters to change the items selected for the gallery based on information about the post/page on which the gallery appears. The gallery-specific substitution parameters are:
3700
+ </p>
3701
  <table>
3702
  <tr>
3703
  <td class="mla-doc-table-label">site_url</td>
3724
  <td style="vertical-align: top">the <code>ID</code> value of the post/page in which the gallery appears</td>
3725
  </tr>
3726
  <tr>
 
3727
  <td class="mla-doc-table-label">page_author</td>
3728
  <td>the <code>post_author</code> value of the post/page in which the gallery appears</td>
3729
  </tr>
3776
  <td>absolute URL to the page or post on which the gallery appears, if any, with trailing slash</td>
3777
  </tr>
3778
  </table>
3779
+ <a name="mla_style_parameters"></a>&nbsp;
 
3780
  <p>
3781
  <a href="#backtotop">Go to Top</a>
3782
  </p>
3876
  <td class="mla-doc-table-label">captiontag_content</td>
3877
  <td>if both captiontag and caption are not empty, contains the complete HTML markup for the caption. This can be used to omit empty tags (as it is in the default template).</td>
3878
  </tr>
3879
+ <tr>
3880
  <td class="mla-doc-table-label">excerpt</td>
3881
  <td>always contains post_excerpt</td>
3882
  </tr>
3920
  <td class="mla-doc-table-label">parent_date</td>
3921
  <td>upload date of the parent</td>
3922
  </tr>
3923
+ <tr>
3924
  <td class="mla-doc-table-label">parent_permalink</td>
3925
  <td>permalink to the parent</td>
3926
  </tr>
4029
  <td>for image/icon items, width of the gallery image/icon</td>
4030
  </tr>
4031
  <tr>
 
4032
  <td class="mla-doc-table-label">thumbnail_height</td>
4033
  <td>for image/icon items, height of the gallery image/icon</td>
4034
  </tr>
4174
  </p>
4175
  <h4>Prefix values</h4>
4176
  <p>
4177
+ There are fourteen prefix values for field-level parameters. Prefix values must be coded as shown; all lowercase letters.
4178
  </p>
4179
  <table>
4180
  <tr>
4294
  <td class="mla-doc-table-label">template</td>
4295
  <td>A Content Template, which lets you compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing output entirely. See the <a href="#mla_template_parameters">Content Templates</a> section for details. Note that the formatting option is not supported for templates.</td>
4296
  </tr>
4297
+ <tr>
4298
+ <td class="mla-doc-table-label">matches</td>
4299
+ <td>The matches prefix is part of MLA&rsquo;s <a href="#mla_regular_expressions">Regular Expression Features</a>. It allows you to access data sources created by applying the <code>,match(p)</code> and <code>,extract(p)</code> format/option values.</td>
4300
+ </tr>
4301
  </table>
4302
  <a name="field_level_formats"></a>
4303
  &nbsp;<br />
4339
  </tr>
4340
  <tr>
4341
  <td class="mla-doc-table-label">,attr</td>
4342
+ <td>If you use a substitution parameter in an HTML attribute such as the <code>title</code> attribute of a hyperlink (<code>a</code>) or <code>img</code> tag you can add the ",attr" option to encode the &lt;, >, &amp;, " and ' (less than, greater than, ampersand, double quote and single quote) characters.</td>
4343
  </tr>
4344
  <tr>
4345
  <td class="mla-doc-table-label">,url</td>
4371
  </tr>
4372
  </table>
4373
  <p>
4374
+ Three values let you use powerful regular expressions to apply patterns to any data source, extracting or replacing pieces of it. These three values are explained in detail, with examples, in the <a href="#mla_regular_expressions">Regular Expression Features</a> section below. They are:
4375
+ </p>
4376
+ <table>
4377
+ <tr>
4378
+ <td class="mla-doc-table-label" style="white-space:nowrap"><a href="#mla_regular_expressions_match">,match(p)</a></td>
4379
+ <td>This format/option value looks for a match of its pattern (and optional subpatterns) in the data source. If a match is found, that portion of the data source is returned. If the pattern is not matched an empty value is returned. Any pattern or subpattern matches found are stored for later access using the "matches:" prefix.
4380
+ </td>
4381
+ </tr>
4382
+ <tr>
4383
+ <td class="mla-doc-table-label" style="white-space:nowrap"><a href="#mla_regular_expressions_extract">,extract(p,v)</a></td>
4384
+ <td>This format/option value looks for a match of its pattern (and optional subpatterns) (the p paremeter) in the data source. Any pattern or subpattern matches found are stored for later access using the "matches:" prefix. An empty value is returned by default but this can be changed with the optional second (v) parameter.
4385
+ </td>
4386
+ </tr>
4387
+ <tr>
4388
+ <td class="mla-doc-table-label" style="white-space:nowrap"><a href="#mla_regular_expressions_replace">,replace(p,r,v)</a></td>
4389
+ <td>This format/option value looks for a match of its pattern (p) (and optional subpatterns) in the data source. By default, if a match is found, the replacement (r) pattern is used to return a modified version of the data source. If the pattern is not matched the original data source value is returned. The default can be changed with the optional third (v) parameter.
4390
+ </td>
4391
+ </tr>
4392
+ </table>
4393
  <a name="field_level_data_sources"></a>&nbsp;
4394
  <p>
4395
  <a href="#backtotop">Go to Top</a>
4557
  <td class="mla-doc-table-label">size_dimensions</td>
4558
  <td>image dimensions for thumbnail versions of the image, e.g., "150x150, 300x225, 600x288"</td>
4559
  </tr>
4560
+ <tr>
4561
  <td class="mla-doc-table-label">size_name[size]</td>
4562
  <td>image file name for a specific thumbnail version, e.g., size_name[medium] = "image-300x225.jpg"; set to empty string if the specified size does not exist. There will be a [size] choice for every thumbnail version registered with WordPress for the site.</td>
4563
  </tr>
4570
  <td>image size in pixels for a specific thumbnail version, e.g., size_pixels[medium] = "67500"</td>
4571
  </tr>
4572
  <tr>
 
4573
  <td class="mla-doc-table-label" style="width: 12em">size_dimensions[size]</td>
4574
  <td style="padding-bottom: 2em;">image dimensions for a specific thumbnail version, e.g., size_dimensions[medium] = "300x225"; set to empty string if the specified size does not exist. There will be a [size] choice for every thumbnail version registered with WordPress for the site.</td>
4575
  </tr>
4582
  <td>for "attached" (post_parent not zero) objects, post type of the parent object</td>
4583
  </tr>
4584
  <tr>
 
4585
  <td class="mla-doc-table-label">parent_title</td>
4586
  <td>for "attached" (post_parent not zero) objects, post title of the parent object</td>
4587
  </tr>
4588
  <tr>
 
4589
  <td class="mla-doc-table-label">parent_issues</td>
4590
  <td>summary of parent status (only) "issues", e.g., bad parent, invalid parent, unattached</td>
4591
  </tr>
5067
  <td class="mla-doc-table-sublabel">The geodetic survey data used by the GPS receiver</td>
5068
  </tr>
5069
  </table>
5070
+ <a name="pdf_metadata"></a>&nbsp;
 
5071
  <p>
5072
  <a href="#backtotop">Go to Top</a>
5073
  </p>
5115
  </table>
5116
  <p>
5117
  More recent versions of the specification add a second source of metadata, Metadata Streams, holding data defined by the <a href="https://www.adobe.com/products/xmp/" title="Adobe XMP site" target="_blank">Extensible Metadata Platform (XMP)</a> framework. XMP metadata varies from document to document but is often extensive. MLA provides access to this data in four ways:
5118
+ </p>
5119
  <ol>
5120
  <li>
5121
  If a D.I.D. field is not stored in the document, MLA will copy appropriate values from the XMP data into the empty field to populate it as often as possible. For example, the "creator" value(s) in the "dc" namespace ("dc.creator") might be copied to an empty "Author" field, or the "dc.subject" value(s) might be copied to an empty Keywords field.
5130
  For consistency with other file types, all XMP data found in a PDF document is also available with the "xmp:" prefix.
5131
  </li>
5132
  </ol>
 
5133
  <p>
5134
  MLA adds five fields of its own to the metadata information:
5135
  </p>
5155
  <td>a special "pseudo value" that returns a string representation of all the metadata. You can use this pseudo-value to examine the metadata in a document, find field names and see what values are present.</td>
5156
  </tr>
5157
  </table>
5158
+ <a name="substitution_parameter_filters"></a>&nbsp;
 
5159
  <p>
5160
  <a href="#backtotop">Go to Top</a>
5161
  </p>
5162
  <h4>Field-level substitution parameter filters (Hooks)</h4>
5163
  <p>
5164
+ Field-level substitution parameters can be extended to include any data values your application requires. They are supported by a set of filters that enables PHP code in your theme or in another plugin to create data values and make them available to MLA. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Substitution Parameter Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Substitution+Parameter+Hooks+Example%22" class="mla-doc-bold-link">MLA Substitution Parameter Hooks Example</a>. To run the example:
5165
+ </p>
5166
  <ol>
5167
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5168
  <li>Hover over "MLA Substitution Parameter Hooks Example" in the Name column, then click the "Install" rollover action.</li>
5230
  </p>
5231
  <p>
5232
  Conditional, choice and template elements can be nested as needed. For example, a conditional element can have a choice element within it or a choice alternative could include a conditional. Here's an example:
5233
+ </p>
5234
+ <p>
5235
+ <code>[+template: Terms: (([+terms:category+], [+terms:post_tag+])|[+ terms: category +]|[+terms:post_tag +]|none)+]</code>
5236
  </p>
5237
  <p>
5238
  This template has a String, "Terms: " and a Conditional, "(([+terms: ... none)". This Conditional separates the "Terms: " literal from the first alternative in the Choice. Within the Conditional is a Choice having four alternatives. The first alternative is a Conditional, which will be empty unless both categories and tags are present. The second and third alternatives handle the cases where one of the two taxonomies has terms, and the final alternative is used when neither categories nor tags are present.
5246
  </p>
5247
  <p>
5248
  <strong>In a shortcode parameter:</strong> If your template is coded in a shortcode parameter, preface the template delimiters with two backslash characters, e.g., "\\(". If you need a backslash in your template, code it as four backslash characters, i.e., "\\\\". The doubling of backslash characters is required because of the way WordPress processes shortcode parameters.
5249
+ <a name="mla_regular_expressions"></a>
5250
+ </p>
5251
+ <p>
5252
+ <a href="#backtotop">Go to Top</a>
5253
+ </p>
5254
+ <h3>Regular Expression Features</h3>
5255
+ <p>
5256
+ Regular Expressions is a formal name for a powerful pattern-matching tool you can use to extract parts of, for example, a file name and use the parts to compose or update a caption, title or other item element. Although they can get complicated pretty quickly regular expressions are well defined and even simple examples can be quite powerful. They are definitely a power tool! You can find a wealth of information on the web, such as these resources:
5257
+ </p>
5258
+ <ul class="mla_settings">
5259
+ <li><a href="https://en.wikipedia.org/wiki/Regular_expression" title="Wikipedia Article" target="_blank">Regular expression - Wikipedia</a></li>
5260
+ <li><a href="http://www.regular-expressions.info/" title="The Premier website about Regular Expressions" target="_blank">Regular-Expressions.info</a></li>
5261
+ <li><a href="http://php.net/manual/en/book.pcre.php" title="Official PHP Documentation for regular expressions" target="_blank">Regular Expressions (Perl-Compatible) in PHP</a></li>
5262
+ </ul>
5263
+ <p>
5264
+ The MLA regular expression features are simply a way to access a few of PHP's PCRE functions, so the last link above is particularly useful. The <a href="http://php.net/manual/en/pcre.examples.php" title="PCRE Examples" target="_blank">Examples</a> and <a href="http://php.net/manual/en/reference.pcre.pattern.syntax.php" title="Pattern Syntax" target="_blank">PCRE regex syntax</a> sections give you the details you need to build your expressions. The rest of this section describes how the PCRE functions are made available within MLA shortcodes, custom markup templates, mapping rules and the Bulk Edit area. Of course, they can be used within Content Templates in any of these areas as well.
5265
+ <a name="mla_regular_expressions_patterns"></a>
5266
+ </p>
5267
+ <h4>Patterns and subpatterns</h4>
5268
+ <p>
5269
+ Each regular expression defines a "pattern" that is applied to the subject, or data source. If the pattern is matched, that part of the data source is returned from the option/format value. Subpatterns allow you to take a portion of the overall pattern and return it separately. For example, you might construct a pattern that matches a date and include within the pattern subpatterns that return the year, month and day portions of the date. The pattern and subpattern matches are stored by MLA and become data sources you can access with the <code>matches:</code> field-level prefix. By default, the pattern match and any subpattern match(es) are assigned index numbers. The pattern is number zero and the subpatterns are numbered from one to the total number of subpatterns.
5270
+ </p>
5271
+ <p>
5272
+ For example, consider the <code>post_date</code> data source, the "Uploaded on" date and time for a Media Library item. This date is stored as a string with a specific format: "YYYY-MM-DD HH:MM:SS", e.g., "2013-10-03 02:47:13". You can match this value in many ways:
5273
+ </p>
5274
+ <ul class="mla_settings">
5275
+ <li><strong>/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/</strong> - matches the entire date and time, e.g., "2013-10-03 02:47:13"</li>
5276
+ <li><strong>/(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})/</strong> - matches the entire date and time (index 0) and matches two subpatterns, for the date portion (index 1) and the time portion (index 2)</li>
5277
+ <li><strong>/\d{4}-\d{2}-\d{2}/</strong> - matches the date portion, e.g., "2013-10-03"</li>
5278
+ <li><strong>/\d{2}:\d{2}:\d{2}/</strong> - matches the time portion, e.g., "02:47:13"</li>
5279
+ <li><strong>/(\d{4})-(\d{2})-(\d{2})/</strong> - matches the date portion (index 0) and matches three subpatterns for the year (index 1), month (index 2) and day (index 3) portions.</li>
5280
+ <li><strong>/(?&lt;year&gt;\d{4})-(?&lt;month&gt;\d{2})-(?&lt;day&gt;\d{2})/</strong> - matches the date portion (index 0) and matches three subpatterns for the year (index 1, name "year"), month (index 2, name "month") and day (index 3, name "day") portions.</li>
5281
+ </ul>
5282
+ <p>
5283
+ The last example is particularly useful, because named subpatterns let you give unique names to each piece of your data for later use with the <code>matches:</code> prefix. With only one pattern the index values are fine, but if you have more than one pattern the index numbers are reused so later patterns overwrite matches from earlier patterns.
5284
+ </p>
5285
+ <p>
5286
+ The patterns above contain backslash ('\') characters. When entering backslashes in an argument of the three option/format values below <strong>you must code two backslashes</strong> because the backslash is used in function arguments to escape special characters such as quotes (" ' "). The examples below show how this is done.
5287
+ <a name="mla_regular_expressions_match"></a>
5288
+ </p>
5289
+ <h4>The <code>,match(p)</code> option/format value</h4>
5290
+ <p>
5291
+ The <code>,match(p)</code> option/format value can be applied to any data source, including those specified by any of the field-level prefix values. The "p" argument is a regular expression pattern that is applied to the data source. If a match is found the portion of the data source that matches the pattern is returned. If no match is found and empty value is returned. Any pattern and subpattern matches are stored and made available as data sources accessed with the <code>matches:</code> field-level prefix.
5292
+ <a name="mla_regular_expressions_extract"></a>
5293
+ </p>
5294
+ <h4>The <code>,extract(p,v)</code> option/format value</h4>
5295
+ <p>
5296
+ The <code>,extract(p)</code> option/format value can be applied to any data source, including those specified by any of the field-level prefix values. The "p" argument is a regular expression pattern that is applied to the data source. By default, the <code>,extract(p)</code> option/format value <strong>returns an empty value</strong>; it's purpose is to collect pattern/subpattern matches for later use as data sources accessed with the <code>matches:</code> field-level prefix. You can change the returned value by adding the optional second "v" argument to specify any of the matched pattern or subpattern keys. For example, add zero ("0") to return the entire pattern, the index number of a subpattern or the name of a named subpattern.
5297
+ <a name="mla_regular_expressions_replace"></a>
5298
+ </p>
5299
+ <h4>The <code>,replace(p,r,v)</code> option/format value</h4>
5300
+ <p>
5301
+ The <code>,replace(p,r)</code> option/format value matches a pattern (like <code>,match(p)</code>) but returns a modified version of the original data source value. The "p" argument is a regular expression pattern that is applied to the data source. The "r" argument is a replacement pattern. If a match is found the data source modified by the replacement pattern is returned. If the match is not found, the original data source value is returned unaltered. For example, if a <code>post_date</code> data source contains "2013-10-03 02:47:13", then <code>[+post_date,replace( '/(\\d{4})-(\\d{2})-(\\d{2})/', 'year: $1, month: $2, day: $3' )+]</code> would return "year: 2013, month: 10, day: 03 02:47:13". Note the double backslashes in the pattern argument!
5302
+ Fund a SEP. Business owners and the self-employed can stash pretax money in a Simplified Employee Pension Plan. “Typically, you can contribute up to 20 percent of your net employment income,’’ says New Jersey-based Certified Public Accountant Barry Kleiman. While you have until April 17 to fund an IRA or Roth IRA, you can fund a SEP until Oct. 15 with a filing extension.To specify an array argument enclose the argument in braces ( "{" and "}" ) and separate elements with <strong>spaces</strong>. For a simple example, <code>,replace( {'/,/' '/-/'}, {' ' '_'} )</code> will change commas to spaces and dashes to underscores, while <code>,replace( {'/,/' '/-/'}, ' ' )</code> will change both commas <strong>and</strong> dashes to spaces.
5303
  </p>
5304
+ You can alter the value returned by adding the optional third "v" parameter set to "true". If you add this parameter the returned value will be just the matched portion of the original with the replacement modifications applied. For example, if a <code>post_date</code> data source contains "2013-10-03 02:47:13", then <code>[+post_date,replace( '/(\\d{4})-(\\d{2})-(\\d{2})/', 'year: $1, month: $2, day: $3', true )+]</code> would return "year: 2013, month: 10, day: 03". Note the double backslashes in the pattern argument!
5305
+ <p>
5306
+ </p>
5307
+ <p>
5308
+ Note that, unlike match and extract, the replace format/option value does not store its pattern or subpattern(s) for later use with the matches: prefix.
5309
+ <a name="mla_regular_expressions_matches"></a>
5310
+ </p>
5311
+ <h4>The <code>matches:</code> field-level prefix</h4>
5312
+ <p>
5313
+ The <code>matches:</code> field-level prefix lets you access the patterns and subpatterns matched by all of the match and extract format/option values that precede it in a shortcode, template or rule. For example, if you code <code>[+post_date,extract( '/(?&lt;year&gt;\\d{4})-(?&lt;month&gt;\\d{2})-(?&lt;day&gt;\\d{2})/' )+]</code> you can then code <code>[+matches:year+]</code> or <code>[+matches:1+]</code> (index 1) to access the year subpattern from the extract format/option.
5314
+ <a name="mla_regular_expressions_examples"></a>
5315
+ </p>
5316
+ <h4>Application Examples</h4>
5317
+ <p>
5318
+ Imagine that you have a photo archive where all the files are named with the date on which the image was taken, for example "2010.06.14 Death Valley Landscape.jpg". You would like to extract the date from the file name and use it to update the post_date (Uploaded on) date in the database. You'd also like to preserve the time portion of the current post_date so the items will sort in the order they were uploaded. You can define an IPTC/EXIF mapping rule to do this or use the Media/Assistant Bulk Edit area. In either place you can compose a Content Template to do the job:
5319
+ </p>
5320
+ <p>
5321
+ <code>template:[+name_only,extract( '/(?&lt;year&gt;\\d{4}).(?&lt;month&gt;\\d{2}).(?&lt;day&gt;\\d{2})/' )+]([+matches:year+]-[+matches:month+]-[+matches:day+] [+post_date,date( 'H:i:s' )+])</code>
5322
+ </p>
5323
+ <p>
5324
+ That looks complicated, so let&rsquo;s consider each part. The first part, <code>[+name_only,extract( ...</code>, extracts the three subparts of the date from the file name and stores them for later use. This part of the template returns an empty value, so it does not contribute to the new post_date value. The second part uses three <code>[+matches: ...</code> data sources to build a valid date separated by dashes. The third part returns just the time portion of the original post_date. The second and third part are surrounded by parentheses, so an empty value is returned when the date values are not found in the file name. That will leave the original post_date value intact for any items whose file names lack a date portion.
5325
+ </p>
5326
+ <p>
5327
+ Here is a somewhat shorter alternative:
5328
+ </p>
5329
+ <p>
5330
+ <code>template:[+name_only,extract( '/(?&lt;filedate&gt;\\d{4}.\\d{2}.\\d{2})/' )+]([+matches:filedate,str_replace( '.', '-' )+] [+post_date,date( 'H:i:s' )+])</code>
5331
+ </p>
5332
+ <p>
5333
+ In this alternative the first part extracts the complete date with its period separators. The second part reformats the date, replacing the periods with dashes. The third part is the same as in the first alternative.
5334
+ </p>
5335
+ <p>
5336
+ One subtle point. The period characters (".") separating the year, month and day portions of the pattern are actually one of the regular expression metacharacters; they will match any character in the subject. For example, they will match "2010/06/14" or "2010X06X14". Either of those values will cause the <code>str_replace()</code> function to fail. If you want to explicitly match a period, preface it with a backslash, e.g.:
5337
+ </p>
5338
+ <p>
5339
+ <code>template:[+name_only,extract( '/(?&lt;filedate&gt;\\d{4}\.\\d{2}\.\\d{2})/' )+]([+matches:filedate,str_replace( '.', '-' )+] [+post_date,date( 'H:i:s' )+])</code>
5340
+ </p>
5341
+ <p>
5342
+ Finally, here&rsquo;s a version that uses the <code>replace</code> value in a different way:
5343
+ </p>
5344
+ <p>
5345
+ <code>template:([+name_only,replace( '/(\\d{4})\.(\\d{2})\.(\\d{2})/','$1-$2-$3',true)+] [+post_date,date( 'H:i:s' )+])</code>
5346
+ </p>
5347
+ <p>
5348
+ In this version the first part matches the date at the beginning of the file name and replaces its period separators with dashes. It uses the thrid `true` argument to return just the matches/modified portion of the file name. The second part is the same as in the first alternative.
5349
+ </p>
5350
+ <p>
5351
+ As you can see, regular expressions require close attention to detail and they reward careful study of the documentation and examples in the PHP documentation and elsewhere. They are a power tool with sharp edges.
5352
  <a name="mla_text_widget"></a>
5353
+ </p>
5354
  <p>
5355
  <a href="#backtotop">Go to Top</a>
5356
  </p>
5357
  <h3>The MLA Text Widget</h3>
5358
  <p>
5359
  The MLA Text Widget lets you add content such as <code>[mla_gallery]</code> and <code>[mla_tag_cloud]</code> displays to your site's sidebars. It is an easy way to add slide shows and navigation features to all your pages. The MLA Text Widget is based on the WordPress Text widget, but adds the ability to include <strong>any</strong> shortcode to widget content. To use the MLA Text Widget:
5360
+ </p>
5361
  <ol>
5362
  <li>Go to the Appearance/Widgets Administration screen</li>
5363
  <li>Open the sidebar, footer, or Theme section to which you wish to add the Text Widget</li>
5364
  <li>Find the Text Widget in the list of Widgets</li>
5365
  <li>Click and drag the Widget to the spot you wish it to appear</li>
5366
  </ol>
 
5367
  <p>
5368
  To open and edit the MLA Text Widget:
5369
+ </p>
5370
  <ol>
5371
  <li>Click the down arrow to the right of the MLA Text Widget title</li>
5372
  <li>Set the MLA Text Widget Title (optional)</li>
5376
  <li>Click Close to close the Widget</li>
5377
  <li>Switch tabs in your browser and review the results; make changes if necessary</li>
5378
  </ol>
 
5379
  <p>
5380
  To add an <code>[mla_gallery]</code> or <code>[mla_tag_cloud]</code> shortcode to your widget, simply enter the shortcode name and parameters just as you would in the body of a post or page. Aside from the usually more limited area devoted to displaying the widget content, there are no differences in the way shortcodes are processed in the MLA Widget. Also, there is nothing special about the two MLA shortcodes; <strong>any</strong> shortcode can be added to the MLA Widget.
5381
  <a name="terms_search"></a>
5405
  </p>
5406
  <p>
5407
  Quote marks have another effect on the search; they restrict the match to a word boundary. For example, if you enter 'man' without enclosing quotes it will match "man" or "woman", because "<strong>man</strong>" appears as a part of "wo<strong>man</strong>". If you add quotes, i.e., ' "man" ', it will match "man" or "big man" but it will not match the "man" portion of "woman".
5408
+ </p>
5409
  <p>
5410
  In the unlikely event you need to match single or double quotes inside a phrase you can enter them as an escape sequence. Use <code>\47</code> for a single quote<code>\42</code> for a double quote.
5411
  </p>
 
5412
  <h4>Connecting multiple phrases</h4>
5413
+ <p>
5414
  The search is further defined by the connector used between multiple phrases:
5415
  </p>
5416
  <ul class="mla_settings">
5502
  The <a href="https://wordpress.org/plugins/codepress-admin-columns/" title="Admin Columns plugin directory page" target="_blank">Admin Columns</a> plugin allows you to customize columns on several admin-mode screens, including the MLA Media/Assistant submenu screen. All you have to do is install the plugin; MLA will detect its presence and automatically register the Media/Assistant submenu screen for support. With Admin Columns, you can:
5503
  </p>
5504
  <ul class="mla_settings">
5505
+ <li>Reorder columns with a simple drag &amp; drop interface.</li>
5506
  <li>Re-size columns to give more or less space to a column.</li>
5507
  <li>Remove (not just hide) columns from the submenu table.</li>
5508
  <li>Add new columns for custom fields and additional information.</li>
5509
+ <li>The Admin Columns "Pro" version adds support for inline editing, ACF fields and other capabilities.</li>
5510
+ <li>The Admin Columns "Pro" version adds support for exporting Media/Assistant table values to CSV-format files.</li>
5511
  </ul>
5512
  <p>
5513
  When Admin Columns is present you will see a new "Edit Columns" button just above the Media/Assistant submenu table. Click the button to go to the Settings/Admin Columns configuration screen. There you will see "Media Library Assistant" added to the "Others:" list. Click on it to see the configuration of the Media/Assistant submenu screen.
5524
  </p>
5525
  <h3>Custom Taxonomy Actions and Filters (Hooks)</h3>
5526
  <p>
5527
+ The Custom Taxonomy filters and actions give you control over the registration of the Att. Categories and Att. Tags taxonomies from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Taxonomy Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Taxonomy+Hooks+Example%22" class="mla-doc-bold-link">MLA Taxonomy Hooks Example</a>. To run the example:
5528
+ </p>
5529
  <ol>
5530
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5531
  <li>Hover over "MLA Taxonomy Hooks Example" in the Name column, then click the "Install" rollover action.</li>
5533
  <li>Go to, for example, the Media/Assistant submenu to exercise the filters and write filter/action information to the site's Error Log.</li>
5534
  <li>Examine the Error Log to see the filter/action information.</li>
5535
  </ol>
 
5536
  <p>
5537
  You can find more information about the types, labels and arguments in the <a href="https://codex.wordpress.org/Function_Reference/register_taxonomy" title="register_taxonomy() Documentation" target="_blank">Function Reference/register taxonomy</a> repository page.
5538
  </p>
5556
  <td class="mla-doc-hook-definition">Modify the array of arguments with which the taxonomy is registered. For example, you can change the URL rewrite slug from the default <code>attachment_category/attachment_tag</code> values for SEO purposes. <strong>Note</strong>: You may need to flush the rewrite rules after changing the slug. You can do it manually by going to the Permalink Settings page and re-saving the rules -- you don't need to change them.</td>
5557
  </tr>
5558
  </table>
5559
+ <a name="mla_list_table_hooks"></a>&nbsp;
 
 
 
5560
  <p>
5561
  <a href="#backtotop">Go to Top</a>
5562
  </p>
5563
  <h3>Media/Assistant Submenu Actions and Filters (Hooks)</h3>
5564
  <p>
5565
+ The Media/Assistant submenu supports a comprehensive set of filters and actions that give you control over table columns, inline actions and bulk actions from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the List Table Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+List+Table+Hooks+Example%22" class="mla-doc-bold-link">MLA List Table Hooks Example</a>. To run the example:
5566
+ </p>
5567
  <ol>
5568
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5569
  <li>Hover over "MLA List Table Hooks Example" in the Name column, then click the "Install" rollover action.</li>
5571
  <li>Go to the Media/Assistant submenu to exercise the filters and write filter/action information to the site's Error Log.</li>
5572
  <li>Examine the Error Log to see the filter/action information.</li>
5573
  </ol>
 
5574
  <p>
5575
  The example code documents each hook with comments in the filter/action function that intercepts each hook. There are hooks that let you add, modify or delete table columns.
5576
  </p>
5747
  </tr>
5748
  <tr>
5749
  <td class="mla-doc-hook-label">mla_list_table_extranav_actions</td>
5750
+ <td class="mla-doc-hook-definition">Gives you an opportunity to add, remove and/or re-order the controls added to the top &amp; bottom table navigation areas.</td>
5751
  </tr>
5752
  <tr>
5753
  <td class="mla-doc-hook-label">mla_list_table_extranav_custom_action</td>
5807
  <td class="mla-doc-hook-definition">Gives you a final chance to modify and extend the HTML markup used for the Bulk Edit on Upload form.</td>
5808
  </tr>
5809
  </table>
5810
+ <a name="mla_media_modal_filters"></a>&nbsp;
 
 
 
5811
  <p>
5812
  <a href="#backtotop">Go to Top</a>
5813
  </p>
5814
  <h3>Media Manager Enhancement filters (Hooks)</h3>
5815
  <p>
5816
+ Media Library Assistant adds several controls to the toolbar in the Media Manager Modal Window; more MIME type filters, year/month filter, taxonomy term filter and an enhanced Search media box. These features are supported by a comprehensive set of filters and actions that give you control over MMMW content from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Media Modal Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Media+Modal+Hooks+Example%22" class="mla-doc-bold-link">MLA Media Modal Hooks Example</a>. To run the example:
5817
+ </p>
5818
  <ol>
5819
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5820
  <li>Hover over "MLA Media Modal Hooks Example" in the Name column, then click the "Install" rollover action.</li>
5832
  </tr>
5833
  <tr>
5834
  <td class="mla-doc-table-label">mla_media_modal_months_dropdown</td>
5835
+ <td class="mla-doc-hook-definition">Change the content of the Media Manager Modal Window Month &amp; Year Dropdown control</td>
5836
  </tr>
5837
  <tr>
5838
  <td class="mla-doc-table-label">mla_media_modal_terms_options</td>
5896
  <td class="mla-doc-hook-definition">Substitute the results of the Media Manager Modal Window "Query Attachments" query with alternative results of your own</td>
5897
  </tr>
5898
  </table>
5899
+ <a name="mla_edit_meta_boxes"></a>&nbsp;
 
 
 
5900
  <p>
5901
  <a href="#backtotop">Go to Top</a>
5902
  </p>
5905
  Media Library Assistant adds support for the "Custom Fields" meta box to the Media/Edit Media screen. MLA also adds several meta boxes to this screen with more information about the item and where it is used on your site. You can enable/disable the additional meta boxes with an option on the Settings/Media Library Assistant General tab.
5906
  </p>
5907
  <p>
5908
+ You can also make individual changes in which meta boxes are displayed and in their content by using one or more of the filters MLA provides. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Meta Box Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Meta+Box+Hooks+Example%22" class="mla-doc-bold-link">MLA Meta Box Hooks Example</a>. To run the example:
5909
+ </p>
5910
  <ol>
5911
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
5912
  <li>Hover over "MLA Meta Box Hooks Example" in the Name column, then click the "Install" rollover action.</li>
5914
  <li>Make any changes or additions you want to in the example plugin source code. For example, you can modify the <code>mla_inserted_in_metabox</code> example to display a simplified version of the "Inserted in" information.</li>
5915
  <li>View the Media/Edit Media screen for an item to see the effect of your changes.</li>
5916
  </ol>
 
5917
  <p>
5918
  The example code documents each hook with comments in the filter function that intercepts the hook. Generally, each meta box filter lets you change the size of the text box (if appropriate) and the content that appears in the box. There is also a second filter for each meta box that lets you replace <strong>all</strong> of the HTML content for most boxes; use these with caution. The current hooks are:
5919
  </p>
5955
  <td class="mla-doc-hook-definition">modify the rows, columns and content of the "MLA Gallery in" meta box.</td>
5956
  </tr>
5957
  </table>
5958
+ <a name="mla_views"></a>&nbsp;
 
 
 
5959
  <p>
5960
  <a href="#backtotop">Go to Top</a>
5961
  </p>
5993
  </ul>
5994
  <p>
5995
  If you have enabled the <em><strong>Media Manager Enhanced MIME Type filter</strong></em>, the Table View list will also be available in the Media Manager/Add Media "media items" drop down list.
 
5996
  <a name="mla_uploads"></a>
5997
+ </p>
5998
  <p>
5999
  <a href="#backtotop">Go to Top</a>
6000
  </p>
6008
  <h4>Extension and MIME Type</h4>
6009
  <p>
6010
  The Extension is the file extension for this type, and unique key for the item. It must be all lowercase and contain only letters, numbers and hyphens (-). The MIME Type value must be all lowercase and contain only letters, numbers, periods (.), slashes (/) and hyphens (-). The MIME type specification must be a single, valid MIME specification, e.g., "image" or "image/jpeg". These two values are used to compose the list of valid extension/type associations for use within WordPress.
6011
+ </p>
6012
  <p>
6013
  When a file is uploaded to your Media Library the MIME type associated with that file extension is saved in the WordPress database record for the item. Later, you can use the <code>post_mime_type</code> to, for example, include or exclude the item from an <code>[mla_gallery]</code> display. You can think of the MIME Type as another way to categorize items in the Media Library. Once assigned, the MIME Type is not changed if you later alter the association between file extension and MIME Type. Think twice, therefore, when adding a new association to the list or changing the MIME type associated with an existing extension on the list.
6014
  </p>
6020
  <h4>Source and Status</h4>
6021
  <p>
6022
  The "Source" of an Upload MIME Type reveals where the extension/MIME Type association comes from:
6023
+ </p>
6024
  <ul class="mla_settings">
6025
  <li><strong>core</strong>: WordPress defines a core set of extensions and associated MIME types, and this list changes with new WordPress releases. These are the "official" items. You can't delete them, but you can inactivate them so they are not used to validate file uploads.</li>
6026
  <li><strong>mla</strong>: Media Library Assistant adds several more extension/type items, drawing from the most popular items found in other plugins and web sites. They are initialized as "inactive" items, so you must explicitly decide to activate them for use in file upload validation.</li>
6060
  </ul>
6061
  <p>
6062
  The icon images can be returned in a <code>[gallery]</code> or an <code>[mla_gallery]</code> shortcode when <code>size=icon</code> is specified. The icons also appear on the Media/Library and Media/Assistant submenu tables.
 
6063
  <a name="mla_optional_uploads"></a>
6064
+ </p>
6065
  <p>
6066
  <a href="#backtotop">Go to Top</a>
6067
  </p>
6077
  </p>
6078
  <p>
6079
  For your own research, I suggest starting with these resources:
6080
+ </p>
6081
  <ul class="mla_settings">
6082
  <li><a href="http://www.iana.org/assignments/media-types" target="_blank">Internet Assigned Number Authority MIME Media Types</a></li>
6083
  <li><a href="http://en.wikipedia.org/wiki/Internet_media_type" target="_blank">Wikipedia: Internet Media Type</a></li>
6095
  <p>
6096
  In the Custom Fields tab of the Settings screen you can define the rules for mapping several types of file and image metadata to WordPress custom fields. You can also use this screen to define rules for adding or updating elements within the WordPress-supplied "Attachment Metadata", stored in the "_wp_attachment_metadata" custom field. See the <a href="#attachment_metadata_mapping">Adding or changing Attachment Metadata</a> section below for details.
6097
  </p>
6098
+ <p>
6099
+ In this tab there are three ways to execute one or more custom field mapping rules for <strong>ALL</strong> of your Media Library items:
6100
+ </p>
6101
  <ul class="mla_settings">
6102
  <li><strong>Execute All Rules button</strong> - just below the "Enable" checkbox controls in the upper-left portion of the tab. Click this button to immediately run <strong>ALL</strong> of the active rules. Rules marked as inactive will not be executed.</li>
6103
  <li><strong>Bulk Actions "Execute"</strong> - Runs the rules you select by checking the box to the left of one or more rule names. Pull down the "Bulk Actions" control and select "Execute", then click the "Apply" button. <strong>Inactive rules will be executed</strong>; do not select them unless you want to execute them!</li>
6104
  <li><strong>"Execute" rollover action</strong> - Runs the single rule you select by clicking the rule's "Execute" rollover action. <strong>Inactive rules will be executed</strong>.</li>
6105
  </ul>
6106
+ <p>
6107
+ These commands process your items in "chunks" to prevent timeout errors. You can pause/resume or cancel the operation between chunks. Note that rules with a Data Source of "none" are ignored because they can't change the custom field value.
6108
+ </p>
6109
+ <p>
6110
+ There are two other ways you can perform custom field mapping for one or more existing attachments:
6111
+ </p>
6112
  <ul class="mla_settings">
6113
  <li><strong>Edit Media screen</strong> - You can click the "Map Custom Field metadata" link in the "Image Metadata" postbox to apply the existing mapping rules to a single attachment.</li>
6114
  <li><strong>Bulk Action edit area</strong> - To perform mapping for a group of attachments you can use the Bulk Action facility on the Media/Assistant screen. Check the attachments you want to map, select "Edit" from the Bulk Actions dropdown list and click "Apply". The bulk edit area will open with a list of the checked attachments in the left-hand column. You can click the "Map Custom Field metadata" button in the lower left corner of the area to apply the existing mapping rules to the attachments in the list.</li>
6115
  </ul>
 
6116
  <p>
6117
  Custom field mapping is a powerful tool, but it comes at the price of additional database storage space and processing time to maintain and retrieve the data. <strong><em>Think carefully about your needs before you use this tool.</em></strong> You can disable or delete any rules you create, so you might want to set up some rules for a special project or analysis of your library and then discard them when you're done. That said, the advantages of mapping metadata to custom fields are:
6118
  </p>
6123
  <p>
6124
  If you just want to add a custom field to the Media/Assistant submenu, the quick edit area and/or the bulk edit area you can bypass the mapping logic by leaving the Data Source value as "-- None (select a value) --".
6125
  </p>
6126
+ <p>
6127
+ Three checkbox options control the custom field mapping when new items are added to the Media Library:
6128
+ </p>
6129
  <ul class="mla_settings">
6130
  <li><strong>Enable custom field mapping</strong> - Check this option to enable the mapping rules and display the "Map" buttons on the Media/Edit Media and Media/Assistant Bulk Edit screens.</li>
6131
  <li><strong>Enable custom field mapping when adding new media</strong> - Check this option to enable mapping when uploading new items (attachments) to the Media Library.</li>
6132
  <li><strong>Enable custom field mapping when updating media metadata</strong> - Check this option to enable mapping when item (attachment) metadata is regenerated,
6133
  e.g., when the Media/Edit Media "Edit Image" functions are used.</li>
6134
  </ul>
6135
+ <p>
6136
+ The "when adding" and "when updating" options do <strong>NOT</strong> affect the operation of the "Map" buttons on the bulk edit or single edit screens, nor do they affect any of the "Execute" mapping functions On this Settings screen.
6137
+ </p>
6138
+ <p>
6139
+ Check one or more options to enable these features, then click the "Save Changes" button to record your new setting(s).
6140
+ </p>
6141
  <p>
6142
  Some plugins support file uploads from the WordPress "front end", usually by using the WordPress "AJAX" support. To enable mapping when these plugins are used you must add an entry to your <code>wp-config.php</code> file so MLA will load the mapping code:
6143
  </p>
6157
  <h4>Custom field mapping example</h4>
6158
  <p>
6159
  Here is a simple example of mapping the items' file size to a custom field, so you can display it in the Media/Assistant submenu table and use it in and <code>[mla_gallery]</code> shortcode. You can go to the Settings/Media Library Assistant Custom Fields tab and define a rule that maps file size to a WordPress custom field. The steps required are:
6160
+ </p>
6161
  <ol>
6162
  <li>Navigate to the Settings/Media Library Assistant "Custom Fields" tab.</li>
6163
  <li>Make sure the "Enable custom field mapping when adding new media" box is checked. If not, check the box, scroll down and click "Save Changes".</li>
6181
  &nbsp;<br />
6182
  The three parameters in the above example will select all of the images in your media library and sort your gallery so the largest files appear first. You can replace <code>post_parent=all</code> with any other data selection parameters to get the items you want. For example, you can use a "meta_query" to select only those items (of any MIME Type) whose File Size is less than 82,168 bytes (and display the size in the gallery item caption):<br />
6183
  &nbsp;<br />
6184
+ <code>[mla_gallery post_mime_type=all meta_query="array( array( 'key' => 'File Size', 'value' => array( '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;82,168' ), 'compare' => 'BETWEEN' ) )" meta_key="File Size" orderby="meta_value" order="DESC" mla_caption="{+caption+}<br />{+custom:File Size+}"]</code>
6185
  </p>
6186
  <p>
6187
  Note the format of the <code>value</code> and <code>compare</code> parameters within the <code>meta_query</code>. Because the File Size custom field uses the "Commas" format, the values are stored as 15-character strings with leading spaces; this makes the values display and sort sensibly. You must use <code>'compare' => 'BETWEEN'</code> and give the lowest and highest values as an array in the <code>'value' => array( '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;82,168' )</code> parameter, padding each value out to exactly 15 characters wide.
6346
  </p>
6347
  <p>
6348
  As explained elsewhere, you can access all of this data with the "meta:" <a href="#mla_variable_parameters">Field-level markup substitution parameter</a>. By coding the "meta:" prefix in the Field Title column of a field mapping rule you can add to or update this data as well, from any of the data sources listed below. You can use a <a href="#mla_template_parameters">Content Template</a> to compose a value from multiple substitution parameters and test for empty values, choosing among two or more alternatives or suppressing the mapping altogether for a given item.
6349
+ </p>
6350
  <p>
6351
  Let's say, for example, that you want to add GPS coordinates to the "image_meta" element of the Attachment Metadata.
6352
+ </p>
6353
  <ol>
6354
  <li>
6355
  Open the Settings/Media Library Assistant submenu and select the Custom Fields tab. Scroll down to the "Add a new Field and Mapping Rule" section.
6364
  Set the other parts of the rule as needed. You can select "Keep" if some of your items already have this information or "Replace" to update all items. "Native" and "Text" are appropriate for this example. You can check "Delete NULL values" to remove any existing, empty values for this element. The "MLA Column", "Quick Edit" and "Bulk Edit" checkboxes have no meaning for Attachment Metadata elements and can be left blank; they will be ignored if checked.
6365
  </li>
6366
  </ol>
 
6367
  <p>
6368
  If you are creating an IPTC/EXIF mapping rule the details are a bit different.
6369
+ </p>
6370
  <ol>
6371
  <li>
6372
  Open the Settings/Media Library Assistant submenu and select the IPTC/EXIF tab. Scroll down to the "Add a new Field and Mapping Rule" section.
6381
  Set the other parts of the rule as needed. You can select "EXIF" unless you also select an IPTC value and want it to have priority. You can select "Keep" if some of your items already have this information or "Replace" to update all items.
6382
  </li>
6383
  </ol>
6384
+ <a name="custom_field_mapping_with_templates"></a>&nbsp;
 
 
6385
  <p>
6386
  <a href="#backtotop">Go to Top</a>
6387
  </p>
6394
  </p>
6395
  <p>
6396
  You can use a template to compose a custom field from multiple data sources, e.g., "<code>Taken with [+meta:camera+] at [+dimensions+] using ISO [+exif:ISOSpeedRatings,single+] and [+exif:ExposureTime+] exposure time</code>".
 
6397
  </p>
6398
+ <p>
6399
  You can use a template to compose a custom field from alternative data sources, depending on which fields are populated for a given attachment. For example, "<code>[+pdf:Keywords+]|[+iptc:2#025+]|none</code>" will use the PDF Keywords field, if populated, then the IPTC keywords field, if populated, or the literal "none" if neither field contains a value. With this template you can get keywords from both PDF documents and images in a single field.
6400
+ </p>
6401
  <p>
6402
  Using a template with the Option Dropdown "Text" or "Single" values will yield a text result. For example, multiple IPTC keywords would be converted into a comma-delimited list as a string. If you combine a template with the "Export", "Array" or "Multi" values the template will deliver an array result if the fields inside the template have multiple values. For example, with "Multi" you can code "<code>([+iptc:2#020<strong>,array</strong>+])([+iptc:2#025<strong>,array</strong>+])</code>" to store each of the IPTC supplemental-category <em><strong>and</strong></em> keywords values (there is no "|" in the template) in a separate custom field value. Note the use of the <strong>,array</strong> formatting option in each field; this is required to get an array result for the field. Also, note that each of the fields is enclosed in parentheses, so the field is suppressed if it contains no values.
6403
  </p>
6404
  <p>
6405
  <strong>CAUTION:</strong> If you use the <code>[+custom:ALL_CUSTOM+]</code> pseudo value in a mapping rule, and you apply the rule more than once, you will see copies of the field you are mapping to in the result. To "clear out" a field you are mapping ALL_CUSTOM into, clear out the text box containing the template, select "Replace" and check the "Delete NULL values" box. Then, click "Map All Attachments"; that will delete the old values and give you a clean start. You'll also see that the template you deleted will be restored after the mapping is complete.
6406
+ <a name="mla_iptc_exif_mapping"></a>
6407
  </p>
 
6408
  <p>
6409
  <a href="#backtotop">Go to Top</a>
6410
  </p>
6411
  <h3>IPTC &amp; EXIF Processing Options</h3>
6412
  <p>
6413
+ Some image file formats such as JPEG DCT or TIFF Rev 6.0 support the addition of data about the image, or <em>metadata</em>, in the image file. In addition, many JPEG, TIFF and PDF files use the <a href="https://www.adobe.com/products/xmp/" title="Adobe XMP site" target="_blank">Extensible Metadata Platform (XMP)</a> framework. XMP metadata varies from file to file but is often extensive. Many popular image processing programs such as Adobe PhotoShop allow you to populate metadata fields with information such as a copyright notice, caption, the image author and keywords that categorize the image in a larger collection. WordPress uses some of this information to populate the Title, Slug and Description fields when you add an image to the Media Library.
6414
  </p>
6415
  <p>
6416
  The Media Library Assistant has powerful tools for copying metadata to:
6417
+ </p>
6418
  <ul class="mla_settings">
6419
  <li>the WordPress standard fields, e.g., the Caption</li>
6420
  <li>taxonomy terms, e.g., in categories, tags or custom taxonomies like Att. Categories and Att. Tags</li>
6421
  <li>WordPress Custom Fields</li>
6422
  </ul>
6423
+ <p>
6424
  You can define the rules for mapping metadata on the "IPTC/EXIF" tab of the Settings page. You can choose to automatically apply the rules when new media are added to the Library (or not). You can click the "Map IPTC/EXIF metadata" button on the Edit Media/Edit Single Item screen or in the bulk edit area to selectively apply the rules to one or more items. You can use the "Execute" functions in the tab to apply the rules to one, some or <strong><em>ALL</em></strong> of the items in your library at one time.
6425
  </p>
6426
  <p>If you use any of the "Execute" functions, the selected rule(s) will be immediately applied to <strong>all</strong> of the attachments in your Media Library. THERE<strong> IS NO UNDO FOR THESE ACTIONS!</strong></p>
6428
  If you just want to add a custom field to the Media/Assistant submenu, the quick edit area and/or the bulk edit area go to the "Custom Fields" tab and follow the instructions there.
6429
  </p>
6430
  <p>In this tab there are three ways to execute one or more IPTC/EXIF mapping rules for <strong>ALL</strong> of your Media Library items:
6431
+ </p>
6432
  <ul class="mla_settings">
6433
  <li><strong>Execute All Rules button</strong> - just below the "Enable" checkbox controls in the upper-left portion of the tab. Click this button to immediately run <strong>ALL</strong> of the active rules. Rules marked as inactive will not be executed.</li>
6434
  <li><strong>Bulk Actions "Execute"</strong> - Runs the rules you select by checking the box to the left of one or more rule names. Pull down the "Bulk Actions" control and select "Execute", then click the "Apply" button. <strong>Inactive rules will be executed</strong>; do not select them unless you want to execute them!</li>
6435
  <li><strong>"Execute" rollover action</strong> - Runs the single rule you select by clicking the rule's "Execute" rollover action. <strong>Inactive rules will be executed</strong>.</li>
6436
  </ul>
6437
+ <p>
6438
  These commands process your items in "chunks" to prevent timeout errors. You can pause/resume or cancel the operation between chunks.</p>
6439
  <p>There are two other ways you can perform IPTC/EXIF mapping for one or more existing attachments:
6440
+ </p>
6441
  <ul class="mla_settings">
6442
  <li><strong>Edit Media screen</strong> - You can click the "Map IPTC/EXIF metadata" link in the "Image Metadata" postbox to apply the existing mapping rules to a single attachment.</li>
6443
  <li><strong>Bulk Action edit area</strong> - To perform mapping for a group of attachments you can use the Bulk Action facility on the Media/Assistant screen. Check the attachments you want to map, select "Edit" from the Bulk Actions dropdown list and click "Apply". The bulk edit area will open with a list of the checked attachments in the left-hand column. You can click the "Map IPTC/EXIF metadata" button in the lower left corner of the area to apply the standing mapping rules to the attachments in the list.</li>
6444
  </ul>
 
6445
  <p>Three checkbox options control the IPTC/EXIF mapping when new items are added to the Media Library:
6446
+ </p>
6447
  <ul class="mla_settings">
6448
  <li><strong>Enable IPTC/EXIF Mapping</strong> - Check this option to enable the mapping rules and display the "Map" buttons on the Media/Edit Media and Media/Assistant Bulk Edit screens.</li>
6449
  <li><strong>Enable IPTC/EXIF Mapping when adding new media</strong> - Check this option to enable mapping when uploading new items (attachments) to the Media Library.</li>
6450
  <li><strong>Enable IPTC/EXIF Mapping when updating media metadata</strong> - Check this option to enable mapping when item (attachment) metadata is regenerated,
6451
  e.g., when the Media/Edit Media "Edit Image" functions are used.</li>
6452
  </ul>
6453
+ <p>
6454
  The "when adding" and "when updating" options do <strong>NOT</strong> affect the operation of the "Map" buttons on the bulk edit or single edit screens, nor do they affect any of the "Execute" mapping functions On this Settings screen.</p>
6455
  <p>Check one or more options to enable these features, then click the "Save Changes" button to record your new setting(s).</p>
6456
  <p>
6464
  </p>
6465
  <p>
6466
  If you cannot identify the proper "action" value or if your uploader uses another method to do its work you can try adding <code>define( 'MLA_AJAX_EXCEPTIONS', 'always' );</code> to your <code>wp-config.php</code> file. This value will unconditionally load full MLA support for AJAX operations and may give you better results. You can also use the <a href="#mla_debug_tab">Debug tab</a> and <code>define( 'MLA_DEBUG_LEVEL', 3 );</code> to log more information about file upload requests; that may help identify the appropriate "action" value.
6467
+ <a name="iptc_exif_mapping_example"></a>
6468
  </p>
6469
  <p>
6470
  <a href="#backtotop">Go to Top</a>
6480
  </blockquote>
6481
  <p>
6482
  You can go to the Settings/Media Library Assistant IPTC/EXIF tab and define a rule that maps any of these fields to a WordPress custom field. The steps required are:
6483
+ </p>
6484
  <ol>
6485
  <li>Navigate to the Settings/Media Library Assistant IPTC/EXIF tab.</li>
6486
  <li>Make sure the "Enable IPTC/EXIF Mapping when adding new media" box is checked. If not, check the box, scroll down and click "Save Changes".</li>
6505
  &nbsp;<br />
6506
  The three parameters in the above example will select all of the images in your media library and sort your gallery so the newest/most recent images appear first. You can replace <code>post_parent=all</code> with any other data selection parameters to get the images you want. For example, you can use a "meta_query" to select only those images created after 2012-01-01 (and display the date in the gallery item caption):<br />
6507
  &nbsp;<br />
6508
+ <code>[mla_gallery meta_query="array( array( 'key' => 'Date Time Created', 'value' => '2012-01-01', 'compare' => '&lt;' ) )" meta_key="Date Time Created" orderby="meta_value DESC" mla_caption="{+custom:Date Time Created+}" ]</code>
6509
+ <a name="iptc_exif_mapping_tables"></a>
6510
  </p>
 
6511
  <p>
6512
  <a href="#backtotop">Go to Top</a>
6513
  </p>
6582
  If you code the "template:" prefix at the beginning of the EXIF/Template value you have all the power of Content Templates at your disposal. Do <strong>not</strong> add the "[+" and "+]" delimiters; the prefix is all you need.
6583
  </p>
6584
  <p>
6585
+ A template can be used to access any XMP metadata your items contain. For example:<br />
6586
+ &nbsp;<br />
6587
+ <code>template:([+xmp:Title+])</code><br />
6588
+ <code>template:([+xmp:Regions.RegionList.*.*.Name,array+])</code><br />
6589
+ &nbsp;<br />
6590
  Note the use of parentheses around the XMP parameters, which replace missing values with an empty value to enable proper rule processing.
6591
  </p>
6592
  <p>
6594
  </p>
6595
  <p>
6596
  You can use a template to compose a value from multiple data sources, e.g., "<code>Taken with [+meta:camera+] at [+dimensions+] using ISO [+exif:ISOSpeedRatings,single+] and [+exif:ExposureTime+] exposure time</code>".
 
6597
  </p>
6598
+ <p>
6599
  You can use a template to compose a value from alternative data sources, depending on which fields are populated for a given attachment. For example, "<code>[+iptc:2#020+]|[+iptc:2#025+]|none</code>" will use the IPTC supplemental-category field, if populated, then the IPTC keywords field, if populated, or the literal "none" if neither IPTC field contains a value.
6600
  </p>
6601
  <p>
6606
  </p>
6607
  <p>
6608
  Note that the <strong>,array</strong> formatting option is <strong>not</strong> required to get an array result for the field in a Taxonomy term mapping template; it is assumed. If you want a <strong>text</strong>, <strong>single</strong> or <strong>export</strong> result you can add one of those formatting options to your field specification.
6609
+ <a name="date_iptc_exif_mapping"></a>
6610
+ </p>
6611
+ <p>
6612
+ <a href="#backtotop">Go to Top</a>
6613
+ </p>
6614
+ <h4>IPTC/EXIF Mapping and Bulk Editing for the "Uploaded on" Standard Field</h4>
6615
+ <p>
6616
+ The "Uploaded on" Standard Field is set by WordPress to the date and time the item is uploaded to the Media Library. You can use a mapping rule to replace this with a different value, such as the date and time the item was created. Many EXIF date and time values such as DateTimeOriginal and DateTimeDigitized are stored as strings with a format of "YYYY:MM:DD HH:MM:SS". You can parse this format and just about any English textual datetime description into a Unix timestamp, then convert the result to the appropriate format ('Y-m-d H:i:s', e.g., "2014-12-31 23:59:00", or just before midnight on new year's eve). The mapping rule first uses the PHP strtotime() function, then the date() function, to compose a valid date and time. The "Supported Date and Time Formats" that can be passed in to the rule are described at: <a href="http://php.net/manual/en/datetime.formats.php" title="PHP Supported Date and Time Formats" target="_blank">http://php.net/manual/en/datetime.formats.php</a>.<br />&nbsp;<br />You can use a Content Template to compose the starting value in many ways. For example:
6617
+ </p>
6618
+ <p><code>
6619
+ template:([+exif:DateTimeOriginal+]|[+meta:image_meta.created_timestamp,timestamp('Y-m-d H:i:s')+])
6620
+ </code></p>
6621
+ <p>
6622
+ This example first uses the EXIF <code>DateTimeOriginal</code> value, if present. If that value is missing the alternative is the <code>created_timestamp</code> that WordPress calculates and adds to the <code>image_meta</code> array in the attachment metadata. Since the <code>created_timestamp</code> is a Unix timestamp it is first converted to a text format that can be processed by strtotime(). If neither value is available the original WordPress-supplied default will be retained.
6623
+ </p>
6624
+ <p>
6625
+ You can also replace the Uploaded on values for one or more items in the <strong>Bulk Edit Area</strong> of the Media/Assistant submenu table. Again, the Content Template feature adds power to this feature. For example, you can replace the date portion of the value while retaining the time portion to preserve the sort order of your items:
6626
+ </p>
6627
+ <p><code>
6628
+ template: 20180102 [+post_date,date( 'H:i:s' )+]<br />
6629
+ template: today [+post_date,date( 'H:i:s' )+]
6630
+ </code></p>
6631
+ <p>
6632
+ The first example above sets the date to a fixed value. The second example uses "today", one of the <a href="http://php.net/manual/en/datetime.formats.relative.php" title="PHP Supported Relative Date/Time Formats" target="_blank">Relative Formats</a> PHP supports to replace the date portion with the current date. Both examples access the original <code>post_date</code> data value and then use the "date" format/option function to extract just the time portion.
6633
+ <a name="pdf_iptc_exif_mapping"></a>
6634
  </p>
 
6635
  <p>
6636
  <a href="#backtotop">Go to Top</a>
6637
  </p>
6671
  </table>
6672
  <p>
6673
  The three rules have a similar structure:
6674
+ </p>
6675
  <ul class="mla_settings">
6676
  <li>"template:" (goes in the text box below "EXIF/Template Value") is used to access the pdf: values instead of the EXIF values.</li>
6677
  <li>The values are surrounded by parentheses "(" and ")" so they will return an empty string for documents without meta data in the field and for other items such as images.
6679
  <li>I have selected "Replace" to overwrite the existing text, because a default Title was assigned to the items when they were uploaded. You can change this to "Keep" if you already have values in one or more of the fields that you want to retain.
6680
  </li>
6681
  </ul>
6682
+ <p>
6683
  The taxonomy rule also has the ",array" option to return multiple keywords as individual array elements that can be converted to taxonomy terms. For this rule, the "Delimiter(s)" text box contains a comma and a semicolon, which should cover most of the documents you will encounter.
6684
  </p>
6685
  <p>
6717
  </table>
6718
  <p>
6719
  The three rules have similar changes:
6720
+ </p>
6721
  <ul class="mla_settings">
6722
  <li>A vertical bar ("|") separates the two data source specifications. This is the Content Template "Choice" operator, which takes the first non-blank alternative from among the choices.</li>
6723
  <li>A second data source for images. The PDF documents will not have "exif:"/"iptc:" data sources, and images will not have "pdf:" data sources, so only one (at most) of the two alternatives will be non-blank.
6724
  </li>
6725
  </ul>
6726
+ <p>
6727
  In fact, WordPress contains its own rules for composing a Title from IPTC/Exif metadata (see <a href="#wordpress_default_mapping">WordPress default title, slug and description mapping</a>), so you may not need or want to extend the Title rule. WordPress also fills the Description field, but does not fill the Caption. You may want to copy the Description into the Caption; if you do, replace <code>[+exif:ImageDescription+]</code> with <code>[+post_content+]</code> in the Caption rule.
6728
+ <a name="wordpress_default_mapping"></a>
6729
  </p>
 
6730
  <p>
6731
  <a href="#backtotop">Go to Top</a>
6732
  </p>
6736
  </p>
6737
  <p>
6738
  The WordPress rules are somewhat complex; consult the source code if you need exact details. Roughly speaking, the priority order for mapping the post_title and post_name values from non-blank IPTC/EXIF metadata is:
6739
+ </p>
6740
  <ol>
6741
  <li>EXIF "Title"</li>
6742
  <li>EXIF "ImageDescription" (if less than 80 characters)</li>
6749
  <li>EXIF "ImageDescription" (if different from post_title)</li>
6750
  <li>IPTC 2#120 "caption-or-abstract" (if different from post_title)</li>
6751
  </ol>
 
6752
  <a name="mla_mapping_hooks"></a>&nbsp;
6753
  <p>
6754
  <a href="#backtotop">Go to Top</a>
6755
  </p>
6756
  <h3>MLA Custom Field and IPTC/EXIF Mapping Actions and Filters (Hooks)</h3>
6757
  <p>
6758
+ The Custom Field and IPTC/EXIF Mapping tools support a comprehensive set of filters and actions that give you complete control over rule execution and value creation from PHP code in your theme or in another plugin. An example of using the hooks from a simple, stand-alone plugin can be found in the Documentation/Example Plugins submenu. You can find the example plugin here: <a title="Find the Mapping Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Mapping+Hooks+Example%22" class="mla-doc-bold-link">MLA Mapping Hooks Example</a>. To run the example:
6759
+ </p>
6760
  <ol>
6761
  <li>Click on the link above or go to top of the Documentation tab and click on the "Example Plugins" button.</li>
6762
  <li>Hover over "MLA Mapping Hooks Example" in the Name column, then click the "Install" rollover action.</li>
6764
  <li>Upload a new attachment and/or run the mapping rules to exercise the filters and write mapping information to the site's Error Log.</li>
6765
  <li>Examine the Error Log to see the mapping information.</li>
6766
  </ol>
 
6767
  <p>
6768
  The example code documents each hook with comments in the filter/action function that intercepts each hook. There are hooks that run at the beginning and end of the overall mapping operation as well as hooks for each mapping rule.
6769
  </p>
6812
  </tr>
6813
  </table>
6814
  <p>
6815
+ A second example plugin, <a title="Find the Metadata Mapping Hooks Example" href="[+example_url+]&amp;mla-example-search=Search+Plugins&amp;s=%22MLA+Metadata+Mapping+Hooks+Example%22" class="mla-doc-bold-link">MLA Metadata Mapping Hooks Example</a>, illustrates the metadata hooks. The current insert attachment/update attachment metadata hooks are:
6816
  </p>
6817
  <table>
6818
  <tr>
6935
  <td class="mla-doc-table-label">64, or 0x0040</td>
6936
  <td>writes MLA-specific messages to the log for "where-used" reference collection.</td>
6937
  </tr>
6938
+ <tr>
6939
+ <td class="mla-doc-table-label">128, or 0x0080</td>
6940
+ <td>writes MLA-specific messages to the log for MIME Type processing.</td>
6941
+ </tr>
6942
  </table>
6943
  <p>
6944
  You can pick the logging categories you want by adding the above values together. For example, to log only PHP messages you can use <code>define( 'MLA_DEBUG_LEVEL', 1 );</code> or <code>define( 'MLA_DEBUG_LEVEL', 0x0001 );</code>. To add the "AJAX" messages you can use <code>define( 'MLA_DEBUG_LEVEL', 3 );</code> or <code>define( 'MLA_DEBUG_LEVEL', 0x0003 );</code>. The hexadecimal notation ( 0x0003 ) can be easier to understand when several options are involved.
6984
  </ul>
6985
  <p>
6986
  If you are having an MLA problem that includes error messages in the log, copying the messages and adding them to your Support Forum topic can be most helpful; thanks!
6987
+ <a name="mla_language_tab"></a>
6988
  </p>
6989
  <p>
6990
  <a href="#backtotop">Go to Top</a>
7064
  <p>
7065
  When a specific language is selected only the item translations for that language are shown, and only the terms for that language are displayed (except for a Polylang bug that shows all languages in the "auto-complete" list for flat taxonomies). When "All Languages"/"Show all languages" is selected the terms for all languages are displayed even if they cannot be assigned to an item. For example, a Spanish term may appear in the list be cannot be assigned to an English item translations.
7066
  </p>
7067
+ <p>
7068
  For individual edit and quick edit updates the rule is simple:
7069
+ </p>
7070
  <ol>
7071
  <li>For all terms selected/entered, find the equivalent term in the language of the item translation. Assign the equivalent (language-specific) term if one exists. If no equivalent term exists, ignore the selected/entered term. Assign all equivalent terms to the item translation, replacing any previous terms.</li>
7072
  </ol>
7073
+ <p>
7074
  For bulk edit updates the rule depends on which action (add, remove, replace) has been selected. Each of the item translations in the bulk edit list is updated by these rules:
7075
+ </p>
7076
  <ol>
7077
  <li><strong>Add</strong>: For all terms selected/entered, find the equivalent term in the language of the item translation. Assign the equivalent (language-specific) term if one exists. If the equivalent term exists, add it to the item translation.</li>
7078
  <li><strong>Remove</strong>: For all terms selected/entered, find the equivalent term in the language of the item translation. Assign the equivalent (language-specific) term if one exists. If the equivalent term exists, remove it from the item translation.</li>
7079
  <li><strong>Replace</strong>: This is the tricky case. What should happen to terms already assigned to an item translation that have not been selected/entered for the update? In particular, what about terms that do not have translations to all languages? Should a "French-only" term be preserved?</li>
7080
  </ol>
7081
+ <p>
7082
  The "<strong>Replace</strong>" answer is the same as the individual/quick edit answer. If the term is not selected/entered for the update it is discarded along with the other old assignments. After all, in "All Languages"/"Show all languages" mode the "French-only" term would have been in the list and could be selected if desired.
7083
  </p>
7084
  <strong>Term Synchronization</strong>
7141
  </ul>
7142
  <p>
7143
  If you use Replication to automatically create terms in non-current languages they will be created with the same text value as the source term in the current language. You can always go to the taxonomy edit page and change the source text to an appropriate value for the other language(s). If you do not use Replication you can always go to the taxonomy edit page and add translations with an appropriate value for the other language(s).
7144
+ <a name="mla_example_plugins"></a>
7145
  </p>
7146
  <p>
7147
  <a href="#backtotop">Go to Top</a>
7152
  <p>The Documentation/Example Plugins submenu lets you browse the list of MLA example plugins, install or update them in the Plugins/Installed Plugins area and see which examples you have already installed. <strong>To activate, deactivate or delete</strong> the plugins you must go to the Plugins/Installed Plugins admin submenu.</p>
7153
  <p>
7154
  The Example plugins submenu lists all of the MLA example plugins and identifies those already in the Installed Plugins area. In the submenu:
7155
+ </p>
7156
  <ul class="mla_settings">
7157
  <li>the "Screen Options" dropdown area lets you choose which columns to display and how many items appear on each page</li>
7158
  <li>the "Help" dropdown area gives you a brief explanation of the submenu content and functions</li>
7160
  <li>bulk and rollover actions are provided to install or update example plugins</li>
7161
  <li>the table can be sorted by any of the displayed columns</li>
7162
  </ul>
 
7163
  <p>
7164
  Once you have installed an example plugin you can use the WordPress Plugins/Editor submenu to view the source code and (with extreme caution) make small changes to the code. <strong>Be very careful if you choose to modify the code!</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated. It is much safer to download the file(s) or use FTP access to your site to modify the code offline in a more robust HTML/PHP editor.
7165
  </p>
tpls/help-for-media_page_mla-menu.tpl CHANGED
@@ -2,7 +2,7 @@
2
  <!-- invoked as /wp-admin/upload.php?page=mla-menu -->
3
  <!-- template="mla-overview" -->
4
  <!-- title="Overview" order="10" -->
5
- <p>All the files you&#8217;ve uploaded are listed in the Media/Assistant submenu table, ordered by the Title field. You can change the sort order by clicking on one of the blue column names. You can change the default sort order on the Settings screen.</p>
6
  <p>You can use the Screen Options tab to customize the display of this screen. You can choose any combination of the columns available for display. You can also choose how many items appear on each page of the display.</p>
7
  <p>You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by month using the dropdown menu above the media table.</p>
8
  <p>If you have selected taxonomy support, e.g., &#8220;Att. Categories&#8221;, you can filter the list by selecting &#8220;All Categories&#8221;, &#8220;No Categories&#8221; or a specific category from the drop down list. If you select a category that has child categories beneath it, attachments in any of the child categories will also appear in the filtered list. You can select the taxonomy you want to filter by on the Settings page.</p>
@@ -66,7 +66,8 @@ There are four where-used reporting categories and you can turn them on or off w
66
  <p>Bulk Edit support for taxonomy terms allows you to <strong>add, remove or completely replace</strong> terms for the selected attachments. Below each taxonomy edit box are three radio buttons that let you select the action you&#8217;d like to perform.</p>
67
  <p>The taxonomies that appear in the Bulk Edit area can be a subset of the taxonomies supported on the single item edit screen. You can select which taxonomies appear by entering your choice(s) in the Settings/Media Library Assistant General tab.</p>
68
  <p>You can update the Title, Caption, Description and ALT Text values for all of the selected attachments. You can use a <a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_template_parameters" target="_blank">Content Template</a> to customize the values based on attachment-specific data sources. You can also delete the content of a field by entering the special <code>template:[+empty+]</code> value.</p>
69
- <p>In the Bulk Edit area two additional substitution parameter values are available. The <code>[+index+]</code> value starts at one and is incremented for each item processed. The <code>[+found_rows+]</code> value contains the total number of items that will be processed.</p>
 
70
  <!-- template="mla-available-actions" -->
71
  <!-- title="Available Actions" order="100" -->
72
  <p>Hovering over a row reveals action links such as Edit, Quick Edit, Move to Trash and Delete Permanently. Clicking Edit displays a simple screen to edit that individual file&#8217;s metadata. Clicking Move to Trash will assign the file to the Trash pile but will not affect pages or posts to which it is attached. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). Clicking Quick Edit displays an inline form to edit the file's metadata without leaving the menu screen.</p>
2
  <!-- invoked as /wp-admin/upload.php?page=mla-menu -->
3
  <!-- template="mla-overview" -->
4
  <!-- title="Overview" order="10" -->
5
+ <p>All the files you&#8217;ve uploaded are listed in the Media/Assistant submenu table, ordered by the Date field in descending order. You can change the sort order by clicking on one of the blue column names. You can change the default sort order on the Settings screen.</p>
6
  <p>You can use the Screen Options tab to customize the display of this screen. You can choose any combination of the columns available for display. You can also choose how many items appear on each page of the display.</p>
7
  <p>You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by month using the dropdown menu above the media table.</p>
8
  <p>If you have selected taxonomy support, e.g., &#8220;Att. Categories&#8221;, you can filter the list by selecting &#8220;All Categories&#8221;, &#8220;No Categories&#8221; or a specific category from the drop down list. If you select a category that has child categories beneath it, attachments in any of the child categories will also appear in the filtered list. You can select the taxonomy you want to filter by on the Settings page.</p>
66
  <p>Bulk Edit support for taxonomy terms allows you to <strong>add, remove or completely replace</strong> terms for the selected attachments. Below each taxonomy edit box are three radio buttons that let you select the action you&#8217;d like to perform.</p>
67
  <p>The taxonomies that appear in the Bulk Edit area can be a subset of the taxonomies supported on the single item edit screen. You can select which taxonomies appear by entering your choice(s) in the Settings/Media Library Assistant General tab.</p>
68
  <p>You can update the Title, Caption, Description and ALT Text values for all of the selected attachments. You can use a <a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_template_parameters" target="_blank">Content Template</a> to customize the values based on attachment-specific data sources. You can also delete the content of a field by entering the special <code>template:[+empty+]</code> value.</p>
69
+ <p>You can update the "Uploaded on" date/time values for all the selected attachments, using a Content Template for attachment-specific data sources. More information on this powerful feature is in the <a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#date_iptc_exif_mapping" target="_blank">IPTC/EXIF Mapping and Bulk Editing for the "Uploaded on" Standard Field</a> section of the Documentation tab.</p>
70
+ <p>In the Bulk Edit area two additional substitution parameter values are available. The <code>[+index+]</code> value starts at one and is incremented for each item processed. You can add an offset, e.g., <code>[+index,99+]</code> will give a starting value of 100. The <code>[+found_rows+]</code> value contains the total number of items that will be processed.</p>
71
  <!-- template="mla-available-actions" -->
72
  <!-- title="Available Actions" order="100" -->
73
  <p>Hovering over a row reveals action links such as Edit, Quick Edit, Move to Trash and Delete Permanently. Clicking Edit displays a simple screen to edit that individual file&#8217;s metadata. Clicking Move to Trash will assign the file to the Trash pile but will not affect pages or posts to which it is attached. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). Clicking Quick Edit displays an inline form to edit the file's metadata without leaving the menu screen.</p>
tpls/help-for-settings_page_mla-settings-menu-custom_field.tpl CHANGED
@@ -58,7 +58,7 @@ There is no "trash" area or "undo" feature, so use the "Purge Values" and "Delet
58
  <!-- template="mla-add-new" -->
59
  <!-- title="Add New Rule" order="60" -->
60
  <p>The left-hand side of the screen contains all the fields you need to define a new custom field rule. Name is required, and must not have a rule already defined for it; the other fields are not or have default values. There is more information about each field in the text under the value area.</p>
61
- <p>You can pick from a list of the custom fields already associated with one or more items. If you want to define a new custom field, click "Enter new field" and type the new field's name in the text box.</p>
62
  <p><strong>NOTE:</strong> To save your work and add the rule, you must scroll down to the bottom of the form and click "Add Rule".</p>
63
  <p>You can find complete information on each of the custom field mapping rule fields in the "The custom field rule elements" portion of the "Documentation on Custom Field Mapping Rules" section of the Documentation tab (see the "For more information" link in the sidebar at the right).</p>
64
  <!-- template="mla-read-only" -->
@@ -68,5 +68,5 @@ There is no "trash" area or "undo" feature, so use the "Purge Values" and "Delet
68
  <!-- template="sidebar" -->
69
  <p><strong>For more information:</strong></p>
70
  <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_custom_field_mapping" target="_blank">Documentation on Custom Field Mapping Rules</a></p>
71
- <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#attachment_metadata_mapping" target="_blank">Documentation on updating WordPress "attachment metadata"</a></p>
72
  <p><a href="http://wordpress.org/support/plugin/media-library-assistant" target="_blank">MLA Support Forum</a></p>
58
  <!-- template="mla-add-new" -->
59
  <!-- title="Add New Rule" order="60" -->
60
  <p>The left-hand side of the screen contains all the fields you need to define a new custom field rule. Name is required, and must not have a rule already defined for it; the other fields are not or have default values. There is more information about each field in the text under the value area.</p>
61
+ <p>You can pick from a list of the custom fields already associated with one or more items. If you want to define a new custom field, click "Enter new field" and type the new field's name in the text box. If you want to display or update an "attachment metadata" field, click "Enter new field" and prefix the metadata element name with "meta:"</p>
62
  <p><strong>NOTE:</strong> To save your work and add the rule, you must scroll down to the bottom of the form and click "Add Rule".</p>
63
  <p>You can find complete information on each of the custom field mapping rule fields in the "The custom field rule elements" portion of the "Documentation on Custom Field Mapping Rules" section of the Documentation tab (see the "For more information" link in the sidebar at the right).</p>
64
  <!-- template="mla-read-only" -->
68
  <!-- template="sidebar" -->
69
  <p><strong>For more information:</strong></p>
70
  <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_custom_field_mapping" target="_blank">Documentation on Custom Field Mapping Rules</a></p>
71
+ <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#attachment_metadata_mapping" target="_blank">Documentation on displaying and/or updating WordPress "attachment metadata"</a></p>
72
  <p><a href="http://wordpress.org/support/plugin/media-library-assistant" target="_blank">MLA Support Forum</a></p>
tpls/help-for-settings_page_mla-settings-menu-iptc_exif.tpl CHANGED
@@ -69,4 +69,5 @@ There is no "trash" area or "undo" feature, so use the "Purge Values" and "Delet
69
  <!-- template="sidebar" -->
70
  <p><strong>For more information:</strong></p>
71
  <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_iptc_exif_mapping" target="_blank">Documentation on IPTC/EXIF Mapping Rules</a></p>
 
72
  <p><a href="http://wordpress.org/support/plugin/media-library-assistant" target="_blank">MLA Support Forum</a></p>
69
  <!-- template="sidebar" -->
70
  <p><strong>For more information:</strong></p>
71
  <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_iptc_exif_mapping" target="_blank">Documentation on IPTC/EXIF Mapping Rules</a></p>
72
+ <p><a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#date_iptc_exif_mapping" target="_blank">IPTC/EXIF Mapping and Bulk Editing for the "Uploaded on" Standard Field</a></p>
73
  <p><a href="http://wordpress.org/support/plugin/media-library-assistant" target="_blank">MLA Support Forum</a></p>
tpls/mla-add-new-bulk-edit.tpl CHANGED
@@ -48,6 +48,9 @@
48
  <label class="inline-edit-image-alt"><span class="title">[+ALT Text+]</span><span class="input-text-wrap">
49
  <input type="text" name="image_alt" value="" />
50
  </span></label>
 
 
 
51
  <div class="inline-edit-group">
52
  <label class="inline-edit-post-parent alignleft"><span class="title">[+Parent ID+]</span><span class="input-text-wrap">
53
  <input type="text" name="post_parent" value="" />
@@ -95,6 +98,9 @@
95
  <label class="inline-edit-image-alt"><span class="title">[+ALT Text+]</span><span class="input-text-wrap">
96
  <input type="text" name="image_alt" value="" />
97
  </span></label>
 
 
 
98
  <div class="inline-edit-group">
99
  <label class="inline-edit-post-parent alignleft"><span class="title">[+Parent ID+]</span><span class="input-text-wrap">
100
  <input type="text" name="post_parent" value="" />
48
  <label class="inline-edit-image-alt"><span class="title">[+ALT Text+]</span><span class="input-text-wrap">
49
  <input type="text" name="image_alt" value="" />
50
  </span></label>
51
+ <label class="inline-edit-post-date"><span class="title">[+Uploaded on+]</span><span class="input-text-wrap">
52
+ <input type="text" name="post_date" value="" />
53
+ </span></label>
54
  <div class="inline-edit-group">
55
  <label class="inline-edit-post-parent alignleft"><span class="title">[+Parent ID+]</span><span class="input-text-wrap">
56
  <input type="text" name="post_parent" value="" />
98
  <label class="inline-edit-image-alt"><span class="title">[+ALT Text+]</span><span class="input-text-wrap">
99
  <input type="text" name="image_alt" value="" />
100
  </span></label>
101
+ <label class="inline-edit-post-date"><span class="title">[+Uploaded on+]</span><span class="input-text-wrap">
102
+ <input type="text" name="post_date" value="" />
103
+ </span></label>
104
  <div class="inline-edit-group">
105
  <label class="inline-edit-post-parent alignleft"><span class="title">[+Parent ID+]</span><span class="input-text-wrap">
106
  <input type="text" name="post_parent" value="" />
tpls/mla-option-templates.tpl CHANGED
@@ -1,3 +1,10 @@
 
 
 
 
 
 
 
1
  <!-- template="taxonomy-table" -->
2
  <tr valign="top">
3
  <td colspan="2" class="textleft">
1
+ <!-- template="text" -->
2
+ <tr valign="top"><th scope="row" class="textright">
3
+ [+value+]
4
+ </th><td class="textleft">
5
+ <input name="[+key+]" id="[+key+]" type="text" size="[+size+]" value="[+text+]" />
6
+ <div class="mla-settings-help">&nbsp;&nbsp;[+help+]</div>
7
+ </td></tr>
8
  <!-- template="taxonomy-table" -->
9
  <tr valign="top">
10
  <td colspan="2" class="textleft">