WP Photo Album Plus - Version 7.2.05.003

Version Description

= 7.2.05 =

  • This version addresses various bug fixes and feature requests.
  • This version addresses various security issues.

= 7.2.04 =

  • This version addresses various bug fixes and feature requests.

= 7.2.03 =

  • This version addresses various bug fixes and feature requests.

= 7.2.02 =

  • This version addresses various bug fixes and feature requests.

= 7.2.01 =

  • This version addresses various bug fixes and feature requests.

= 7.2.00 =

  • This version addresses various bug fixes and feature requests.

= 7.1.11 =

  • This version addresses various bug fixes and feature requests.

= 7.1.10 =

  • This version addresses various bug fixes and feature requests.

= 7.1.09 =

  • This version addresses various bug fixes and feature requests.

= 7.1.08 =

  • This version addresses various bug fixes and feature requests.

= 7.1.07 =

  • This version addresses various bug fixes and feature requests.

= 7.1.06 =

  • This version addresses various bug fixes and feature requests.

= 7.1.05 =

  • This version addresses various security issues.
  • This version addresses various bug fixes.

= 7.1.04 =

  • This version addresses various bug fixes.

= 7.1.03 =

  • This version addresses various security issues.
  • This version addresses various bug fixes.

= 7.1.02 =

  • This version addresses various security issues.
  • This version addresses various bug fixes and feature requests.

= 7.1.01 =

  • This version addresses various bug fixes and feature requests.

= 7.1.00 =

  • This version addresses various bug fixes and feature requests.
  • The Photo Album -> Upload Photos and Import Photos admin pages have been substantially improved. Read the changelog for details.

= 7.0.11 =

  • This version addresses various bug fixes and feature requests.

= 7.0.11 =

  • This version addresses various bug fixes

= 7.0.10 =

  • This version addresses various bug fixes

= 7.0.09 =

  • This version addresses various security issues.
  • This version addresses various bug fixes and feature requests.

= 7.0.08 =

  • This version addresses various security issues.
  • This version addresses various bug fixes

= 7.0.07 =

  • This version addresses various security issues.
  • This version addresses various bug fixes

= 7.0.06 =

  • This version addresses various bug fixes
  • This version addresses various security issues.

= 7.0.05 =

  • This version addresses various minor bug fixes and feature requests.
  • This version addresses various security issues.

= 7.0.04 =

  • This version addresses various bug fixes
  • This version addresses various security issues.

= 7.0.03 =

  • This version addresses various minor bug fixes and feature requests.

= 7.0.02 =

  • This version addresses various bug fixes
  • This version addresses various security issues.

= 7.0.01 =

  • This version addresses various minor bug fixes and feature requests.

= 7.0.00 =

  • Shortcode generators for Gutenberg added.
  • This version addresses various minor bug fixes and feature requests.
  • This version addresses various security issues.
  • To prevent spamming and give the users the opportunity to decide when they want us to email them, the mailing system has been revised. Configure Table IX-M to enable various mailing lists, and use the WPPA+ Notify widget for full user flexibility.

= 6.9.21 =

  • This version addresses various bug fixes
  • This version addresses various security issues.

= 6.9.20 =

  • This version addresses various bug fixes

= 6.9.19 =

  • This version addresses various minor bug fixes

= 6.9.18 =

  • This version addresses various minor bug fixes

= 6.9.17 =

  • This version addresses various minor bug fixes and feature requests.
  • This version addresses various security issues.

= 6.9.16 =

  • This version addresses various minor bug fixes and feature requests.
  • This version addresses various security issues.

= 6.9.15 =

  • This version addresses various minor bug fixes and feature requests.
  • This version addresses various security issues.

= 6.9.14 =

  • This version addresses various minor bug fixes and feature requests.
  • This version addresses various security issues.

= 6.9.13 =

  • Security release.

= 6.9.12 =

  • This version addresses various minor bug fixes and performance improvements.

= 6.9.11 =

  • This version addresses various minor bug fixes and performance improvements.

= 6.9.10 =

  • This version addresses various minor bug fixes and performance improvements.

= 6.9.09 =

  • Panorama support phase III.

= 6.9.08 =

  • This version addresses various minor bug fixes and feature requests.
  • Panorama support phase II.

= 6.9.07 =

  • This version addresses various minor bug fixes and feature requests.
  • Panorama support phase I.

= 6.9.06 =

  • This version addresses various minor bug fixes and feature requests.

= 6.9.05 =

  • This version addresses various minor bug fixes and feature requests.

= 6.9.04 =

  • This version addresses various minor bug fixes and feature requests.
  • Local CDN functionality has been added.

= 6.9.03 =

  • This version addresses various minor bug fixes and feature requests.

= 6.9.02 =

  • This version addresses various minor bug fixes and feature requests.

= 6.9.01 =

  • This version addresses various minor bug fixes and feature requests.

= 6.9.00 =

  • This version includes the code for the privacy policy requirements.

= 6.8.09

  • This version addresses various bug fixes and code edits.

= 6.8.08 =

  • This version addresses various minor bug fixes and feature requests.
  • This version offers substantial performance improvements when the box in Table IV-A13: Defer Javascript is ticked. This setting is now recommended and set ticked as the default.
  • For more info on performance improvements and compatibility with optimizers: see the changelog.txt

= 6.8.07 =

  • This version addresses various minor bug fixes and enhancements, and a new widget: Statistics.

= 6.8.06 =

  • This version addresses various minor bug fixes and improved cache handling.

= 6.8.05 =

  • This version addresses various minor bug fixes and feture requests.

= 6.8.04 =

  • This version addresses various display issues and a few fixes of bugs that seldom affected the plugins behaviour.
Download this release

Release Info

Developer opajaap
Plugin Icon wp plugin WP Photo Album Plus
Version 7.2.05.003
Comparing to
See all releases

Code changes from version 7.2.04.005 to 7.2.05.003

changelog.txt CHANGED
@@ -1,11 +1,18 @@
1
WP Photo Album Plus Changelog
2
3
= 7.2.04 =
4
5
* Adding tags by seleciting existing tags resulted in the text: [object HTMLTextAreaElement]. Fixed.
6
* Same for description when using wp editor. Fixed.
7
* Fixed a display issue in the supersearch box when js deferred.
8
- * New setting: Table I-D9: Cover spacing. Works a spacing size between multicolumn covers on a row.
9
* Fixed a typo in the topten widget activation screen.
10
* Breadcrumb can now be displayed when cover type is grid.
11
* Cropping now also works on the classic front-end editor when imagemagick is activated.
1
WP Photo Album Plus Changelog
2
3
+ = 7.2.05 =
4
+
5
+ * Various minor security issues fixed.
6
+ * Layout fix for window resizing photo editor with imagemagick.
7
+ * Magick editing updated photo sizes with thumbnail sizes (on screen only). Fixed.
8
+ * Cropper did not show up when lazy load was active. Fixed.
9
+
10
= 7.2.04 =
11
12
* Adding tags by seleciting existing tags resulted in the text: [object HTMLTextAreaElement]. Fixed.
13
* Same for description when using wp editor. Fixed.
14
* Fixed a display issue in the supersearch box when js deferred.
15
+ * New setting: Table I-D9: Cover spacing. Sets the spacing size between multicolumn covers on a row. Does not work for 'Grid' covers.
16
* Fixed a typo in the topten widget activation screen.
17
* Breadcrumb can now be displayed when cover type is grid.
18
* Cropping now also works on the classic front-end editor when imagemagick is activated.
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
Contributors: opajaap
3
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=OpaJaap@OpaJaap.nl&item_name=WP-Photo-Album-Plus&item_number=Support-Open-Source&currency_code=USD&lc=US
4
Tags: photo, album, slideshow, video, audio, lightbox, iptc, exif, cloudinary, fotomoto, imagemagick, pdf
5
- Version: 7.2.04.005
6
- Stable tag: 7.2.03.006
7
Author: J.N. Breetvelt
8
Author URI: http://www.opajaap.nl/
9
Requires at least: 3.9
@@ -137,6 +137,11 @@ See for the full changelog: <a href="http://www.wppa.nl/changelog/" >The documen
137
138
== Upgrade Notice ==
139
140
= 7.2.04 =
141
142
* This version addresses various bug fixes and feature requests.
2
Contributors: opajaap
3
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=OpaJaap@OpaJaap.nl&item_name=WP-Photo-Album-Plus&item_number=Support-Open-Source&currency_code=USD&lc=US
4
Tags: photo, album, slideshow, video, audio, lightbox, iptc, exif, cloudinary, fotomoto, imagemagick, pdf
5
+ Version: 7.2.05.003
6
+ Stable tag: 7.2.04.005
7
Author: J.N. Breetvelt
8
Author URI: http://www.opajaap.nl/
9
Requires at least: 3.9
137
138
== Upgrade Notice ==
139
140
+ = 7.2.05 =
141
+
142
+ * This version addresses various bug fixes and feature requests.
143
+ * This version addresses various security issues.
144
+
145
= 7.2.04 =
146
147
* This version addresses various bug fixes and feature requests.
wppa-ajax.php CHANGED
@@ -2,7 +2,7 @@
2
/* wppa-ajax.php
3
*
4
* Functions used in ajax requests
5
- * Version 7.2.04
6
*
7
*/
8
@@ -3784,20 +3784,12 @@ function wppa_json_photo_update( $id, $txt, $err = '0', $thumbmod = false, $phot
3784
// Clear cache
3785
wppa_clear_cache();
3786
3787
$data = array();
3788
-
3789
- // Build JSON data string
3790
- $result = '||' . $err . '||{"remark":"' . $txt . '"';
3791
-
3792
$data['remark'] = htmlentities( str_replace( '"', "'", $txt ) );
3793
$data['modified'] = wppa_local_date( '', $t['modified'] );
3794
3795
if ( $thumbmod || $magickmod ) {
3796
- $result .=
3797
- ',"thumbx":"' . $tx . '"' .
3798
- ',"thumby":"' . $ty . '"' .
3799
- ',"thumbfilesize":"' . $tfs . '"' .
3800
- ',"thumburl":"' . wppa_get_thumb_url( $id ) . '"';
3801
3802
$data['thumbx'] = $tx;
3803
$data['thumby'] = $ty;
@@ -3806,32 +3798,23 @@ function wppa_json_photo_update( $id, $txt, $err = '0', $thumbmod = false, $phot
3806
}
3807
3808
if ( $photomod || $magickmod ) {
3809
- $result .=
3810
- ',"photox":"' . $px . '"' .
3811
- ',"photoy":"' . $py . '"' .
3812
- ',"photofilesize":"' . $pfs . '"' .
3813
- ',"photourl":"' . wppa_get_photo_url( $id ) . '"';
3814
-
3815
- $data['photox'] = $tx;
3816
- $data['photoy'] = $ty;
3817
$data['photofilesize'] = $tfs;
3818
$data['photourl'] = wppa_get_photo_url( $id );
3819
}
3820
3821
if ( $photomod || $magickmod ) {
3822
- $result .= ',"magickstack":"' . $t['magickstack'] . '"';
3823
3824
$data['magickstack'] = $t['magickstack'];
3825
}
3826
3827
if ( $thumbmod || $photomod || $magickmod ) {
3828
- $result .= ',"cdnfiles":"' . __( 'none', 'wp-photo-album-plus' ) . '"';
3829
3830
$data['cdnfiles'] = __( 'none', 'wp-photo-album-plus' );
3831
}
3832
3833
- $result .= '}';
3834
-
3835
$result = '||' . $err . '||' . json_encode( $data );
3836
3837
wppa_log( 'dbg', $result );
2
/* wppa-ajax.php
3
*
4
* Functions used in ajax requests
5
+ * Version 7.2.05
6
*
7
*/
8
3784
// Clear cache
3785
wppa_clear_cache();
3786
3787
+ // Build JSON data
3788
$data = array();
3789
$data['remark'] = htmlentities( str_replace( '"', "'", $txt ) );
3790
$data['modified'] = wppa_local_date( '', $t['modified'] );
3791
3792
if ( $thumbmod || $magickmod ) {
3793
3794
$data['thumbx'] = $tx;
3795
$data['thumby'] = $ty;
3798
}
3799
3800
if ( $photomod || $magickmod ) {
3801
+
3802
+ $data['photox'] = $px;
3803
+ $data['photoy'] = $py;
3804
$data['photofilesize'] = $tfs;
3805
$data['photourl'] = wppa_get_photo_url( $id );
3806
}
3807
3808
if ( $photomod || $magickmod ) {
3809
3810
$data['magickstack'] = $t['magickstack'];
3811
}
3812
3813
if ( $thumbmod || $photomod || $magickmod ) {
3814
3815
$data['cdnfiles'] = __( 'none', 'wp-photo-album-plus' );
3816
}
3817
3818
$result = '||' . $err . '||' . json_encode( $data );
3819
3820
wppa_log( 'dbg', $result );
wppa-album-admin-autosave.php CHANGED
@@ -3,7 +3,7 @@
3
* Package: wp-photo-album-plus
4
*
5
* create, edit and delete albums
6
- * Version 7.2.03
7
*
8
*/
9
@@ -97,7 +97,7 @@ global $wppa_revno;
97
}
98
99
echo '<div class="wrap" >
100
- <h2>' . $txt . '</h2>';
101
wppa_album_photos( $ei );
102
echo '</div>';
103
return;
3
* Package: wp-photo-album-plus
4
*
5
* create, edit and delete albums
6
+ * Version 7.2.05
7
*
8
*/
9
97
}
98
99
echo '<div class="wrap" >
100
+ <h2>' . htmlentities( $txt ) . '</h2>';
101
wppa_album_photos( $ei );
102
echo '</div>';
103
return;
wppa-photo-admin-autosave.php CHANGED
@@ -3,7 +3,7 @@
3
* Package: wp-photo-album-plus
4
*
5
* edit and delete photos
6
- * Version 7.2.03
7
*
8
*/
9
@@ -60,7 +60,7 @@ function _wppa_moderate_photos() {
60
echo
61
'<div class="wrap">' .
62
'<h2>' . __( 'Edit photo', 'wp-photo-album-plus' ) . '</h2>';
63
- echo $_GET['just-edit'];
64
wppa_album_photos( '', $photo, '', false );
65
echo
66
'</div>';
@@ -630,7 +630,7 @@ function wppaToggleExif( id, count ) {
630
$big = str_replace( 'xxx', current( $is_video ), $big );
631
echo
632
'<a' .
633
- ' href="' . $big . '"' .
634
' target="_blank"' .
635
' title="' . esc_attr( __( 'Preview fullsize video' , 'wp-photo-album-plus') ) . '"' .
636
' >' .
@@ -651,7 +651,7 @@ function wppaToggleExif( id, count ) {
651
echo
652
'<a' .
653
' id="thumba-' . $id . '"' .
654
- ' href="' . $big . '"' .
655
' target="_blank"' .
656
' title="' . esc_attr( __( 'Preview fullsize photo', 'wp-photo-album-plus' ) ) . '"' .
657
' >' .
@@ -751,7 +751,7 @@ function wppaToggleExif( id, count ) {
751
' type="text"' .
752
' style="width:125px;"' .
753
' onchange="wppaAjaxUpdatePhoto( ' . $id . ', \'exifdtm\', this.value)"' .
754
- ' value="' . $exifdtm . '"' .
755
' />';
756
}
757
else {
@@ -1732,11 +1732,13 @@ function wppaToggleExif( id, count ) {
1732
' ';
1733
1734
// Set cropbox aspect ratio
1735
echo
1736
'<select' .
1737
' onchange="wppaCropper[' . $id . '].setAspectRatio(this.value);"' .
1738
'>' .
1739
'<option value="NaN" >' . __( 'free', 'wp-photo-album-plus' ) . '</option>' .
1740
'<option value="1">' . __( 'square', 'wp-photo-album-plus' ) . '</option>' .
1741
'<option value="1.25">4:5 ' . __( 'landscape', 'wp-photo-album-plus' ) . '</option>' .
1742
'<option value="1.33333">3:4 ' . __( 'landscape', 'wp-photo-album-plus' ) . '</option>' .
@@ -1780,47 +1782,46 @@ function wppaToggleExif( id, count ) {
1780
echo
1781
'<tr>' .
1782
'<td>' .
1783
- '<img' .
1784
- ' id="fs-img-' . $id . '"' .
1785
- ' ' . ( wppa_switch( 'lazy' ) && $count > '1' ? 'data-' : '' ) . 'src="' . wppa_get_photo_url( $id ) . '"' .
1786
- ' style="float:left;max-width:100%;" ' .
1787
- ( wppa_switch( 'lazy' ) && $count > '1' ? ' class="wppa-lazy"' : '' ) .
1788
- ' />' .
1789
-
1790
- '<script>
1791
- window.addEventListener("DOMContentLoaded", function () {
1792
- var image = document.querySelector("#fs-img-' . $id . '");
1793
- var button = document.getElementById("button-' . $id . '");
1794
-
1795
- wppaCropper['.$id.'] = new Cropper(image, {
1796
-
1797
- ready: function (event) {
1798
- wppaCropper['.$id.'].zoomTo(1);
1799
- },
1800
-
1801
- crop: function (event) {
1802
- },
1803
-
1804
- zoomable: false,
1805
- viewMode: 2,
1806
- background: false,
1807
1808
- zoom: function (event) {
1809
- if (event.detail.oldRatio === 1) {
1810
- event.preventDefault();
1811
- }
1812
- },
1813
});
1814
1815
- button.onclick = function () {
1816
- var data = wppaCropper['.$id.'].getData(true);
1817
- var value=data.width+"x"+data.height+(data.x<0?"-":"+")+data.x+(data.y<0?"-":"+")+data.y;
1818
- wppaTryMagick( "' . $id . '", \'crop\', value );
1819
- };
1820
- });
1821
-
1822
- </script>' .
1823
- '<style>.cropper-drag-box{background-color:transparent;}</style>' .
1824
'</td>' .
1825
'</tr>';
1826
3
* Package: wp-photo-album-plus
4
*
5
* edit and delete photos
6
+ * Version 7.2.05
7
*
8
*/
9
60
echo
61
'<div class="wrap">' .
62
'<h2>' . __( 'Edit photo', 'wp-photo-album-plus' ) . '</h2>';
63
+ echo htmlentities( $_GET['just-edit'] );
64
wppa_album_photos( '', $photo, '', false );
65
echo
66
'</div>';
630
$big = str_replace( 'xxx', current( $is_video ), $big );
631
echo
632
'<a' .
633
+ ' href="' . esc_attr( $big ) . '"' .
634
' target="_blank"' .
635
' title="' . esc_attr( __( 'Preview fullsize video' , 'wp-photo-album-plus') ) . '"' .
636
' >' .
651
echo
652
'<a' .
653
' id="thumba-' . $id . '"' .
654
+ ' href="' . esc_attr( $big ) . '"' .
655
' target="_blank"' .
656
' title="' . esc_attr( __( 'Preview fullsize photo', 'wp-photo-album-plus' ) ) . '"' .
657
' >' .
751
' type="text"' .
752
' style="width:125px;"' .
753
' onchange="wppaAjaxUpdatePhoto( ' . $id . ', \'exifdtm\', this.value)"' .
754
+ ' value="' . esc_attr( $exifdtm ) . '"' .
755
' />';
756
}
757
else {
1732
' ';
1733
1734
// Set cropbox aspect ratio
1735
+ $ratio = ( $photoy ? ( $photox / $photoy ) : 'NaN' );
1736
echo
1737
'<select' .
1738
' onchange="wppaCropper[' . $id . '].setAspectRatio(this.value);"' .
1739
'>' .
1740
'<option value="NaN" >' . __( 'free', 'wp-photo-album-plus' ) . '</option>' .
1741
+ '<option value="' . $ratio . '" >' . __( 'original', 'wp-photo-album-plus' ) . '</option>' .
1742
'<option value="1">' . __( 'square', 'wp-photo-album-plus' ) . '</option>' .
1743
'<option value="1.25">4:5 ' . __( 'landscape', 'wp-photo-album-plus' ) . '</option>' .
1744
'<option value="1.33333">3:4 ' . __( 'landscape', 'wp-photo-album-plus' ) . '</option>' .
1782
echo
1783
'<tr>' .
1784
'<td>' .
1785
+ '<div style="display:inline-block;margin-left:25%;width:50%;" >' .
1786
+ '<img' .
1787
+ ' id="fs-img-' . $id . '"' .
1788
+ ' src="' . wppa_get_photo_url( $id ) . '"' .
1789
+ ' style="float:left;max-width:100%;" ' .
1790
+ ( wppa_switch( 'lazy' ) && $count > '1' ? ' class="wppa-lazy"' : '' ) .
1791
+ ' />' .
1792
1793
+ '<script>
1794
+ window.addEventListener("DOMContentLoaded", function () {
1795
+
1796
+ /* Responive does not always works correcly, */
1797
+ /* so we do a manual relace after resizing the window */
1798
+ window.addEventListener("resize", function(){
1799
+ var c = wppaCropper[' . $id . '];
1800
+ var url = document.getElementById("fs-img-' . $id . '").src;
1801
+ c.replace(url);
1802
+ });
1803
+
1804
+ var image = document.querySelector("#fs-img-' . $id . '");
1805
+ var button = document.getElementById("button-' . $id . '");
1806
+
1807
+ wppaCropper['.$id.'] = new Cropper(image, {
1808
+ zoomable: false,
1809
+ viewMode: 2,
1810
+ background: false,
1811
+ dragMode: "move",
1812
+ responsive: true,
1813
+ });
1814
+
1815
+ button.onclick = function () {
1816
+ var data = wppaCropper['.$id.'].getData(true);
1817
+ var value=data.width+"x"+data.height+(data.x<0?"-":"+")+data.x+(data.y<0?"-":"+")+data.y;
1818
+ wppaTryMagick( "' . $id . '", \'crop\', value );
1819
+ };
1820
});
1821
1822
+ </script>' .
1823
+ '<style>.cropper-drag-box{background-color:transparent;}img{max-width:100%}</style>' .
1824
+ '</div>' .
1825
'</td>' .
1826
'</tr>';
1827
wppa-wrappers.php CHANGED
@@ -5,7 +5,7 @@
5
* Contains wrappers for standard php functions
6
* For security and bug reasons
7
*
8
- * Version 7.2.02
9
*
10
*/
11
@@ -154,7 +154,8 @@ function wppa_move_uploaded_file( $from, $to ) {
154
155
$bret = copy( $from, $to ); // Do NOT use wppa_copy here to prevent inf recursion from wppa_copy and wppa_move_uploaded_file
156
if ( $bret ) {
157
- unlink( $from );
158
}
159
}
160
if ( $bret ) {
5
* Contains wrappers for standard php functions
6
* For security and bug reasons
7
*
8
+ * Version 7.2.05
9
*
10
*/
11
154
155
$bret = copy( $from, $to ); // Do NOT use wppa_copy here to prevent inf recursion from wppa_copy and wppa_move_uploaded_file
156
if ( $bret ) {
157
+ // unlink( $from ); // RIPS does not believe that this is safe (7 msgs), although path is checked agains traversal.
158
+ // // So, just do not cleanup our garbage
159
}
160
}
161
if ( $bret ) {
wppa.php CHANGED
@@ -2,7 +2,7 @@
2
/*
3
* Plugin Name: WP Photo Album Plus
4
* Description: Easily manage and display your photo albums and slideshows within your WordPress site.
5
- * Version: 7.2.04.005
6
* Author: J.N. Breetvelt a.k.a. OpaJaap
7
* Author URI: http://wppa.opajaap.nl/
8
* Plugin URI: http://wordpress.org/extend/plugins/wp-photo-album-plus/
@@ -23,7 +23,7 @@ global $wp_version;
23
24
/* WPPA GLOBALS */
25
global $wppa_revno; $wppa_revno = '7204'; // WPPA db version
26
- global $wppa_api_version; $wppa_api_version = '7.2.04.005'; // WPPA software version
27
28
/* Init page js data */
29
global $wppa_js_page_data; $wppa_js_page_data = '';
2
/*
3
* Plugin Name: WP Photo Album Plus
4
* Description: Easily manage and display your photo albums and slideshows within your WordPress site.
5
+ * Version: 7.2.05.003
6
* Author: J.N. Breetvelt a.k.a. OpaJaap
7
* Author URI: http://wppa.opajaap.nl/
8
* Plugin URI: http://wordpress.org/extend/plugins/wp-photo-album-plus/
23
24
/* WPPA GLOBALS */
25
global $wppa_revno; $wppa_revno = '7204'; // WPPA db version
26
+ global $wppa_api_version; $wppa_api_version = '7.2.05.003'; // WPPA software version
27
28
/* Init page js data */
29
global $wppa_js_page_data; $wppa_js_page_data = '';