Version Description
- 24.10.2022 = Fixed: Possible overload of server on the Reports page ( #1102 ) Changed: Plugin Logo ( #1101 ) Fixed: Log query strings for download location ( #1099 ) Fixed: Version's number of downloads wrong ( #1097 ) Added: Protection functionality for Media Library files ( #1096 ) Fixed: Redirect to file when unicode chars are present ( #1095 ) Fixed: Front-end CSS was not enqueued for Gutenberg blocks ( #1094 )
Download this release
Release Info
Developer | raldea89 |
Plugin | Download Monitor |
Version | 4.7.2 |
Comparing to | |
See all releases |
Code changes from version 4.7.1 to 4.7.2
- assets/css/menu.css +0 -85
- assets/css/menu.less +0 -101
- assets/css/menu.min.css +0 -1
- assets/css/others.css +79 -0
- assets/css/others.less +100 -0
- assets/css/others.min.css +1 -0
- assets/js/download-operations.js +52 -0
- assets/js/download-operations.min.js +1 -0
- assets/js/edit-download.js +24 -4
- assets/js/edit-download.min.js +1 -1
- assets/js/insert-download.js +0 -9
- assets/js/insert-download.min.js +0 -1
- assets/js/legacy-upgrader/src/index.ejs +1 -1
- assets/js/reports/reports.js +3 -5
- assets/js/reports/reports.min.js +1 -1
- changelog.txt +9 -0
- download-monitor.php +2 -2
- includes/admin/uninstall/class-dlm-uninstall.php +1 -1
- includes/backwards-compatibility/class-dlm-backwards-compatibility.php +3 -33
- readme.txt +10 -1
- src/Admin/Admin.php +6 -219
- src/Admin/AdminScripts.php +3 -3
- src/Admin/MediaBrowser.php +1 -1
- src/Admin/MediaInsert.php +1 -1
- src/Admin/Settings/Page.php +1 -1
- src/Admin/class-dlm-db-upgrader.php +2 -2
- src/Admin/class-dlm-media-library.php +590 -0
- src/AjaxHandler.php +25 -1
- src/DLM.php +47 -0
- src/DownloadHandler.php +18 -7
- src/FileManager.php +329 -0
- src/Gutenberg.php +5 -0
- src/Logs/LogItem.php +1 -1
- src/PostTypeManager.php +1 -1
- src/Shop/Util/Assets.php +2 -2
- vendor/composer/autoload_classmap.php +1 -0
- vendor/composer/autoload_static.php +1 -0
assets/css/menu.css
DELETED
@@ -1,85 +0,0 @@
|
|
1 |
-
/* Menu */
|
2 |
-
#adminmenu #menu-posts-dlm_download {
|
3 |
-
/* .wp-menu-image:before {
|
4 |
-
content: "\f316";
|
5 |
-
font-family: "dashicons" !important;
|
6 |
-
font-style: normal;
|
7 |
-
font-weight: normal;
|
8 |
-
speak: none;
|
9 |
-
|
10 |
-
display: inline-block;
|
11 |
-
text-decoration: inherit;
|
12 |
-
width: 1em;
|
13 |
-
text-align: center;
|
14 |
-
|
15 |
-
!* For safety - reset parent styles, that can break glyph codes*!
|
16 |
-
font-variant: normal;
|
17 |
-
text-transform: none;
|
18 |
-
|
19 |
-
!* fix buttons height, for twitter bootstrap *!
|
20 |
-
line-height: 1em;
|
21 |
-
}*/
|
22 |
-
}
|
23 |
-
#adminmenu #menu-posts-dlm_download .wp-menu-image.svg {
|
24 |
-
background-size: 40px auto;
|
25 |
-
}
|
26 |
-
#adminmenu #menu-posts-dlm_download ul.wp-submenu li > a {
|
27 |
-
padding: 7px 12px;
|
28 |
-
}
|
29 |
-
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="dlm-lite-vs-pro"] {
|
30 |
-
color: gold;
|
31 |
-
}
|
32 |
-
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit-tags.php?taxonomy=dlm_download_tag&post_type=dlm_download"],
|
33 |
-
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-settings"],
|
34 |
-
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-reports"] {
|
35 |
-
border-bottom: 1px solid hsla(0, 0%, 100%, 0.2);
|
36 |
-
}
|
37 |
-
/* LU upgrade notice */
|
38 |
-
.dlm-lu-upgrade-notice {
|
39 |
-
position: relative;
|
40 |
-
padding: 1em;
|
41 |
-
margin: 3em 1em 1em 0;
|
42 |
-
color: #fff;
|
43 |
-
background: #419ccb;
|
44 |
-
box-shadow: 2px 2px 1px grey;
|
45 |
-
}
|
46 |
-
.dlm-lu-upgrade-notice h3,
|
47 |
-
.dlm-lu-upgrade-notice a {
|
48 |
-
color: #fff;
|
49 |
-
}
|
50 |
-
.dlm-lu-upgrade-notice h3 {
|
51 |
-
margin-top: 0;
|
52 |
-
}
|
53 |
-
.dlm-lu-upgrade-notice p {
|
54 |
-
font-size: 1.05em;
|
55 |
-
}
|
56 |
-
.dlm-lu-upgrade-notice p a {
|
57 |
-
font-weight: bold;
|
58 |
-
}
|
59 |
-
.dlm-lu-upgrade-notice a.dlm-lu-upgrade-notice-hide {
|
60 |
-
position: absolute;
|
61 |
-
top: 10px;
|
62 |
-
right: 10px;
|
63 |
-
text-decoration: none;
|
64 |
-
font-size: 0.95em;
|
65 |
-
}
|
66 |
-
.dlm-onboarding-notice {
|
67 |
-
border-left-color: #419ccb;
|
68 |
-
}
|
69 |
-
.dlm-onboarding-notice:before {
|
70 |
-
display: inline-block;
|
71 |
-
position: absolute;
|
72 |
-
top: 0;
|
73 |
-
left: 0;
|
74 |
-
width: 35px;
|
75 |
-
height: 100%;
|
76 |
-
content: "";
|
77 |
-
background-color: #419ccb;
|
78 |
-
background-image: url('../images/logo.png');
|
79 |
-
background-size: 29px 28px;
|
80 |
-
background-position: 1px center;
|
81 |
-
background-repeat: no-repeat;
|
82 |
-
}
|
83 |
-
.dlm-onboarding-notice p {
|
84 |
-
padding-left: 33px;
|
85 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/css/menu.less
DELETED
@@ -1,101 +0,0 @@
|
|
1 |
-
/* Menu */
|
2 |
-
#adminmenu {
|
3 |
-
#menu-posts-dlm_download {
|
4 |
-
/* .wp-menu-image:before {
|
5 |
-
content: "\f316";
|
6 |
-
font-family: "dashicons" !important;
|
7 |
-
font-style: normal;
|
8 |
-
font-weight: normal;
|
9 |
-
speak: none;
|
10 |
-
|
11 |
-
display: inline-block;
|
12 |
-
text-decoration: inherit;
|
13 |
-
width: 1em;
|
14 |
-
text-align: center;
|
15 |
-
|
16 |
-
!* For safety - reset parent styles, that can break glyph codes*!
|
17 |
-
font-variant: normal;
|
18 |
-
text-transform: none;
|
19 |
-
|
20 |
-
!* fix buttons height, for twitter bootstrap *!
|
21 |
-
line-height: 1em;
|
22 |
-
}*/
|
23 |
-
|
24 |
-
.wp-menu-image.svg {
|
25 |
-
background-size: 40px auto;
|
26 |
-
}
|
27 |
-
|
28 |
-
ul.wp-submenu {
|
29 |
-
|
30 |
-
li {
|
31 |
-
|
32 |
-
& > a {
|
33 |
-
padding:7px 12px;
|
34 |
-
}
|
35 |
-
// Lite vs PRO menu link
|
36 |
-
a[href$="dlm-lite-vs-pro"] {
|
37 |
-
color: gold;
|
38 |
-
}
|
39 |
-
|
40 |
-
a[href$="edit-tags.php?taxonomy=dlm_download_tag&post_type=dlm_download"],
|
41 |
-
a[href$="edit.php?post_type=dlm_download&page=download-monitor-settings"],
|
42 |
-
a[href$="edit.php?post_type=dlm_download&page=download-monitor-reports"]{
|
43 |
-
border-bottom: 1px solid hsla(0,0%,100%,.2);
|
44 |
-
}
|
45 |
-
}
|
46 |
-
}
|
47 |
-
}
|
48 |
-
}
|
49 |
-
|
50 |
-
/* LU upgrade notice */
|
51 |
-
.dlm-lu-upgrade-notice {
|
52 |
-
position: relative;
|
53 |
-
padding: 1em;
|
54 |
-
margin: 3em 1em 1em 0;
|
55 |
-
color: #fff;
|
56 |
-
background: #419ccb;
|
57 |
-
box-shadow: 2px 2px 1px grey;
|
58 |
-
|
59 |
-
h3, a {
|
60 |
-
color: #fff;
|
61 |
-
}
|
62 |
-
h3 {
|
63 |
-
margin-top: 0;
|
64 |
-
}
|
65 |
-
|
66 |
-
p {
|
67 |
-
font-size: 1.05em;
|
68 |
-
a {
|
69 |
-
font-weight: bold;
|
70 |
-
}
|
71 |
-
}
|
72 |
-
a.dlm-lu-upgrade-notice-hide {
|
73 |
-
position: absolute;
|
74 |
-
top: 10px;
|
75 |
-
right: 10px;
|
76 |
-
text-decoration: none;
|
77 |
-
font-size: 0.95em;
|
78 |
-
}
|
79 |
-
}
|
80 |
-
|
81 |
-
.dlm-onboarding-notice {
|
82 |
-
border-left-color: #419ccb;
|
83 |
-
|
84 |
-
&:before {
|
85 |
-
display: inline-block;
|
86 |
-
position:absolute;
|
87 |
-
top:0;
|
88 |
-
left:0;
|
89 |
-
width: 35px;
|
90 |
-
height: 100%;
|
91 |
-
content:"";
|
92 |
-
background-color: #419ccb;
|
93 |
-
background-image: url('../images/logo.png');
|
94 |
-
background-size: 29px 28px;
|
95 |
-
background-position: 1px center;
|
96 |
-
background-repeat: no-repeat;
|
97 |
-
}
|
98 |
-
p {
|
99 |
-
padding-left: 33px;
|
100 |
-
}
|
101 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/css/menu.min.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#adminmenu #menu-posts-dlm_download .wp-menu-image.svg{background-size:40px auto}#adminmenu #menu-posts-dlm_download ul.wp-submenu li>a{padding:7px 12px}#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$=dlm-lite-vs-pro]{color:gold}#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit-tags.php?taxonomy=dlm_download_tag&post_type=dlm_download"],#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-reports"],#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-settings"]{border-bottom:1px solid hsla(0,0%,100%,.2)}.dlm-lu-upgrade-notice{position:relative;padding:1em;margin:3em 1em 1em 0;color:#fff;background:#419ccb;box-shadow:2px 2px 1px grey}.dlm-lu-upgrade-notice a,.dlm-lu-upgrade-notice h3{color:#fff}.dlm-lu-upgrade-notice h3{margin-top:0}.dlm-lu-upgrade-notice p{font-size:1.05em}.dlm-lu-upgrade-notice p a{font-weight:700}.dlm-lu-upgrade-notice a.dlm-lu-upgrade-notice-hide{position:absolute;top:10px;right:10px;text-decoration:none;font-size:.95em}.dlm-onboarding-notice{border-left-color:#419ccb}.dlm-onboarding-notice:before{display:inline-block;position:absolute;top:0;left:0;width:35px;height:100%;content:"";background-color:#419ccb;background-image:url('../images/logo.png');background-size:29px 28px;background-position:1px center;background-repeat:no-repeat}.dlm-onboarding-notice p{padding-left:33px}
|
|
assets/css/others.css
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Menu */
|
2 |
+
#adminmenu #menu-posts-dlm_download ul.wp-submenu li > a {
|
3 |
+
padding: 7px 12px;
|
4 |
+
}
|
5 |
+
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="dlm-lite-vs-pro"] {
|
6 |
+
color: gold;
|
7 |
+
}
|
8 |
+
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit-tags.php?taxonomy=dlm_download_tag&post_type=dlm_download"],
|
9 |
+
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-settings"],
|
10 |
+
#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-reports"] {
|
11 |
+
border-bottom: 1px solid hsla(0, 0%, 100%, 0.2);
|
12 |
+
}
|
13 |
+
/* LU upgrade notice */
|
14 |
+
.dlm-lu-upgrade-notice {
|
15 |
+
position: relative;
|
16 |
+
padding: 1em;
|
17 |
+
margin: 3em 1em 1em 0;
|
18 |
+
color: #fff;
|
19 |
+
background: #419ccb;
|
20 |
+
box-shadow: 2px 2px 1px grey;
|
21 |
+
}
|
22 |
+
.dlm-lu-upgrade-notice h3,
|
23 |
+
.dlm-lu-upgrade-notice a {
|
24 |
+
color: #fff;
|
25 |
+
}
|
26 |
+
.dlm-lu-upgrade-notice h3 {
|
27 |
+
margin-top: 0;
|
28 |
+
}
|
29 |
+
.dlm-lu-upgrade-notice p {
|
30 |
+
font-size: 1.05em;
|
31 |
+
}
|
32 |
+
.dlm-lu-upgrade-notice p a {
|
33 |
+
font-weight: bold;
|
34 |
+
}
|
35 |
+
.dlm-lu-upgrade-notice a.dlm-lu-upgrade-notice-hide {
|
36 |
+
position: absolute;
|
37 |
+
top: 10px;
|
38 |
+
right: 10px;
|
39 |
+
text-decoration: none;
|
40 |
+
font-size: 0.95em;
|
41 |
+
}
|
42 |
+
.dlm-onboarding-notice {
|
43 |
+
border-left-color: #419ccb;
|
44 |
+
}
|
45 |
+
.dlm-onboarding-notice:before {
|
46 |
+
display: inline-block;
|
47 |
+
position: absolute;
|
48 |
+
top: 0;
|
49 |
+
left: 0;
|
50 |
+
width: 35px;
|
51 |
+
height: 100%;
|
52 |
+
content: "";
|
53 |
+
background-color: #419ccb;
|
54 |
+
background-image: url('../images/logo.png');
|
55 |
+
background-size: 29px 28px;
|
56 |
+
background-position: 1px center;
|
57 |
+
background-repeat: no-repeat;
|
58 |
+
}
|
59 |
+
.dlm-onboarding-notice p {
|
60 |
+
padding-left: 33px;
|
61 |
+
}
|
62 |
+
/**
|
63 |
+
* Media Library visual indicator that a file is protected by DLM
|
64 |
+
*/
|
65 |
+
.dlm-ml-protected-file .thumbnail {
|
66 |
+
box-shadow: 0 0 0.5rem rgba(0, 0, 255, 0.45);
|
67 |
+
}
|
68 |
+
.dlm-ml-protected-file:after {
|
69 |
+
content: "";
|
70 |
+
background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyOCAyOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI4IDE0QzI4IDYuMjY4MDEgMjEuNzMyIDAgMTQgMEM2LjI2ODAxIDAgMCA2LjI2ODAxIDAgMTRDMCAyMS43MzIgNi4yNjgwMSAyOCAxNCAyOEMyMS43MzIgMjggMjggMjEuNzMyIDI4IDE0WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzM2XzM5KSIvPgo8cGF0aCBkPSJNMTcuNjE1NCAxMi41NjI1SDE3LjM3NVY5LjUxNTYyQzE3LjM3NSA4LjU4MzIyIDE2Ljk5NTEgNy42ODkwMSAxNi4zMTg5IDcuMDI5N0MxNS42NDI3IDYuMzcwNCAxNC43MjU1IDYgMTMuNzY5MiA2QzEyLjgxMjkgNiAxMS44OTU4IDYuMzcwNCAxMS4yMTk2IDcuMDI5N0MxMC41NDM0IDcuNjg5MDEgMTAuMTYzNSA4LjU4MzIyIDEwLjE2MzUgOS41MTU2MlYxMi41NjI1SDkuOTIzMDhDOS40MTMwNSAxMi41NjI1IDguOTIzOSAxMi43NiA4LjU2MzI2IDEzLjExMTdDOC4yMDI2MSAxMy40NjMzIDggMTMuOTQwMiA4IDE0LjQzNzVWMTkuMTI1QzggMTkuNjIyMyA4LjIwMjYxIDIwLjA5OTIgOC41NjMyNiAyMC40NTA4QzguOTIzOSAyMC44MDI1IDkuNDEzMDUgMjEgOS45MjMwOCAyMUgxNy42MTU0QzE4LjEyNTQgMjEgMTguNjE0NiAyMC44MDI1IDE4Ljk3NTIgMjAuNDUwOEMxOS4zMzU5IDIwLjA5OTIgMTkuNTM4NSAxOS42MjIzIDE5LjUzODUgMTkuMTI1VjE0LjQzNzVDMTkuNTM4NSAxMy45NDAyIDE5LjMzNTkgMTMuNDYzMyAxOC45NzUyIDEzLjExMTdDMTguNjE0NiAxMi43NiAxOC4xMjU0IDEyLjU2MjUgMTcuNjE1NCAxMi41NjI1VjEyLjU2MjVaTTExLjEyNSA5LjUxNTYyQzExLjEyNSA4LjgzMTg2IDExLjQwMzYgOC4xNzYxMSAxMS44OTk1IDcuNjkyNjJDMTIuMzk1NCA3LjIwOTEyIDEzLjA2NzkgNi45Mzc1IDEzLjc2OTIgNi45Mzc1QzE0LjQ3MDUgNi45Mzc1IDE1LjE0MzEgNy4yMDkxMiAxNS42MzkgNy42OTI2MkMxNi4xMzQ5IDguMTc2MTEgMTYuNDEzNSA4LjgzMTg2IDE2LjQxMzUgOS41MTU2MlYxMi41NjI1SDExLjEyNVY5LjUxNTYyWk0xNC4yNSAxNy45NTMxQzE0LjI1IDE4LjA3NzQgMTQuMTk5MyAxOC4xOTY3IDE0LjEwOTIgMTguMjg0NkMxNC4wMTkgMTguMzcyNSAxMy44OTY3IDE4LjQyMTkgMTMuNzY5MiAxOC40MjE5QzEzLjY0MTcgMTguNDIxOSAxMy41MTk0IDE4LjM3MjUgMTMuNDI5MyAxOC4yODQ2QzEzLjMzOTEgMTguMTk2NyAxMy4yODg1IDE4LjA3NzQgMTMuMjg4NSAxNy45NTMxVjE1LjYwOTRDMTMuMjg4NSAxNS40ODUxIDEzLjMzOTEgMTUuMzY1OCAxMy40MjkzIDE1LjI3NzlDMTMuNTE5NCAxNS4xOSAxMy42NDE3IDE1LjE0MDYgMTMuNzY5MiAxNS4xNDA2QzEzLjg5NjcgMTUuMTQwNiAxNC4wMTkgMTUuMTkgMTQuMTA5MiAxNS4yNzc5QzE0LjE5OTMgMTUuMzY1OCAxNC4yNSAxNS40ODUxIDE0LjI1IDE1LjYwOTRWMTcuOTUzMVoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMzZfMzkiIHgxPSItNy41NDY4NyIgeTE9Ii00LjM3NSIgeDI9IjI1LjU5MzciIHkyPSIyOC43NjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIG9mZnNldD0iMC4xMTAxMTMiIHN0b3AtY29sb3I9IiM1RERFRkIiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ0MzU2OCIgc3RvcC1jb2xvcj0iIzQxOUJDQSIvPgo8c3RvcCBvZmZzZXQ9IjAuNjM2MTIyIiBzdG9wLWNvbG9yPSIjMDA4Q0Q1Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAyNUVBMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=");
|
71 |
+
display: block;
|
72 |
+
width: 20px;
|
73 |
+
height: 20px;
|
74 |
+
z-index: 999;
|
75 |
+
position: absolute;
|
76 |
+
top: 15px;
|
77 |
+
right: 15px;
|
78 |
+
background-size: contain;
|
79 |
+
}
|
assets/css/others.less
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Menu */
|
2 |
+
#adminmenu {
|
3 |
+
#menu-posts-dlm_download {
|
4 |
+
|
5 |
+
ul.wp-submenu {
|
6 |
+
|
7 |
+
li {
|
8 |
+
|
9 |
+
& > a {
|
10 |
+
padding:7px 12px;
|
11 |
+
}
|
12 |
+
// Lite vs PRO menu link
|
13 |
+
a[href$="dlm-lite-vs-pro"] {
|
14 |
+
color: gold;
|
15 |
+
}
|
16 |
+
|
17 |
+
a[href$="edit-tags.php?taxonomy=dlm_download_tag&post_type=dlm_download"],
|
18 |
+
a[href$="edit.php?post_type=dlm_download&page=download-monitor-settings"],
|
19 |
+
a[href$="edit.php?post_type=dlm_download&page=download-monitor-reports"]{
|
20 |
+
border-bottom: 1px solid hsla(0,0%,100%,.2);
|
21 |
+
}
|
22 |
+
}
|
23 |
+
}
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
/* LU upgrade notice */
|
28 |
+
.dlm-lu-upgrade-notice {
|
29 |
+
position: relative;
|
30 |
+
padding: 1em;
|
31 |
+
margin: 3em 1em 1em 0;
|
32 |
+
color: #fff;
|
33 |
+
background: #419ccb;
|
34 |
+
box-shadow: 2px 2px 1px grey;
|
35 |
+
|
36 |
+
h3, a {
|
37 |
+
color: #fff;
|
38 |
+
}
|
39 |
+
h3 {
|
40 |
+
margin-top: 0;
|
41 |
+
}
|
42 |
+
|
43 |
+
p {
|
44 |
+
font-size: 1.05em;
|
45 |
+
a {
|
46 |
+
font-weight: bold;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
a.dlm-lu-upgrade-notice-hide {
|
50 |
+
position: absolute;
|
51 |
+
top: 10px;
|
52 |
+
right: 10px;
|
53 |
+
text-decoration: none;
|
54 |
+
font-size: 0.95em;
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
.dlm-onboarding-notice {
|
59 |
+
border-left-color: #419ccb;
|
60 |
+
|
61 |
+
&:before {
|
62 |
+
display: inline-block;
|
63 |
+
position:absolute;
|
64 |
+
top:0;
|
65 |
+
left:0;
|
66 |
+
width: 35px;
|
67 |
+
height: 100%;
|
68 |
+
content:"";
|
69 |
+
background-color: #419ccb;
|
70 |
+
background-image: url('../images/logo.png');
|
71 |
+
background-size: 29px 28px;
|
72 |
+
background-position: 1px center;
|
73 |
+
background-repeat: no-repeat;
|
74 |
+
}
|
75 |
+
p {
|
76 |
+
padding-left: 33px;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Media Library visual indicator that a file is protected by DLM
|
82 |
+
*/
|
83 |
+
|
84 |
+
.dlm-ml-protected-file {
|
85 |
+
.thumbnail {
|
86 |
+
box-shadow: 0 0 .5rem rgba(0,0,255,.45);
|
87 |
+
}
|
88 |
+
&:after{
|
89 |
+
content:"";
|
90 |
+
background:url( "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyOCAyOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI4IDE0QzI4IDYuMjY4MDEgMjEuNzMyIDAgMTQgMEM2LjI2ODAxIDAgMCA2LjI2ODAxIDAgMTRDMCAyMS43MzIgNi4yNjgwMSAyOCAxNCAyOEMyMS43MzIgMjggMjggMjEuNzMyIDI4IDE0WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzM2XzM5KSIvPgo8cGF0aCBkPSJNMTcuNjE1NCAxMi41NjI1SDE3LjM3NVY5LjUxNTYyQzE3LjM3NSA4LjU4MzIyIDE2Ljk5NTEgNy42ODkwMSAxNi4zMTg5IDcuMDI5N0MxNS42NDI3IDYuMzcwNCAxNC43MjU1IDYgMTMuNzY5MiA2QzEyLjgxMjkgNiAxMS44OTU4IDYuMzcwNCAxMS4yMTk2IDcuMDI5N0MxMC41NDM0IDcuNjg5MDEgMTAuMTYzNSA4LjU4MzIyIDEwLjE2MzUgOS41MTU2MlYxMi41NjI1SDkuOTIzMDhDOS40MTMwNSAxMi41NjI1IDguOTIzOSAxMi43NiA4LjU2MzI2IDEzLjExMTdDOC4yMDI2MSAxMy40NjMzIDggMTMuOTQwMiA4IDE0LjQzNzVWMTkuMTI1QzggMTkuNjIyMyA4LjIwMjYxIDIwLjA5OTIgOC41NjMyNiAyMC40NTA4QzguOTIzOSAyMC44MDI1IDkuNDEzMDUgMjEgOS45MjMwOCAyMUgxNy42MTU0QzE4LjEyNTQgMjEgMTguNjE0NiAyMC44MDI1IDE4Ljk3NTIgMjAuNDUwOEMxOS4zMzU5IDIwLjA5OTIgMTkuNTM4NSAxOS42MjIzIDE5LjUzODUgMTkuMTI1VjE0LjQzNzVDMTkuNTM4NSAxMy45NDAyIDE5LjMzNTkgMTMuNDYzMyAxOC45NzUyIDEzLjExMTdDMTguNjE0NiAxMi43NiAxOC4xMjU0IDEyLjU2MjUgMTcuNjE1NCAxMi41NjI1VjEyLjU2MjVaTTExLjEyNSA5LjUxNTYyQzExLjEyNSA4LjgzMTg2IDExLjQwMzYgOC4xNzYxMSAxMS44OTk1IDcuNjkyNjJDMTIuMzk1NCA3LjIwOTEyIDEzLjA2NzkgNi45Mzc1IDEzLjc2OTIgNi45Mzc1QzE0LjQ3MDUgNi45Mzc1IDE1LjE0MzEgNy4yMDkxMiAxNS42MzkgNy42OTI2MkMxNi4xMzQ5IDguMTc2MTEgMTYuNDEzNSA4LjgzMTg2IDE2LjQxMzUgOS41MTU2MlYxMi41NjI1SDExLjEyNVY5LjUxNTYyWk0xNC4yNSAxNy45NTMxQzE0LjI1IDE4LjA3NzQgMTQuMTk5MyAxOC4xOTY3IDE0LjEwOTIgMTguMjg0NkMxNC4wMTkgMTguMzcyNSAxMy44OTY3IDE4LjQyMTkgMTMuNzY5MiAxOC40MjE5QzEzLjY0MTcgMTguNDIxOSAxMy41MTk0IDE4LjM3MjUgMTMuNDI5MyAxOC4yODQ2QzEzLjMzOTEgMTguMTk2NyAxMy4yODg1IDE4LjA3NzQgMTMuMjg4NSAxNy45NTMxVjE1LjYwOTRDMTMuMjg4NSAxNS40ODUxIDEzLjMzOTEgMTUuMzY1OCAxMy40MjkzIDE1LjI3NzlDMTMuNTE5NCAxNS4xOSAxMy42NDE3IDE1LjE0MDYgMTMuNzY5MiAxNS4xNDA2QzEzLjg5NjcgMTUuMTQwNiAxNC4wMTkgMTUuMTkgMTQuMTA5MiAxNS4yNzc5QzE0LjE5OTMgMTUuMzY1OCAxNC4yNSAxNS40ODUxIDE0LjI1IDE1LjYwOTRWMTcuOTUzMVoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMzZfMzkiIHgxPSItNy41NDY4NyIgeTE9Ii00LjM3NSIgeDI9IjI1LjU5MzciIHkyPSIyOC43NjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIG9mZnNldD0iMC4xMTAxMTMiIHN0b3AtY29sb3I9IiM1RERFRkIiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ0MzU2OCIgc3RvcC1jb2xvcj0iIzQxOUJDQSIvPgo8c3RvcCBvZmZzZXQ9IjAuNjM2MTIyIiBzdG9wLWNvbG9yPSIjMDA4Q0Q1Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAyNUVBMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=" );
|
91 |
+
display:block;
|
92 |
+
width:20px;
|
93 |
+
height:20px;
|
94 |
+
z-index:999;
|
95 |
+
position: absolute;
|
96 |
+
top:15px;
|
97 |
+
right:15px;
|
98 |
+
background-size:contain;
|
99 |
+
}
|
100 |
+
}
|
assets/css/others.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#adminmenu #menu-posts-dlm_download ul.wp-submenu li>a{padding:7px 12px}#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$=dlm-lite-vs-pro]{color:gold}#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit-tags.php?taxonomy=dlm_download_tag&post_type=dlm_download"],#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-reports"],#adminmenu #menu-posts-dlm_download ul.wp-submenu li a[href$="edit.php?post_type=dlm_download&page=download-monitor-settings"]{border-bottom:1px solid hsla(0,0%,100%,.2)}.dlm-lu-upgrade-notice{position:relative;padding:1em;margin:3em 1em 1em 0;color:#fff;background:#419ccb;box-shadow:2px 2px 1px grey}.dlm-lu-upgrade-notice a,.dlm-lu-upgrade-notice h3{color:#fff}.dlm-lu-upgrade-notice h3{margin-top:0}.dlm-lu-upgrade-notice p{font-size:1.05em}.dlm-lu-upgrade-notice p a{font-weight:700}.dlm-lu-upgrade-notice a.dlm-lu-upgrade-notice-hide{position:absolute;top:10px;right:10px;text-decoration:none;font-size:.95em}.dlm-onboarding-notice{border-left-color:#419ccb}.dlm-onboarding-notice:before{display:inline-block;position:absolute;top:0;left:0;width:35px;height:100%;content:"";background-color:#419ccb;background-image:url('../images/logo.png');background-size:29px 28px;background-position:1px center;background-repeat:no-repeat}.dlm-onboarding-notice p{padding-left:33px}.dlm-ml-protected-file .thumbnail{box-shadow:0 0 .5rem rgba(0,0,255,.45)}.dlm-ml-protected-file:after{content:"";background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyOCAyOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI4IDE0QzI4IDYuMjY4MDEgMjEuNzMyIDAgMTQgMEM2LjI2ODAxIDAgMCA2LjI2ODAxIDAgMTRDMCAyMS43MzIgNi4yNjgwMSAyOCAxNCAyOEMyMS43MzIgMjggMjggMjEuNzMyIDI4IDE0WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzM2XzM5KSIvPgo8cGF0aCBkPSJNMTcuNjE1NCAxMi41NjI1SDE3LjM3NVY5LjUxNTYyQzE3LjM3NSA4LjU4MzIyIDE2Ljk5NTEgNy42ODkwMSAxNi4zMTg5IDcuMDI5N0MxNS42NDI3IDYuMzcwNCAxNC43MjU1IDYgMTMuNzY5MiA2QzEyLjgxMjkgNiAxMS44OTU4IDYuMzcwNCAxMS4yMTk2IDcuMDI5N0MxMC41NDM0IDcuNjg5MDEgMTAuMTYzNSA4LjU4MzIyIDEwLjE2MzUgOS41MTU2MlYxMi41NjI1SDkuOTIzMDhDOS40MTMwNSAxMi41NjI1IDguOTIzOSAxMi43NiA4LjU2MzI2IDEzLjExMTdDOC4yMDI2MSAxMy40NjMzIDggMTMuOTQwMiA4IDE0LjQzNzVWMTkuMTI1QzggMTkuNjIyMyA4LjIwMjYxIDIwLjA5OTIgOC41NjMyNiAyMC40NTA4QzguOTIzOSAyMC44MDI1IDkuNDEzMDUgMjEgOS45MjMwOCAyMUgxNy42MTU0QzE4LjEyNTQgMjEgMTguNjE0NiAyMC44MDI1IDE4Ljk3NTIgMjAuNDUwOEMxOS4zMzU5IDIwLjA5OTIgMTkuNTM4NSAxOS42MjIzIDE5LjUzODUgMTkuMTI1VjE0LjQzNzVDMTkuNTM4NSAxMy45NDAyIDE5LjMzNTkgMTMuNDYzMyAxOC45NzUyIDEzLjExMTdDMTguNjE0NiAxMi43NiAxOC4xMjU0IDEyLjU2MjUgMTcuNjE1NCAxMi41NjI1VjEyLjU2MjVaTTExLjEyNSA5LjUxNTYyQzExLjEyNSA4LjgzMTg2IDExLjQwMzYgOC4xNzYxMSAxMS44OTk1IDcuNjkyNjJDMTIuMzk1NCA3LjIwOTEyIDEzLjA2NzkgNi45Mzc1IDEzLjc2OTIgNi45Mzc1QzE0LjQ3MDUgNi45Mzc1IDE1LjE0MzEgNy4yMDkxMiAxNS42MzkgNy42OTI2MkMxNi4xMzQ5IDguMTc2MTEgMTYuNDEzNSA4LjgzMTg2IDE2LjQxMzUgOS41MTU2MlYxMi41NjI1SDExLjEyNVY5LjUxNTYyWk0xNC4yNSAxNy45NTMxQzE0LjI1IDE4LjA3NzQgMTQuMTk5MyAxOC4xOTY3IDE0LjEwOTIgMTguMjg0NkMxNC4wMTkgMTguMzcyNSAxMy44OTY3IDE4LjQyMTkgMTMuNzY5MiAxOC40MjE5QzEzLjY0MTcgMTguNDIxOSAxMy41MTk0IDE4LjM3MjUgMTMuNDI5MyAxOC4yODQ2QzEzLjMzOTEgMTguMTk2NyAxMy4yODg1IDE4LjA3NzQgMTMuMjg4NSAxNy45NTMxVjE1LjYwOTRDMTMuMjg4NSAxNS40ODUxIDEzLjMzOTEgMTUuMzY1OCAxMy40MjkzIDE1LjI3NzlDMTMuNTE5NCAxNS4xOSAxMy42NDE3IDE1LjE0MDYgMTMuNzY5MiAxNS4xNDA2QzEzLjg5NjcgMTUuMTQwNiAxNC4wMTkgMTUuMTkgMTQuMTA5MiAxNS4yNzc5QzE0LjE5OTMgMTUuMzY1OCAxNC4yNSAxNS40ODUxIDE0LjI1IDE1LjYwOTRWMTcuOTUzMVoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMzZfMzkiIHgxPSItNy41NDY4NyIgeTE9Ii00LjM3NSIgeDI9IjI1LjU5MzciIHkyPSIyOC43NjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIG9mZnNldD0iMC4xMTAxMTMiIHN0b3AtY29sb3I9IiM1RERFRkIiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ0MzU2OCIgc3RvcC1jb2xvcj0iIzQxOUJDQSIvPgo8c3RvcCBvZmZzZXQ9IjAuNjM2MTIyIiBzdG9wLWNvbG9yPSIjMDA4Q0Q1Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAyNUVBMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=");display:block;width:20px;height:20px;z-index:999;position:absolute;top:15px;right:15px;background-size:contain}
|
assets/js/download-operations.js
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( function ($) {
|
2 |
+
// Browse for file
|
3 |
+
jQuery( 'body' ).on( 'click', 'a.dlm_insert_download', function () {
|
4 |
+
|
5 |
+
tb_show( dlm_id_strings.insert_download, 'media-upload.php?type=add_download&from=wpdlm01&TB_iframe=true&height=200' );
|
6 |
+
|
7 |
+
return false;
|
8 |
+
} );
|
9 |
+
|
10 |
+
$(document).on('click', '#dlm-protect-file', function (e) {
|
11 |
+
// Prevent default for form submission
|
12 |
+
e.preventDefault();
|
13 |
+
|
14 |
+
const objectData = $(this).data(),
|
15 |
+
button = $(this),
|
16 |
+
buttonText = button.text(),
|
17 |
+
data = {
|
18 |
+
action : ('protect_file' === objectData.action) ? 'dlm_protect_file' : 'dlm_unprotect_file',
|
19 |
+
title : objectData.title,
|
20 |
+
_ajax_nonce : objectData.nonce,
|
21 |
+
user_id : objectData.user_id,
|
22 |
+
file : objectData.file,
|
23 |
+
attachment_id: objectData.post_id
|
24 |
+
}
|
25 |
+
button.attr('disabled', 'disabled');
|
26 |
+
button.text('Please wait...');
|
27 |
+
|
28 |
+
$.post(ajaxurl, data, function (response) {
|
29 |
+
if (response.success) {
|
30 |
+
button.text(response.data.text);
|
31 |
+
if (response.data.url) {
|
32 |
+
button.parents('.attachment-info').find('#attachment-details-two-column-copy-link').val(response.data.url);
|
33 |
+
jQuery('#attachment_url').val(response.data.url);
|
34 |
+
}
|
35 |
+
const nextAction = ('protect_file' === objectData.action) ? 'unprotect_file' : 'protect_file';
|
36 |
+
button.data('action', nextAction);
|
37 |
+
|
38 |
+
setTimeout(function () {
|
39 |
+
const nextButtonText = ('protect_file' === nextAction) ? 'Protect File' : 'Unprotect File';
|
40 |
+
button.text(nextButtonText);
|
41 |
+
button.removeAttr('disabled');
|
42 |
+
}, 3000);
|
43 |
+
} else {
|
44 |
+
button.text(response.data);
|
45 |
+
setTimeout(function () {
|
46 |
+
button.text(buttonText);
|
47 |
+
button.removeAttr('disabled');
|
48 |
+
}, 3000);
|
49 |
+
}
|
50 |
+
});
|
51 |
+
});
|
52 |
+
});
|
assets/js/download-operations.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery(function(n){jQuery("body").on("click","a.dlm_insert_download",function(){return tb_show(dlm_id_strings.insert_download,"media-upload.php?type=add_download&from=wpdlm01&TB_iframe=true&height=200"),!1}),n(document).on("click","#dlm-protect-file",function(t){t.preventDefault();const a=n(this).data(),i=n(this),o=i.text(),e={action:"protect_file"===a.action?"dlm_protect_file":"dlm_unprotect_file",title:a.title,_ajax_nonce:a.nonce,user_id:a.user_id,file:a.file,attachment_id:a.post_id};i.attr("disabled","disabled"),i.text("Please wait..."),n.post(ajaxurl,e,function(t){if(t.success){i.text(t.data.text),t.data.url&&(i.parents(".attachment-info").find("#attachment-details-two-column-copy-link").val(t.data.url),jQuery("#attachment_url").val(t.data.url));const e="protect_file"===a.action?"unprotect_file":"protect_file";i.data("action",e),setTimeout(function(){var t="protect_file"==e?"Protect File":"Unprotect File";i.text(t),i.removeAttr("disabled")},3e3)}else i.text(t.data),setTimeout(function(){i.text(o),i.removeAttr("disabled")},3e3)})})});
|
assets/js/edit-download.js
CHANGED
@@ -54,7 +54,8 @@ jQuery(function ($) {
|
|
54 |
* @param {*} file
|
55 |
*/
|
56 |
dlmAddFileToPath: function (up, file) {
|
57 |
-
const fileUrl
|
|
|
58 |
// Check if is subjective upload or general one
|
59 |
if ('plupload-browse-button' !== jQuery(up.settings.browse_button).attr('id')) {
|
60 |
const fileURLs = jQuery(up.settings.browse_button).parents('.dlm-file-version__row').find('textarea');
|
@@ -63,7 +64,7 @@ jQuery(function ($) {
|
|
63 |
let filePaths = fileURLs.val();
|
64 |
filePaths = filePaths ? filePaths + "\n" + fileUrl : fileUrl;
|
65 |
fileURLs.val(filePaths);
|
66 |
-
dlmEditInstance.afterAddFile(fileURLs);
|
67 |
} else {
|
68 |
// It's a general update so we need to create a new File Version
|
69 |
dlmEditInstance.addNewFile();
|
@@ -81,7 +82,7 @@ jQuery(function ($) {
|
|
81 |
if (null !== version) {
|
82 |
versionInpout.val(version);
|
83 |
}
|
84 |
-
dlmEditInstance.afterAddFile(fileURLs);
|
85 |
// Unbind event
|
86 |
object.off(e);
|
87 |
});
|
@@ -710,9 +711,28 @@ jQuery(function ($) {
|
|
710 |
*
|
711 |
* @param $element
|
712 |
*/
|
713 |
-
afterAddFile($element) {
|
714 |
$element.parents('.dlm-file-version__row').find('.dlm-file-version__drag_and_drop').addClass('hidden');
|
715 |
$element.parents('.dlm-file-version__row').find('.dlm-file-version__file_present').removeClass('hidden');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
716 |
}
|
717 |
}
|
718 |
|
54 |
* @param {*} file
|
55 |
*/
|
56 |
dlmAddFileToPath: function (up, file) {
|
57 |
+
const fileUrl = file.attachment.attributes.url;
|
58 |
+
|
59 |
// Check if is subjective upload or general one
|
60 |
if ('plupload-browse-button' !== jQuery(up.settings.browse_button).attr('id')) {
|
61 |
const fileURLs = jQuery(up.settings.browse_button).parents('.dlm-file-version__row').find('textarea');
|
64 |
let filePaths = fileURLs.val();
|
65 |
filePaths = filePaths ? filePaths + "\n" + fileUrl : fileUrl;
|
66 |
fileURLs.val(filePaths);
|
67 |
+
dlmEditInstance.afterAddFile(fileURLs, file, up);
|
68 |
} else {
|
69 |
// It's a general update so we need to create a new File Version
|
70 |
dlmEditInstance.addNewFile();
|
82 |
if (null !== version) {
|
83 |
versionInpout.val(version);
|
84 |
}
|
85 |
+
dlmEditInstance.afterAddFile(fileURLs, file, up);
|
86 |
// Unbind event
|
87 |
object.off(e);
|
88 |
});
|
711 |
*
|
712 |
* @param $element
|
713 |
*/
|
714 |
+
afterAddFile($element, file = null, up = null) {
|
715 |
$element.parents('.dlm-file-version__row').find('.dlm-file-version__drag_and_drop').addClass('hidden');
|
716 |
$element.parents('.dlm-file-version__row').find('.dlm-file-version__file_present').removeClass('hidden');
|
717 |
+
if ( null !== file && null !== up ) {
|
718 |
+
const file_id = file.attachment.id,
|
719 |
+
nonce = $('#dlm-ajax-nonce-add-file').val(),
|
720 |
+
download_id = parseInt(jQuery('input#post_ID').val()),
|
721 |
+
version_id = $element.parents('.downloadable_files').find( '.downloadable_file' ).first().data('file'),
|
722 |
+
data = {
|
723 |
+
action : 'dlm_update_file_meta',
|
724 |
+
file_id : file_id,
|
725 |
+
version_id : version_id,
|
726 |
+
download_id: download_id,
|
727 |
+
nonce : nonce
|
728 |
+
};
|
729 |
+
|
730 |
+
jQuery.post(ajaxurl, data, function (response) {
|
731 |
+
if (!response.success) {
|
732 |
+
console.log('Error saving attachment meta');
|
733 |
+
}
|
734 |
+
});
|
735 |
+
}
|
736 |
}
|
737 |
}
|
738 |
|
assets/js/edit-download.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(function(d){var t=[],i={};function o(){jQuery(".downloadable_files .downloadable_file").each(function(e,n){jQuery(".file_menu_order",n).val(parseInt(jQuery(n).index(".downloadable_files .downloadable_file")))})}jQuery(".dlm-metabox.closed").each(function(){jQuery(this).find(".dlm-metabox-content").hide()}),jQuery(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0}),jQuery(".downloadable_files").sortable({items:".downloadable_file",cursor:"move",axis:"y",handle:"h3",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"dlm-metabox-sortable-placeholder",start:function(e,n){n.item.css("background-color","#f6f6f6")},stop:function(e,n){n.item.removeAttr("style"),o()}}),window.send_to_browse_file_url=function(e){e&&((old=jQuery.trim(jQuery(downloadable_files_field).val()))&&(old+="\n"),jQuery(downloadable_files_field).val(old+e)),tb_remove(),window.send_to_editor=window.send_to_editor_default},new class{constructor(){(dlmEditInstance=this).init()}init(){this.createUploaders(),this.initUploaders(),this.newFileAction(),this.removeFileAction(),this.clickActions()}createUploaders(){var e=Backbone.Model.extend({initialize:function(e){this.uploaderOptions=e,dlmUploaderInstance=this;const n=new wp.Uploader(dlmUploaderInstance.uploaderOptions),o=n.dropzone;o.on("dropzone:enter",dlmUploaderInstance.show),o.on("dropzone:leave",dlmUploaderInstance.hide),n.uploader.bind("FilesAdded",dlmUploaderInstance.dlmFileAdded),n.uploader.bind("FileUploaded",dlmUploaderInstance.dlmAddFileToPath),n.uploader.bind("Error",dlmUploaderInstance.dlmUploadError),n.uploader.bind("UploadProgress",dlmUploaderInstance.uploadProgress)},dlmAddFileToPath:function(i,r){const a=r.attachment.attributes.url;if("plupload-browse-button"!==jQuery(i.settings.browse_button).attr("id")){const n=jQuery(i.settings.browse_button).parents(".dlm-file-version__row").find("textarea");dlmUploaderInstance.endUploadProgress(n.parents(".dlm-file-version__row"));let e=n.val();e=e?e+"\n"+a:a,n.val(e),dlmEditInstance.afterAddFile(n)}else dlmEditInstance.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this),o=jQuery(".dlm-metaboxes.downloadable_files").find(".downloadable_file").first(),l=o.find("textarea"),t=dlmUploaderInstance.retrieveVersion(r),d=o.find('input[name*="downloadable_file_version"]');dlmUploaderInstance.endUploadProgress(jQuery(i.settings.container).parents("#dlm-new-upload")),l.val(a),null!==t&&d.val(t),dlmEditInstance.afterAddFile(l),n.off(e)})},dlmFileAdded:function(e,n){if("plupload-browse-button"!==jQuery(e.settings.browse_button).attr("id")){const o=jQuery(e.settings.browse_button).parents(".dlm-file-version__row").find("textarea");dlmUploaderInstance.startUploadProgress(o.parents(".dlm-file-version__row"))}else dlmUploaderInstance.startUploadProgress(jQuery(e.settings.container).parents("#dlm-new-upload"))},dlmUploadError:function(e,n){jQuery(e.settings.browse_button).parent().append('<p class="error description" style="color:red;">'+n.message+"</p>"),setTimeout(function(){jQuery(e.settings.browse_button).parent().find(".error.description").remove()},3500)},uploadProgress:function(e,n){jQuery(e.settings.container).parent().parent().find(".dlm-uploading-file label span").html(e.total.percent+"%"),jQuery(e.settings.container).parent().parent().find(".dlm-uploading-file .dlm-uploading-progress-bar").css({width:e.total.percent+"%"})},retrieveVersion:function(e){const n=e.name;if(n.indexOf("-")<0)return null;let o=n.split("-")[1],l=o.split(".");return l=l.pop(),(o=o.slice(0,-(l.length+1))).length?o:null},startUploadProgress:function(e){e.find(".dlm-uploading-file").removeClass("hidden")},endUploadProgress:function(e){e.find(".dlm-uploading-file label").toggleClass("hidden"),setTimeout(function(){e.find(".dlm-uploading-file").addClass("hidden"),e.find(".dlm-uploading-file label").toggleClass("hidden")},1500)}}),n=Backbone.View.extend({tagName:"div",className:"dlm-uploader-editor",template:wp.template("uploader-editor"),localDrag:!1,overContainer:!1,overDropzone:!1,draggingFile:null,args:{},elementContainer:null,initialize:function(e){return this.initialized=!1,this.args=e,this.elementContainer=jQuery(this.args.container[0]).attr("id"),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&this.browserSupport()&&(this.$document=d(document),this.dropzone=null,this.files=[],this.$document.on("drop","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.drop,this)),this.$document.on("click","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.click,this)),this.$document.on("dragover","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.dropzoneDragover,this)),this.$document.on("dragleave","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.dropzoneDragleave,this)),this.$document.on("dragover",_.bind(this.containerDragover,this)),this.$document.on("dragleave",_.bind(this.containerDragleave,this)),this.$document.on("dragstart dragend drop",_.bind(function(e){this.localDrag="dragstart"===e.type,"drop"===e.type&&this.containerDragleave()},this)),this.initialized=!0),this},browserSupport:function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&!!(window.File&&window.FileList&&window.FileReader)},isDraggingFile:function(e){return null!==this.draggingFile?this.draggingFile:!_.isUndefined(e.originalEvent)&&!_.isUndefined(e.originalEvent.dataTransfer)&&(this.draggingFile=-1<_.indexOf(e.originalEvent.dataTransfer.types,"Files")&&-1===_.indexOf(e.originalEvent.dataTransfer.types,"text/plain"),this.draggingFile)},refresh:function(e){return this.dropzone.toggle(this.overContainer||this.overDropzone),_.isUndefined(e)||d(e.target).closest(".dlm-uploader-editor").toggleClass("droppable",this.overDropzone),this.overContainer||this.overDropzone||(this.draggingFile=null),this},render:function(){return this.initialized&&(this.$el.html(this.template()),jQuery("#"+this.elementContainer).append(this.$el),this.dropzone=this.$el),this},containerDragover:function(e){!this.localDrag&&this.isDraggingFile(e)&&(this.overContainer=!0,this.refresh())},containerDragleave:function(){this.overContainer=!1,_.delay(_.bind(this.refresh,this),50)},dropzoneDragover:function(e){if(!this.localDrag&&this.isDraggingFile(e))return this.overDropzone=!0,this.refresh(e),!1},dropzoneDragleave:function(e){this.overDropzone=!1,_.delay(_.bind(this.refresh,this,e),50)},drop:function(e){return this.containerDragleave(e),this.dropzoneDragleave(e),!1},click:function(e){this.containerDragleave(e),this.dropzoneDragleave(e),this.localDrag=!1}});i.uploadHandlerModel=e,i.uploadHandlerView=n}initUploaders(){var e={browser:jQuery("#plupload-browse-button"),plupload:{multi_selection:!1},params:{type:"dlm_download"},container:jQuery("#drag-drop-area"),dropzone:jQuery("#drag-drop-area")};new i.uploadHandlerModel(e);const n=new i.uploadHandlerView(e);n.render(),t.push(jQuery("#plupload-browse-button")),d(".dlm_upload_file:not(#plupload-browse-button)").each((e,n)=>{t.push(d(n));const o={browser:d(n),plupload:{multi_selection:!1},params:{type:"dlm_download"},container:d(n).parents("div.dlm-uploader-container"),dropzone:d(n).parents("div.dlm-uploader-container")},l=(new i.uploadHandlerModel(o),new i.uploadHandlerView(o));l.render()})}newFileAction(){d(document).on("dlm_new_file_added",()=>{d(".dlm_upload_file:not(#plupload-browse-button)").each((e,n)=>{if(t.includes(d(n)))return!0;t.push(d(n));const o={browser:d(n),plupload:{multi_selection:!1},params:{type:"dlm_download"},container:d(n).parents("div.dlm-uploader-container"),dropzone:d(n).parents("div.dlm-uploader-container")},l=(new i.uploadHandlerModel(o),new i.uploadHandlerView(o));l.render()}),jQuery("#dlm-new-upload").hide();var e=jQuery(".downloadable_file");0!==e.length&&(jQuery(".dlm-versions-tab").show(),jQuery(".dlm-versions-tab .dlm-versions-number").html("("+e.length+")"))})}removeFileAction(){d(document).on("dlm_remove_file",()=>{0===jQuery(".downloadable_files").find(".dlm-metabox.downloadable_file").length&&jQuery("#dlm-new-upload").show()})}clickActions(){const t=this;jQuery(".dlm-metaboxes-wrapper").on("click",".dlm-metabox h3",function(e){if(!jQuery(e.target).filter(":input, option").length){const n=jQuery(this),o=n.next(".dlm-metabox-content");n.toggleClass("opened"),o.toggle(),jQuery(".dlm-metabox h3").not(n).removeClass("opened"),jQuery(".dlm-metabox-content").not(o).hide()}}),jQuery(".download_monitor_files").on("click","a.add_file",function(e){e.preventDefault(),t.addNewFile()}),jQuery(".download_monitor_files").on("click",".remove_file",function(e){var n;return e.preventDefault(),confirm(dlm_ed_strings.confirm_delete)&&(0<(e=(n=jQuery(this).closest(".downloadable_file")).attr("data-file"))?(jQuery(n).block({message:null,overlayCSS:{background:"#fff url("+d("#dlm-plugin-url").val()+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}}),e={action:"download_monitor_remove_file",file_id:e,download_id:d("#dlm-post-id").val(),security:d("#dlm-ajax-nonce-remove-file").val()},jQuery.post(ajaxurl,e,function(e){jQuery(n).fadeOut("300").remove(),jQuery(document).trigger("dlm_remove_file",[this,n])})):jQuery(n).fadeOut("300").remove()),!1}),jQuery(".download_monitor_files").on("click","a.dlm_browse_for_file",function(e){if(e.preventDefault(),!(0<jQuery(this).parents("#dlm-new-upload").length))return downloadable_files_field=jQuery(this).closest(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),window.send_to_editor=window.send_to_browse_file_url,tb_show(dlm_ed_strings.browse_file,"media-upload.php?post_id="+d("#dlm-post-id").val()+"&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true"),dlmEditInstance.afterAddFile(downloadable_files_field),!1;t.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this);return downloadable_files_field=jQuery(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),window.send_to_editor=window.send_to_browse_file_url,tb_show(dlm_ed_strings.browse_file,"media-upload.php?post_id="+d("#dlm-post-id").val()+"&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true"),n.off(e),dlmEditInstance.afterAddFile(downloadable_files_field),!1})}),jQuery(".download_monitor_files").on("click","a.dlm_external_source",function(e){if(e.preventDefault(),!(0<jQuery(this).parents("#dlm-new-upload").length))return downloadable_files_field=jQuery(this).closest(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),dlmEditInstance.afterAddFile(downloadable_files_field),!1;t.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this);return downloadable_files_field=jQuery(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),n.off(e),dlmEditInstance.afterAddFile(downloadable_files_field),!1})}),jQuery(document).on("click",".dlm_media_library",function(e){e.preventDefault();var o=d(this),l=null;0<jQuery(this).parents("#dlm-new-upload").length?(t.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this);l=jQuery("textarea.downloadable_file_urls");t.addBrowsedFile(o,l,"",void 0),n.off(e),dlmEditInstance.afterAddFile(l)})):(e=(l=o.parents(".dlm-file-version__row").find(".downloadable_file_urls")).val(),t.addBrowsedFile(o,l,e,void 0),dlmEditInstance.afterAddFile(l))}),d(".copy-dlm-button").on("click",function(e){e.preventDefault();e=d(this).parent().find("input");e.focus(),e.select(),document.execCommand("copy"),d(this).next("span").text(d(this).data("item")+" copied"),d(".copy-dlm-button").not(d(this)).parent().find("span").text("")}),jQuery(document).on("dlm_remove_file",function(e,n,o){var l=jQuery(".downloadable_file");0===l.length?jQuery(".dlm-versions-tab").hide():jQuery(".dlm-versions-tab .dlm-versions-number").html("("+l.length+")")})}addNewFile(){jQuery(".download_monitor_files").block({message:null,overlayCSS:{background:"#fff url("+d("#dlm-plugin-url").val()+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var e=jQuery(".downloadable_files .downloadable_file").length,e={action:"download_monitor_add_file",post_id:d("#dlm-post-id").val(),size:e,security:d("#dlm-ajax-nonce-add-file").val()};return jQuery.post(ajaxurl,e,function(e){jQuery(".downloadable_files").prepend(e),o(),jQuery(".download_monitor_files").unblock(),jQuery(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0}),jQuery(document).trigger("dlm_new_file_added",[this,e])}),!1}addBrowsedFile(e,n,o,l){l&&l.close();var t=[new wp.media.controller.Library({library:wp.media.query(),multiple:!0,title:e.data("choose"),priority:20,filterable:"all"})];(l=wp.media.frames.downloadable_file=wp.media({title:e.data("choose"),library:{type:""},button:{text:e.data("update")},multiple:!0,states:t})).on("select",function(){l.state().get("selection").map(function(e){(e=e.toJSON()).url&&(o=o?o+"\n"+e.url:e.url)}),n.val(o)}),l.on("ready",function(){l.uploader.options.uploader.params={type:"dlm_download"}}),l.open()}afterAddFile(e){e.parents(".dlm-file-version__row").find(".dlm-file-version__drag_and_drop").addClass("hidden"),e.parents(".dlm-file-version__row").find(".dlm-file-version__file_present").removeClass("hidden")}}});
|
1 |
+
jQuery(function(d){var t=[],i={};function o(){jQuery(".downloadable_files .downloadable_file").each(function(e,n){jQuery(".file_menu_order",n).val(parseInt(jQuery(n).index(".downloadable_files .downloadable_file")))})}jQuery(".dlm-metabox.closed").each(function(){jQuery(this).find(".dlm-metabox-content").hide()}),jQuery(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0}),jQuery(".downloadable_files").sortable({items:".downloadable_file",cursor:"move",axis:"y",handle:"h3",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"dlm-metabox-sortable-placeholder",start:function(e,n){n.item.css("background-color","#f6f6f6")},stop:function(e,n){n.item.removeAttr("style"),o()}}),window.send_to_browse_file_url=function(e){e&&((old=jQuery.trim(jQuery(downloadable_files_field).val()))&&(old+="\n"),jQuery(downloadable_files_field).val(old+e)),tb_remove(),window.send_to_editor=window.send_to_editor_default},new class{constructor(){(dlmEditInstance=this).init()}init(){this.createUploaders(),this.initUploaders(),this.newFileAction(),this.removeFileAction(),this.clickActions()}createUploaders(){var e=Backbone.Model.extend({initialize:function(e){this.uploaderOptions=e,dlmUploaderInstance=this;const n=new wp.Uploader(dlmUploaderInstance.uploaderOptions),o=n.dropzone;o.on("dropzone:enter",dlmUploaderInstance.show),o.on("dropzone:leave",dlmUploaderInstance.hide),n.uploader.bind("FilesAdded",dlmUploaderInstance.dlmFileAdded),n.uploader.bind("FileUploaded",dlmUploaderInstance.dlmAddFileToPath),n.uploader.bind("Error",dlmUploaderInstance.dlmUploadError),n.uploader.bind("UploadProgress",dlmUploaderInstance.uploadProgress)},dlmAddFileToPath:function(i,r){const a=r.attachment.attributes.url;if("plupload-browse-button"!==jQuery(i.settings.browse_button).attr("id")){const n=jQuery(i.settings.browse_button).parents(".dlm-file-version__row").find("textarea");dlmUploaderInstance.endUploadProgress(n.parents(".dlm-file-version__row"));let e=n.val();e=e?e+"\n"+a:a,n.val(e),dlmEditInstance.afterAddFile(n,r,i)}else dlmEditInstance.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this),o=jQuery(".dlm-metaboxes.downloadable_files").find(".downloadable_file").first(),l=o.find("textarea"),t=dlmUploaderInstance.retrieveVersion(r),d=o.find('input[name*="downloadable_file_version"]');dlmUploaderInstance.endUploadProgress(jQuery(i.settings.container).parents("#dlm-new-upload")),l.val(a),null!==t&&d.val(t),dlmEditInstance.afterAddFile(l,r,i),n.off(e)})},dlmFileAdded:function(e,n){if("plupload-browse-button"!==jQuery(e.settings.browse_button).attr("id")){const o=jQuery(e.settings.browse_button).parents(".dlm-file-version__row").find("textarea");dlmUploaderInstance.startUploadProgress(o.parents(".dlm-file-version__row"))}else dlmUploaderInstance.startUploadProgress(jQuery(e.settings.container).parents("#dlm-new-upload"))},dlmUploadError:function(e,n){jQuery(e.settings.browse_button).parent().append('<p class="error description" style="color:red;">'+n.message+"</p>"),setTimeout(function(){jQuery(e.settings.browse_button).parent().find(".error.description").remove()},3500)},uploadProgress:function(e,n){jQuery(e.settings.container).parent().parent().find(".dlm-uploading-file label span").html(e.total.percent+"%"),jQuery(e.settings.container).parent().parent().find(".dlm-uploading-file .dlm-uploading-progress-bar").css({width:e.total.percent+"%"})},retrieveVersion:function(e){const n=e.name;if(n.indexOf("-")<0)return null;let o=n.split("-")[1],l=o.split(".");return l=l.pop(),(o=o.slice(0,-(l.length+1))).length?o:null},startUploadProgress:function(e){e.find(".dlm-uploading-file").removeClass("hidden")},endUploadProgress:function(e){e.find(".dlm-uploading-file label").toggleClass("hidden"),setTimeout(function(){e.find(".dlm-uploading-file").addClass("hidden"),e.find(".dlm-uploading-file label").toggleClass("hidden")},1500)}}),n=Backbone.View.extend({tagName:"div",className:"dlm-uploader-editor",template:wp.template("uploader-editor"),localDrag:!1,overContainer:!1,overDropzone:!1,draggingFile:null,args:{},elementContainer:null,initialize:function(e){return this.initialized=!1,this.args=e,this.elementContainer=jQuery(this.args.container[0]).attr("id"),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&this.browserSupport()&&(this.$document=d(document),this.dropzone=null,this.files=[],this.$document.on("drop","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.drop,this)),this.$document.on("click","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.click,this)),this.$document.on("dragover","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.dropzoneDragover,this)),this.$document.on("dragleave","#"+this.elementContainer+" .dlm-uploader-editor",_.bind(this.dropzoneDragleave,this)),this.$document.on("dragover",_.bind(this.containerDragover,this)),this.$document.on("dragleave",_.bind(this.containerDragleave,this)),this.$document.on("dragstart dragend drop",_.bind(function(e){this.localDrag="dragstart"===e.type,"drop"===e.type&&this.containerDragleave()},this)),this.initialized=!0),this},browserSupport:function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&!!(window.File&&window.FileList&&window.FileReader)},isDraggingFile:function(e){return null!==this.draggingFile?this.draggingFile:!_.isUndefined(e.originalEvent)&&!_.isUndefined(e.originalEvent.dataTransfer)&&(this.draggingFile=-1<_.indexOf(e.originalEvent.dataTransfer.types,"Files")&&-1===_.indexOf(e.originalEvent.dataTransfer.types,"text/plain"),this.draggingFile)},refresh:function(e){return this.dropzone.toggle(this.overContainer||this.overDropzone),_.isUndefined(e)||d(e.target).closest(".dlm-uploader-editor").toggleClass("droppable",this.overDropzone),this.overContainer||this.overDropzone||(this.draggingFile=null),this},render:function(){return this.initialized&&(this.$el.html(this.template()),jQuery("#"+this.elementContainer).append(this.$el),this.dropzone=this.$el),this},containerDragover:function(e){!this.localDrag&&this.isDraggingFile(e)&&(this.overContainer=!0,this.refresh())},containerDragleave:function(){this.overContainer=!1,_.delay(_.bind(this.refresh,this),50)},dropzoneDragover:function(e){if(!this.localDrag&&this.isDraggingFile(e))return this.overDropzone=!0,this.refresh(e),!1},dropzoneDragleave:function(e){this.overDropzone=!1,_.delay(_.bind(this.refresh,this,e),50)},drop:function(e){return this.containerDragleave(e),this.dropzoneDragleave(e),!1},click:function(e){this.containerDragleave(e),this.dropzoneDragleave(e),this.localDrag=!1}});i.uploadHandlerModel=e,i.uploadHandlerView=n}initUploaders(){var e={browser:jQuery("#plupload-browse-button"),plupload:{multi_selection:!1},params:{type:"dlm_download"},container:jQuery("#drag-drop-area"),dropzone:jQuery("#drag-drop-area")};new i.uploadHandlerModel(e);const n=new i.uploadHandlerView(e);n.render(),t.push(jQuery("#plupload-browse-button")),d(".dlm_upload_file:not(#plupload-browse-button)").each((e,n)=>{t.push(d(n));const o={browser:d(n),plupload:{multi_selection:!1},params:{type:"dlm_download"},container:d(n).parents("div.dlm-uploader-container"),dropzone:d(n).parents("div.dlm-uploader-container")},l=(new i.uploadHandlerModel(o),new i.uploadHandlerView(o));l.render()})}newFileAction(){d(document).on("dlm_new_file_added",()=>{d(".dlm_upload_file:not(#plupload-browse-button)").each((e,n)=>{if(t.includes(d(n)))return!0;t.push(d(n));const o={browser:d(n),plupload:{multi_selection:!1},params:{type:"dlm_download"},container:d(n).parents("div.dlm-uploader-container"),dropzone:d(n).parents("div.dlm-uploader-container")},l=(new i.uploadHandlerModel(o),new i.uploadHandlerView(o));l.render()}),jQuery("#dlm-new-upload").hide();var e=jQuery(".downloadable_file");0!==e.length&&(jQuery(".dlm-versions-tab").show(),jQuery(".dlm-versions-tab .dlm-versions-number").html("("+e.length+")"))})}removeFileAction(){d(document).on("dlm_remove_file",()=>{0===jQuery(".downloadable_files").find(".dlm-metabox.downloadable_file").length&&jQuery("#dlm-new-upload").show()})}clickActions(){const t=this;jQuery(".dlm-metaboxes-wrapper").on("click",".dlm-metabox h3",function(e){if(!jQuery(e.target).filter(":input, option").length){const n=jQuery(this),o=n.next(".dlm-metabox-content");n.toggleClass("opened"),o.toggle(),jQuery(".dlm-metabox h3").not(n).removeClass("opened"),jQuery(".dlm-metabox-content").not(o).hide()}}),jQuery(".download_monitor_files").on("click","a.add_file",function(e){e.preventDefault(),t.addNewFile()}),jQuery(".download_monitor_files").on("click",".remove_file",function(e){var n;return e.preventDefault(),confirm(dlm_ed_strings.confirm_delete)&&(0<(e=(n=jQuery(this).closest(".downloadable_file")).attr("data-file"))?(jQuery(n).block({message:null,overlayCSS:{background:"#fff url("+d("#dlm-plugin-url").val()+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}}),e={action:"download_monitor_remove_file",file_id:e,download_id:d("#dlm-post-id").val(),security:d("#dlm-ajax-nonce-remove-file").val()},jQuery.post(ajaxurl,e,function(e){jQuery(n).fadeOut("300").remove(),jQuery(document).trigger("dlm_remove_file",[this,n])})):jQuery(n).fadeOut("300").remove()),!1}),jQuery(".download_monitor_files").on("click","a.dlm_browse_for_file",function(e){if(e.preventDefault(),!(0<jQuery(this).parents("#dlm-new-upload").length))return downloadable_files_field=jQuery(this).closest(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),window.send_to_editor=window.send_to_browse_file_url,tb_show(dlm_ed_strings.browse_file,"media-upload.php?post_id="+d("#dlm-post-id").val()+"&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true"),dlmEditInstance.afterAddFile(downloadable_files_field),!1;t.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this);return downloadable_files_field=jQuery(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),window.send_to_editor=window.send_to_browse_file_url,tb_show(dlm_ed_strings.browse_file,"media-upload.php?post_id="+d("#dlm-post-id").val()+"&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true"),n.off(e),dlmEditInstance.afterAddFile(downloadable_files_field),!1})}),jQuery(".download_monitor_files").on("click","a.dlm_external_source",function(e){if(e.preventDefault(),!(0<jQuery(this).parents("#dlm-new-upload").length))return downloadable_files_field=jQuery(this).closest(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),dlmEditInstance.afterAddFile(downloadable_files_field),!1;t.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this);return downloadable_files_field=jQuery(".downloadable_file").find('textarea[name^="downloadable_file_urls"]'),n.off(e),dlmEditInstance.afterAddFile(downloadable_files_field),!1})}),jQuery(document).on("click",".dlm_media_library",function(e){e.preventDefault();var o=d(this),l=null;0<jQuery(this).parents("#dlm-new-upload").length?(t.addNewFile(),jQuery(document).on("dlm_new_file_added",function(e){const n=jQuery(this);l=jQuery("textarea.downloadable_file_urls");t.addBrowsedFile(o,l,"",void 0),n.off(e),dlmEditInstance.afterAddFile(l)})):(e=(l=o.parents(".dlm-file-version__row").find(".downloadable_file_urls")).val(),t.addBrowsedFile(o,l,e,void 0),dlmEditInstance.afterAddFile(l))}),d(".copy-dlm-button").on("click",function(e){e.preventDefault();e=d(this).parent().find("input");e.focus(),e.select(),document.execCommand("copy"),d(this).next("span").text(d(this).data("item")+" copied"),d(".copy-dlm-button").not(d(this)).parent().find("span").text("")}),jQuery(document).on("dlm_remove_file",function(e,n,o){var l=jQuery(".downloadable_file");0===l.length?jQuery(".dlm-versions-tab").hide():jQuery(".dlm-versions-tab .dlm-versions-number").html("("+l.length+")")})}addNewFile(){jQuery(".download_monitor_files").block({message:null,overlayCSS:{background:"#fff url("+d("#dlm-plugin-url").val()+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var e=jQuery(".downloadable_files .downloadable_file").length,e={action:"download_monitor_add_file",post_id:d("#dlm-post-id").val(),size:e,security:d("#dlm-ajax-nonce-add-file").val()};return jQuery.post(ajaxurl,e,function(e){jQuery(".downloadable_files").prepend(e),o(),jQuery(".download_monitor_files").unblock(),jQuery(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0}),jQuery(document).trigger("dlm_new_file_added",[this,e])}),!1}addBrowsedFile(e,n,o,l){l&&l.close();var t=[new wp.media.controller.Library({library:wp.media.query(),multiple:!0,title:e.data("choose"),priority:20,filterable:"all"})];(l=wp.media.frames.downloadable_file=wp.media({title:e.data("choose"),library:{type:""},button:{text:e.data("update")},multiple:!0,states:t})).on("select",function(){l.state().get("selection").map(function(e){(e=e.toJSON()).url&&(o=o?o+"\n"+e.url:e.url)}),n.val(o)}),l.on("ready",function(){l.uploader.options.uploader.params={type:"dlm_download"}}),l.open()}afterAddFile(e,n=null,o=null){var l;e.parents(".dlm-file-version__row").find(".dlm-file-version__drag_and_drop").addClass("hidden"),e.parents(".dlm-file-version__row").find(".dlm-file-version__file_present").removeClass("hidden"),null!==n&&null!==o&&(o=n.attachment.id,n=d("#dlm-ajax-nonce-add-file").val(),l=parseInt(jQuery("input#post_ID").val()),e=e.parents(".downloadable_files").find(".downloadable_file").first().data("file"),jQuery.post(ajaxurl,{action:"dlm_update_file_meta",file_id:o,version_id:e,download_id:l,nonce:n},function(e){e.success||console.log("Error saving attachment meta")}))}}});
|
assets/js/insert-download.js
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
jQuery( function ($) {
|
2 |
-
// Browse for file
|
3 |
-
jQuery( 'body' ).on( 'click', 'a.dlm_insert_download', function () {
|
4 |
-
|
5 |
-
tb_show( dlm_id_strings.insert_download, 'media-upload.php?type=add_download&from=wpdlm01&TB_iframe=true&height=200' );
|
6 |
-
|
7 |
-
return false;
|
8 |
-
} );
|
9 |
-
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/insert-download.min.js
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
jQuery(function(d){jQuery("body").on("click","a.dlm_insert_download",function(){return tb_show(dlm_id_strings.insert_download,"media-upload.php?type=add_download&from=wpdlm01&TB_iframe=true&height=200"),!1})});
|
|
assets/js/legacy-upgrader/src/index.ejs
CHANGED
@@ -241,7 +241,7 @@ var userSettings = {"url":"\/download-monitor\/","uid":"1","time":"1511968878","
|
|
241 |
var dlm_id_strings = {"insert_download":"Insert Download"};
|
242 |
/* ]]> */
|
243 |
</script>
|
244 |
-
<script type='text/javascript' src='http://lnmp.dev/download-monitor/wp-content/plugins/_download-monitor-new/assets/js/
|
245 |
<script type='text/javascript' src='http://lnmp.dev/download-monitor/wp-content/plugins/_download-monitor-new/assets/js/notices.js?ver=4.0.0'></script>
|
246 |
<link id="wp-admin-canonical" rel="canonical" href="http://lnmp.dev/download-monitor/wp-admin/options.php?page=dlm_legacy_upgrade" />
|
247 |
<script>
|
241 |
var dlm_id_strings = {"insert_download":"Insert Download"};
|
242 |
/* ]]> */
|
243 |
</script>
|
244 |
+
<script type='text/javascript' src='http://lnmp.dev/download-monitor/wp-content/plugins/_download-monitor-new/assets/js/download-operations.js?ver=4.0.0'></script>
|
245 |
<script type='text/javascript' src='http://lnmp.dev/download-monitor/wp-content/plugins/_download-monitor-new/assets/js/notices.js?ver=4.0.0'></script>
|
246 |
<link id="wp-admin-canonical" rel="canonical" href="http://lnmp.dev/download-monitor/wp-admin/options.php?page=dlm_legacy_upgrade" />
|
247 |
<script>
|
assets/js/reports/reports.js
CHANGED
@@ -7,11 +7,6 @@ jQuery(function ($) {
|
|
7 |
const reports = new DLM_Reports();
|
8 |
// Fetch our users and the logs. Do this first so that we query for users we have data.
|
9 |
dlmReportsInstance.fetchUserData();
|
10 |
-
// Get the data used for the chart.
|
11 |
-
dlmReportsInstance.fetchReportsData();
|
12 |
-
$(document).on('dlm_downloads_report_fetched', function () {
|
13 |
-
reports.init();
|
14 |
-
});
|
15 |
});
|
16 |
|
17 |
/**
|
@@ -168,6 +163,7 @@ class DLM_Reports {
|
|
168 |
]);
|
169 |
|
170 |
dlmReportsInstance.stopSpinner(jQuery('.total_downloads_chart-wrapper'));
|
|
|
171 |
} else {
|
172 |
dlmReportsInstance.fetchReportsData(response.offset);
|
173 |
}
|
@@ -224,6 +220,8 @@ class DLM_Reports {
|
|
224 |
|
225 |
let response = await fetchedUserData.json();
|
226 |
dlmReportsInstance.dlmUsersStats.users = dlmReportsInstance.dlmUsersStats.users.concat(response);
|
|
|
|
|
227 |
}
|
228 |
|
229 |
/**
|
7 |
const reports = new DLM_Reports();
|
8 |
// Fetch our users and the logs. Do this first so that we query for users we have data.
|
9 |
dlmReportsInstance.fetchUserData();
|
|
|
|
|
|
|
|
|
|
|
10 |
});
|
11 |
|
12 |
/**
|
163 |
]);
|
164 |
|
165 |
dlmReportsInstance.stopSpinner(jQuery('.total_downloads_chart-wrapper'));
|
166 |
+
dlmReportsInstance.init();
|
167 |
} else {
|
168 |
dlmReportsInstance.fetchReportsData(response.offset);
|
169 |
}
|
220 |
|
221 |
let response = await fetchedUserData.json();
|
222 |
dlmReportsInstance.dlmUsersStats.users = dlmReportsInstance.dlmUsersStats.users.concat(response);
|
223 |
+
// Get the data used for the chart. We get it so that the users are completed and we won't possibly overload the server
|
224 |
+
dlmReportsInstance.fetchReportsData();
|
225 |
}
|
226 |
|
227 |
/**
|
assets/js/reports/reports.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(function(e){const t=new DLM_Reports;dlmReportsInstance.fetchUserData(),dlmReportsInstance.fetchReportsData(),e(document).on("dlm_downloads_report_fetched",function(){t.init()})});class DLM_Reports{dlmReportsStats=[];dlmUsersStats={logs:[],users:[]};currentFilters=[];tempDownloads=null;templates={};totalDownloads=0;perPage=dlmReportsPerPage;constructor(){(dlmReportsInstance=this).chartContainer=document.getElementById("total_downloads_chart");const e=dlmReportsInstance.chartContainer.getContext("2d");dlmReportsInstance.chartColors={purple:{default:"rgba(149, 76, 233, 1)",threesome:"rgba(149, 76, 233, 0.75)",half:"rgba(149, 76, 233, 0.5)",quarter:"rgba(149, 76, 233, 0.5)",zero:"rgba(149, 76, 233, 0.05)"},blue:{default:"rgba(67, 56, 202, 1)",threesome:"rgba(67, 56, 202, 0.75)",half:"rgba(67, 56, 202, 0.5)",quarter:"rgba(67, 56, 202, 0.25)",zero:"rgba(67, 56, 202, 0.05)"},green:{default:"rgba(00, 255, 00, 1)",threesome:"rgba(00, 255, 00, 0.75)",half:"rgba(00, 255, 00, 0.5)",quarter:"rgba(00, 255, 00, 0.25)",zero:"rgba(67, 56, 202, 0.05)"},royalBlue:{default:"rgba(65, 105, 225, 1)",threesome:"rgba(65, 105, 225, 0.75)",half:"rgba(65, 105, 225, 0.5)",quarter:"rgba(65, 105, 225, 0.25)",zero:"rgba(65, 105, 225, 0.05)"},persianBlue:{default:"rgba(28, 57, 187, 1)",threesome:"rgba(28, 57, 187, 0.75)",half:"rgba(28, 57, 187, 0.5)",quarter:"rgba(28, 57, 187, 0.25)",zero:"rgba(28, 57, 187, 0.05)"},darkCyan:{default:"rgba(0,129,167, 1)",threesome:"rgba(0,129,167, 0.75)",half:"rgba(0,129,167, 0.5)",quarter:"rgba(0,129,167, 0.25)",zero:"rgba(0,129,167, 0.05)"},strongCyan:{default:"rgba(0, 175, 185, 1)",threesome:"rgba(0, 175, 185, 0.75)",half:"rgba(0, 175, 185, 0.5)",quarter:"rgba(0, 175, 185, 0.25)",zero:"rgba(0, 175, 185, 0.05)"}},dlmReportsInstance.chartGradient=e.createLinearGradient(0,25,0,300),dlmReportsInstance.chartGradient.addColorStop(0,dlmReportsInstance.chartColors.darkCyan.half),dlmReportsInstance.chartGradient.addColorStop(.45,dlmReportsInstance.chartColors.darkCyan.quarter),dlmReportsInstance.chartGradient.addColorStop(1,dlmReportsInstance.chartColors.darkCyan.zero),dlmReportsInstance.datePickerContainer=document.getElementById("dlm-date-range-picker"),dlmReportsInstance.dataSets=[];let t=new Date;dlmReportsInstance.dates={downloads:{start_date:new Date(t.setMonth(t.getMonth()-1)),end_date:new Date}},dlmReportsInstance.chartDataObject={}}async fetchReportsData(e=0,t=1e3){const a=jQuery('div[data-id="general_info"]');dlmReportsInstance.setSpinner(jQuery(".total_downloads_chart-wrapper")),dlmReportsInstance.setSpinner(jQuery("#users_download_log")),dlmReportsInstance.setSpinner(jQuery("#total_downloads_table_wrapper2"));let n=dlmDownloadReportsAPI+"?offset="+e+"&limit="+t;0<dlmDownloadReportsAPI.indexOf("index.php?")&&(n=dlmDownloadReportsAPI+"&offset="+e+"&limit="+t);const o=await fetch(n);if(!o.ok){const s=document.createElement("div"),r=(s.className="dlm-loading-data",document.createTextNode("Seems like we bumped into an error! ")),d=document.createTextNode("Data fetching returned a status text of : "+fetchedData.statusText),l=document.createElement("h1"),m=document.createElement("h3");throw l.appendChild(r),m.appendChild(d),s.appendChild(l),s.appendChild(m),a.find(".dlm-loading-data").remove(),a.append(s),new Error("Something went wrong! Reports response did not come OK - "+fetchedData.statusText)}dlmReportsInstance.mostDownloaded=!1,dlmReportsInstance.stats=!1,dlmReportsInstance.chartType="day";e=await o.json();dlmReportsInstance.dlmReportsStats=dlmReportsInstance.dlmReportsStats.concat(e.stats),!0===e.done?(0<window.location.href.indexOf("dlm_time")&&(dlmReportsInstance.dates.downloads.start_date=0<Object.keys(dlmReportsInstance.dlmReportsStats).length?new Date(dlmReportsInstance.dlmReportsStats[0].date):new Date,dlmReportsInstance.dates.downloads.end_date=new Date,jQuery("#dlm-date-range-picker .date-range-info").html(dlmReportsInstance.dates.downloads.start_date.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"})+" - "+dlmReportsInstance.dates.downloads.end_date.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"}))),dlmReportsInstance.createDataOnDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date),dlmReportsInstance.datePicker={opened:!1},jQuery(document).trigger("dlm_downloads_report_fetched",[dlmReportsInstance,dlmReportsInstance.dlmReportsStats]),dlmReportsInstance.stopSpinner(jQuery(".total_downloads_chart-wrapper"))):dlmReportsInstance.fetchReportsData(e.offset)}async fetchUsersReportsData(e=0,t=dlmPHPinfo.retrieved_rows){const a=jQuery('div[data-id="user_reports"]');let n=dlmUserReportsAPI+"?offset="+e+"&limit="+t;0<dlmUserReportsAPI.indexOf("index.php?")&&(n=dlmUserReportsAPI+"&offset="+e+"&limit="+t);const o=await fetch(n);if(!o.ok)throw new Error("Something went wrong! Reports response did not come OK - "+o.statusText);e=await o.json();dlmReportsInstance.dlmUsersStats.logs=dlmReportsInstance.dlmUsersStats.logs.concat(e.logs),!0===e.done?(dlmReportsInstance.userDownloads=void 0!==dlmReportsInstance.dlmUsersStats.logs?JSON.parse(JSON.stringify(dlmReportsInstance.dlmUsersStats.logs)):{},a.find(".dlm-loading-data").remove(),dlmReportsInstance.userReportsTab(),dlmReportsInstance.setTopDownloads(),dlmReportsInstance.stopSpinner(jQuery("#total_downloads_table_wrapper2"))):dlmReportsInstance.fetchUsersReportsData(e.offset)}async fetchUserData(){const e=await fetch(dlmUserDataAPI);if(!e.ok)throw new Error("Something went wrong! Reports response did not come OK - "+e.statusText);var t=await e.json();dlmReportsInstance.dlmUsersStats.users=dlmReportsInstance.dlmUsersStats.users.concat(t)}init(){dlmReportsInstance.tabNagivation(),dlmReportsInstance.overViewTab(),dlmReportsInstance.togglePageSettings(),dlmReportsInstance.setSpinner(jQuery("#users_download_log")),dlmReportsInstance.setSpinner(jQuery("#total_downloads_table_wrapper2")),dlmReportsInstance.fetchUsersReportsData(),jQuery(document).trigger("dlm_reports_init",[dlmReportsInstance]),dlmReportsInstance.eventsFunctions()}overViewTab(){dlmReportsInstance.dlmCreateChart(dlmReportsInstance.stats.chartStats,dlmReportsInstance.chartContainer),dlmReportsInstance.dlmDownloadsSummary(),dlmReportsInstance.datePickerContainer.addEventListener("click",dlmReportsInstance.toggleDatepicker.bind(this)),dlmReportsInstance.setTodayDownloads(),dlmReportsInstance.handleTopDownloads(),jQuery(document).on("click","body",function(e){e.stopPropagation(),0<jQuery(dlmReportsInstance.datePickerContainer).find("#dlm_date_range_picker").length&&dlmReportsInstance.hideDatepicker(jQuery(dlmReportsInstance.datePickerContainer),{target:"dlm-date-range-picker"})})}userReportsTab(){0!==Object.values(dlmReportsInstance.dlmUsersStats).length&&(dlmReportsInstance.logsDataByDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date),dlmReportsInstance.handleUserDownloads(),dlmReportsInstance.filterDownloads())}getDates(e,t){const a={};let n=e;for(;n<=t;)a[this.createDateElement(n)]=0,n=this.getNextDay(n);return a}getMonths(e){const t={};return Object.keys(e).map(e=>{e=e.substring(0,7);void 0===t[e]&&(t[e]=0)}),t}getDoubleMonths(e){const t={},a=Object.keys(e)[0],n=Object.keys(e)[Object.keys(e).length-1];let o=0,s=a.substring(0,7),r=n.substring(0,7);return Object.keys(e).map(e=>{e=e.substring(0,7);s!==e&&r!==e&&(s=e,o++),void 0===t[e]&&0==o%2&&(t[e]=0)}),t}getWeeks(e){let a={};return Object.keys(e).forEach(e=>{let t;t=15<moment(e).date()?e.substring(0,7)+"-15":e.substring(0,7)+"-01",void 0===a[t]&&(a[t]=0)}),a}getWeek(e){let t={},a=Object.keys(e)[Object.keys(e).length-1],n=0;return Object.keys(e).map(e=>{void 0===t[e]&&0==n%7&&(t[e]=0),n++}),void 0===t[a]&&(t[a]=0),t}getDoubleDays(e){let t={},a=Object.keys(e)[0],n=Object.keys(e)[Object.keys(e).length-1],o=0;return Object.keys(e).map(e=>{a!==e&&n!==e&&(a=e,o++),void 0===t[e]&&0==o%2&&(t[e]=0)}),t}getNextDay(e){const t=new Date(e);return t.setDate(e.getDate()+1),t}createDateElement(e){var t=(e.getMonth()+1<10?"0":"")+(e.getMonth()+1);return e.getFullYear()+"-"+t+"-"+("0"+e.getDate()).slice(-2)}getSetDates(e,t){let a,n;if(void 0!==e&&e)a=dlmReportsInstance.createDateElement(new Date(e));else{const o=new Date;o.setDate(o.getDate()-30),a=dlmReportsInstance.createDateElement(o)}if(void 0!==t&&t){e=new Date(t);n=dlmReportsInstance.createDateElement(e)}else{const s=new Date;s.setDate(s.getDate()+1),n=dlmReportsInstance.createDateElement(s)}return{startDate:a,endDate:n}}createDataOnDate(e,t){let{startDate:a,endDate:n}={...dlmReportsInstance.getSetDates(e,t)},o,s,r,d,l,m=(dlmReportsInstance.reportsData=void 0!==dlmReportsInstance.dlmReportsStats?JSON.parse(JSON.stringify(dlmReportsInstance.dlmReportsStats)):{},s=moment(n,"YYYY-MM-DD").month()-moment(a,"YYYY-MM-DD").month(),r=moment(n,"YYYY-MM-DD").year()-moment(a,"YYYY-MM-DD").year(),o=moment(n).date()-moment(a).date(),dlmReportsInstance.chartType="day",0==r&&-6<s&&s<6?1<s||s<-1?dlmReportsInstance.chartType=2==s?"week":"weeks":1==s&&(8<o||-14<o||0==o)&&(dlmReportsInstance.chartType="days"):s<=0?dlmReportsInstance.chartType="month":dlmReportsInstance.chartType="months",dlmReportsInstance.getDates(new Date(a),new Date(n))),c,p,i,g;switch(dlmReportsInstance.chartType){case"months":p=dlmReportsInstance.getDoubleMonths(m),l=p;break;case"month":var u=dlmReportsInstance.getMonths(m);l=u;break;case"weeks":i=dlmReportsInstance.getWeeks(m),l=i;break;case"week":g=dlmReportsInstance.getWeek(m),l=g;break;case"days":c=dlmReportsInstance.getDoubleDays(m),l=c;break;case"day":l=m}Object.values(dlmReportsInstance.reportsData).forEach((o,e)=>{var s=JSON.parse(o.download_ids);if(void 0!==m[o.date])switch(dlmReportsInstance.chartType){case"months":d=o.date.substring(0,7);let e=parseInt(o.date.substring(5,7)),t=o.date.substring(0,5),a=6<(e-1).length?t+(e-1):t+"0"+(e-1);Object.values(s).forEach((e,t)=>{void 0===p[d]?void 0!==p[a]&&(p[a]=p[a]+e.downloads):p[d]=p[d]+e.downloads}),l=p;break;case"month":d=o.date.substring(0,7),Object.values(s).forEach((e,t)=>{monthDownloads[d]=void 0!==monthDownloads[d]?monthDownloads[d]+e.downloads:e.downloads}),l=monthDownloads;break;case"weeks":d=15<moment(o.date).date()?o.date.substring(0,7)+"-15":o.date.substring(0,7)+"-01",Object.values(s).forEach((e,t)=>{i[d]=void 0!==i[d]?i[d]+e.downloads:e.downloads}),l=i;break;case"week":d=o.date,Object.values(s).forEach((t,e)=>{if(void 0===g[d])for(let e=1;e<8;e++){var a=moment(o.date).date(moment(o.date).date()-e).format("YYYY-MM-DD");void 0!==g[a]&&(g[a]=g[a]+t.downloads)}else g[d]=g[d]+t.downloads}),l=g;break;case"days":d=o.date;let n=moment(o.date).date(moment(o.date).date()-1).format("YYYY-MM-DD");Object.values(s).forEach((e,t)=>{void 0===c[d]?void 0!==c[n]&&(c[n]=c[n]+e.downloads):c[d]=c[d]+e.downloads}),l=c;break;case"day":Object.values(s).forEach((e,t)=>{m[o.date]=m[o.date]+e.downloads}),l=m}else delete dlmReportsInstance.reportsData[e]});const I=Object.keys(m);e=I.length,t=I.findIndex(e=>a===e);let R=I.findIndex(e=>n===e);-1===t&&-1===R?dlmReportsInstance.stats={chartStats:Object.assign({},l),summaryStats:!1,daysLength:e}:(-1===R&&(R=e),dlmReportsInstance.stats={chartStats:Object.assign({},l),summaryStats:dlmReportsInstance.reportsData,daysLength:e})}dlmCreateChart(t,a,n=!1){if(t&&a){let e=Chart.getChart("total_downloads_chart");dlmReportsInstance.chartDataObject={dataSetLabel:"Downloads",dataSetColor:"#27ae60",dataSetbg:dlmReportsInstance.chartGradient,dataSetPointbg:dlmReportsInstance.chartColors.darkCyan.default,dataSetBorder:dlmReportsInstance.chartColors.darkCyan.default,dataSetElementColor:"#2ecc71",lineType:"original",xAxis:"x",chartData:t},void 0!==e&&e.destroy(),jQuery(document).trigger("dlm_reports_before_data_sets",[dlmReportsInstance.chartDataObject,t,n]),0<dlmReportsInstance.dataSets.length&&(dlmReportsInstance.dataSets=dlmReportsInstance.dataSets.filter(e=>dlmReportsInstance.chartDataObject.lineType!==e.origin)),dlmReportsInstance.dataSets.push({origin:dlmReportsInstance.chartDataObject.lineType,label:dlmReportsInstance.chartDataObject.dataSetLabel,color:dlmReportsInstance.chartDataObject.dataSetColor,data:dlmReportsInstance.chartDataObject.chartData,type:"line",fill:!0,backgroundColor:dlmReportsInstance.chartDataObject.dataSetbg,pointBackgroundColor:dlmReportsInstance.chartDataObject.dataSetPointbg,pointHoverBackgroundColor:"#fff",borderColor:dlmReportsInstance.chartDataObject.dataSetBorder,pointBorderWidth:1,lineTension:.3,borderWidth:1,pointRadius:3,elements:{line:{borderColor:dlmReportsInstance.chartDataObject.dataSetElementColor,borderWidth:1},point:{radius:4,hoverRadius:4,pointStyle:"circle"}}});t=Object.values(dlmReportsInstance.dataSets).filter(e=>"original"===e.origin);let s=Object.keys(t[0].data);dlmReportsInstance.dataSets.sort(function(e,t){return"original"===e.origin?-1:1}),dlmReportsInstance.chart=new Chart(a,{title:"",data:{datasets:dlmReportsInstance.dataSets},height:450,is_series:1,options:{aspectRatio:5,animation:!1,interaction:{mode:"index",intersect:!1},stacked:!1,scales:{x:{grid:{display:!1},ticks:{callback:e=>{let t="";var a=s[e],n=s[s.length-1],o=moment(n).month(moment(n).month()-1).format("YYYY-MM");return t="undefined"!==dlmReportsInstance.chartType&&"months"===dlmReportsInstance.chartType?(e=moment(s[e]).month())<11?a===o?moment(a).format("MMM, YYYY"):moment(a).format("MMM")+" - "+moment(a).month(e+1).format("MMM")+moment(a).format(", YYYY"):a===o||a===n?moment(a).format("MMM, YYYY"):moment(a).format("MMM")+moment(a).format(" YYYY")+" - "+moment(a).month(e+1).format("MMM")+moment(a).month(e+1).format(", YYYY"):"undefined"!==dlmReportsInstance.chartType&&"months"===dlmReportsInstance.chartType?moment(a).format("MMMM, YYYY"):moment(a).format("D MMM")}}},y:{grid:{drawBorder:!1},min:0,max:0!==dlmReportsInstance.getMaxDownload()?1===Math.ceil(dlmReportsInstance.getMaxDownload()/10)?dlmReportsInstance.getMaxDownload()+1:10*Math.ceil(dlmReportsInstance.getMaxDownload()/10):100,ticks:{stepSize:0!==dlmReportsInstance.getMaxDownload()?Math.ceil(dlmReportsInstance.getMaxDownload()/4):25,callback:e=>dlmReportsInstance.shortNumber(e)}}},normalized:!0,parsing:{xAxisKey:"x",yAxisKey:"y"},plugins:{tooltip:{enabled:!1,external:dlmReportsInstance.externalTooltipHandler.bind(dlmReportsInstance,this)},legend:{display:!0}}}})}}dlmDownloadsSummary(){let a={};if(!1===dlmReportsInstance.stats||!1===dlmReportsInstance.stats.summaryStats||Object.keys(dlmReportsInstance.stats.summaryStats).length<=0)return this.setTotalDownloads(0),this.setDailyAverage(0),void this.setMostDownloaded("--");dlmReportsInstance.totalDownloads=0,dlmReportsInstance.stats.summaryStats.forEach(e=>{e=JSON.parse(e.download_ids),Object.entries(e).forEach(([e,t])=>{dlmReportsInstance.totalDownloads+=t.downloads,a[e]=void 0===a[e]?{downloads:t.downloads,title:t.title,id:e}:{downloads:a[e].downloads+t.downloads,title:t.title,id:e}})}),dlmReportsInstance.mostDownloaded=dlmReportsInstance.orderItems(Object.values(a),"desc","downloads"),dlmReportsInstance.setTotalDownloads(dlmReportsInstance.totalDownloads),dlmReportsInstance.setDailyAverage((dlmReportsInstance.totalDownloads/parseInt(dlmReportsInstance.stats.daysLength)).toFixed(0)),dlmReportsInstance.setMostDownloaded(dlmReportsInstance.mostDownloaded[0].title)}createDatepicker(e,t,a){const n=new Date;let o=n.getDate()-1,s=n.getMonth()+1,r=s-1;var d=n.getFullYear(),l=(o<10&&(o="0"+o),s<10&&(s="0"+s),r<10&&(r="0"+r),d+"-"+s+"-"+o),d=d+"-"+r+"-"+o,m=jQuery("<div>").addClass("dlm_rdrs_overlay"),a=jQuery("<div>").attr("id",a.replace("#",""));return"dlm-date-range-picker"===t.target?(dlmReportsInstance.startDateInput=jQuery("<input>").attr("type","hidden").attr("id","dlm_start_date").attr("value",d),dlmReportsInstance.endDateInput=jQuery("<input>").attr("type","hidden").attr("id","dlm_end_date").attr("value",l),m.append(a).append(dlmReportsInstance.startDateInput).append(dlmReportsInstance.endDateInput)):jQuery(document).trigger("dlm_create_date_picker_"+t.target,[dlmReportsInstance,m,a,d,l]),m}displayDatepicker(e,s){var t;if(jQuery(e)){if(t="#"+jQuery(e).attr("id").replace(/-/gi,"_"),"dlm-date-range-picker"===s.target){if(dlmReportsInstance.datePicker.opened)return;dlmReportsInstance.datePicker.opened=!0}else jQuery(document).trigger("dlm_display_datepicker_"+s.target,[dlmReportsInstance,s,e]);let o=dlmReportsInstance.createDatepicker(e,s,t);e.append(o);var a=0<Object.keys(dlmReportsInstance.dlmReportsStats).length?new Date(dlmReportsInstance.dlmReportsStats[0].date):new Date,n=(new Date,[]),e=(jQuery(document).trigger("dlm_datepicker_shortcuts_"+s.target,[dlmReportsInstance,s,e,n]),{separator:" to ",autoClose:!0,getValue:function(){},setValue:function(e,t,a){o.find('input[type="hidden"]').first().val(t),o.find('input[type="hidden"]').last().val(a)},inline:!0,alwaysOpen:!0,container:t,endDate:new Date,startDate:a,showShortcuts:!0,shortcuts:null,customShortcuts:n});o.dateRangePicker(e).on("datepicker-change",(e,t)=>{var a,n;t.date1&&t.date2&&(a=t.date1.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"}),n=t.date2.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"}),o.parent().find("span.date-range-info").text(a+" - "+n)),"dlm-date-range-picker"===s.target?(dlmReportsInstance.dates.downloads={start_date:t.date1,end_date:t.date2},dlmReportsInstance.createDataOnDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date),dlmReportsInstance.dlmCreateChart(dlmReportsInstance.stats.chartStats,dlmReportsInstance.chartContainer,!1),dlmReportsInstance.dlmDownloadsSummary(),0<Object.values(dlmReportsInstance.dlmUsersStats.logs).length&&dlmReportsInstance.logsDataByDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date)):jQuery(document).trigger("dlm_daterangepicker_init_"+s.target,[dlmReportsInstance,t.date1,t.date2]),dlmReportsInstance.setTopDownloads(),o.data("dateRangePicker").close()}),"dlm-date-range-picker"===s.target?o.data("dateRangePicker").setDateRange(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date):jQuery(document).trigger("dlm_daterangepicker_after_init_"+s.target,[o,dlmReportsInstance])}}hideDatepicker(e,t){"dlm-date-range-picker"===t.target?dlmReportsInstance.datePicker.opened=!1:jQuery(document).trigger("dlm_hide_datepicker_"+t.target,[dlmReportsInstance,e,t]),e.find(".dlm_rdrs_overlay").remove()}toggleDatepicker(e){e.stopPropagation();const t=jQuery(e.target).parents(".dlm-reports-header-date-selector");e={target:t.attr("id"),object:dlmReportsInstance.datePicker};dlmReportsInstance.closeDatePickers(t),"dlm-date-range-picker"===e.target?dlmReportsInstance.datePicker.opened?dlmReportsInstance.hideDatepicker(t,e):dlmReportsInstance.displayDatepicker(t,e):jQuery(document).trigger("dlm_toggle_datepicker_"+e.target,[dlmReportsInstance,t,e])}setTotalDownloads(e){jQuery(".dlm-reports-block-summary li#total span").html(e.toLocaleString())}setDailyAverage(e){jQuery(".dlm-reports-block-summary li#average span").html(e.toLocaleString())}setMostDownloaded(e){jQuery(".dlm-reports-block-summary li#most_popular span").html(e)}setTodayDownloads(){let e=0;Object.keys(dlmReportsInstance.dlmReportsStats).length<=0?jQuery(".dlm-reports-block-summary li#today span").html(e.toLocaleString()):(dlmReportsInstance.dlmReportsStats[dlmReportsInstance.dlmReportsStats.length-1].date===dlmReportsInstance.createDateElement(new Date)&&(e=Object.values(JSON.parse(dlmReportsInstance.dlmReportsStats[dlmReportsInstance.dlmReportsStats.length-1].download_ids)).reduce((e,t)=>e+t.downloads,0)),jQuery(".dlm-reports-block-summary li#today span").html(e))}setTopDownloads(e=0,t=!1){const a=jQuery("#total_downloads_table_wrapper2"),n=jQuery("#total_downloads_table_wrapper2 .total_downloads_table__list");if(n.empty(),n.parent().addClass("empty"),dlmReportsInstance.mostDownloaded&&!0!==t){var o=JSON.parse(JSON.stringify(dlmReportsInstance.mostDownloaded)).slice(dlmReportsInstance.perPage*parseInt(e),dlmReportsInstance.perPage*parseInt(e+1));for(let e=0;e<o.length;e++){const r=dlmReportsInstance.getDownloadByID(o[e].id);if(void 0===r)return;var s={id:o[e].id,title:o[e].title,edit_link:dlmAdminUrl+"post.php?post="+o[e].id+"&action=edit",total_downloads:r.total.toLocaleString()};jQuery(document).trigger("dlm_reports_top_downloads_item_before_render",[s,dlmReportsInstance,o[e],r]),new dlmBackBone.modelTopDownloads(s)}n.parent().removeClass("empty"),a.find(".dlm-reports-total-pages").html(Math.ceil(dlmReportsInstance.mostDownloaded.length/dlmReportsInstance.perPage)),parseInt(dlmReportsInstance.perPage)!==parseInt(o.length)?a.find('.downloads-block-navigation button[data-action="load-more"]').attr("disabled","disabled"):a.find('.downloads-block-navigation button[data-action="load-more"]').removeAttr("disabled"),dlmReportsInstance.mostDownloaded.length>dlmReportsInstance.perPage?a.find(".downloads-block-navigation button").removeClass("hidden"):a.find(".downloads-block-navigation button").addClass("hidden"),dlmReportsInstance.stopSpinner(jQuery("#total_downloads_table_wrapper2"))}}handleTopDownloads(){jQuery("html body").on("click","#total_downloads_table_wrapper2 .downloads-block-navigation button",function(){let e=jQuery(this).parents("#total_downloads_table_wrapper2"),t=e,a=e.attr("data-page"),n=jQuery(this),o=parseInt(a)+1,s=0!==a?parseInt(a)-1:0,r=e.find(".downloads-block-navigation").find("button").first(),d=e.find(".downloads-block-navigation").find("button").last();n.attr("disabled","disabled");var l={data:dlmReportsInstance.mostDownloaded,main_parent:e,offsetHolder:t,offset:a,link:n,nextPage:o,prevPage:s,prevButton:r,nextButton:d,doAction:dlmReportsInstance.setTopDownloads};dlmReportsInstance.handleSliderNavigation(l)}),jQuery("#total_downloads_table_wrapper2").find("input.dlm-reports-current-page").on("change",function(){dlmReportsInstance.paginationChange(jQuery(this),dlmReportsInstance.mostDownloaded,jQuery("#total_downloads_table_wrapper2"),jQuery(this).parents("#total_downloads_table_wrapper2"),dlmReportsInstance.setTopDownloads)})}handleSliderNavigation(e){const{data:t,main_parent:a,offsetHolder:n,offset:o,link:s,nextPage:r,prevPage:d,prevButton:l,nextButton:m,doAction:c}={...e};let p=1;"load-more"===s.data("action")?(n.attr("data-page",r),c(r),Math.ceil(t.length/dlmReportsInstance.perPage)>r+1&&m.removeAttr("disabled"),l.removeAttr("disabled"),p=parseInt(r)+1):0!==parseInt(o)&&(n.attr("data-page",d),c(d),1!==parseInt(o)&&l.removeAttr("disabled"),m.removeAttr("disabled"),p=parseInt(d)+1),a.find(".dlm-reports-current-page").val(p)}tabNagivation(){jQuery(document).on("click",".dlm-reports .dlm-insights-tab-navigation > li",function(){const e=jQuery(this),t=jQuery(".dlm-reports .dlm-insights-tab-navigation > li").not(e),a=jQuery('div.dlm-insights-tab-navigation__content[data-id="'+e.attr("id")+'"]'),n=jQuery("div.dlm-insights-tab-navigation__content").not(a);e.hasClass("active")||(e.addClass("active"),t.removeClass("active"),a.addClass("active"),n.removeClass("active"))})}getOrCreateTooltip(e){let t=e.canvas.parentNode.querySelector("div.dlm-canvas-tooltip"),a=e.canvas.parentNode.querySelector("div.dlm-reports-tooltip__line");if(t||((a=document.createElement("div")).className="dlm-reports-tooltip__line"),!t){(t=document.createElement("div")).className="dlm-canvas-tooltip";const n=document.createElement("div");n.className="dlm-reports-tooltip",t.appendChild(n),e.canvas.parentNode.appendChild(t),e.canvas.parentNode.appendChild(a)}return{tooltipEl:t,tooltipLine:a}}externalTooltipHandler(d,e){const{chart:t,tooltip:l}=e,{tooltipEl:a,tooltipLine:n}={...d.getOrCreateTooltip(t)};e=jQuery(a).parent().width();if(0===l.opacity)return a.style.opacity=0,void(n.style.opacity=0);if(l.body){const m=l.title||[],c=document.createElement("div"),p=(c.className="dlm-reports-tooltip__header",m.forEach(e=>{const t=document.createElement("div"),a=(t.className="dlm-reports-tooltip__row",document.createElement("p")),n=(a.className="dlm-reports-tooltip__info",a.appendChild(document.createTextNode("Downloads")),t.appendChild(a),jQuery(document).trigger("dlm_chart_tooltip_before",[dlmReportsInstance,l,t,d]),document.createElement("p"));n.className="dlm-reports-tooltip__date";var o=dlmReportsInstance.setChartTooltipDate(l.dataPoints[0].label,d,d.stats.chartStats);n.appendChild(document.createTextNode(o)),t.appendChild(n);const s=document.createElement("p"),r=(s.className="dlm-reports-tooltip__downloads",document.createElement("span"));r.className="dlm-reports-tooltip__downloads_pointer",r.style.backgroundColor=dlmReportsInstance.chartColors.darkCyan.default,s.appendChild(r),s.appendChild(document.createTextNode(dlmReportsInstance.shortNumber(l.dataPoints[0].formattedValue))),t.appendChild(s),jQuery(document).trigger("dlm_chart_tooltip_after",[dlmReportsInstance,l,t,d]),c.appendChild(t)}),a.querySelector("div.dlm-reports-tooltip"));for(;p.firstChild;)p.firstChild.remove();p.appendChild(c)}var{offsetLeft:o,offsetTop:s}=t.canvas;a.style.opacity=1;let r={isMargin:!(n.style.opacity=1),left:!1};l.caretX-l.width<0&&(r.isMargin=!0,r.left=!0),o+l.caretX+l.width>e&&(r.isMargin=!0,r.left=!1),r.isMargin?r.left?a.style.left=o+l.width+"px":a.style.left=e-l.width+"px":a.style.left=o+l.caretX+"px",n.style.left=o+l.caretX+"px",a.style.top=s+l.caretY-a.offsetHeight-10+"px"}createUserRelatedData(){dlmReportsInstance.userRelatedData=[],Object.values(dlmReportsInstance.userDownloads).forEach((e,t)=>{var a;"0"!==e.user_id&&(a=[e.user_id,e.download_id,e.download_date,e.download_status],e="user_"+e.user_id,void 0!==dlmReportsInstance.userRelatedData[e]?dlmReportsInstance.userRelatedData[e].push(a):dlmReportsInstance.userRelatedData[e]=[a])})}logsDataByDate(e,t){var{startDate:e,endDate:t}={...dlmReportsInstance.getSetDates(e,t)};dlmReportsInstance.userDownloads=JSON.parse(JSON.stringify(dlmReportsInstance.dlmUsersStats.logs));let a=new Date(e),n=(a.setDate(a.getDate()-1),a=a.getTime(),new Date(t));n.setDate(n.getDate()+1),n=n.getTime(),dlmReportsInstance.userDownloads=dlmReportsInstance.userDownloads.filter((e,t)=>{e=dlmReportsInstance.createDateElement(new Date(e.download_date));return(e=new Date(e).getTime())>a&&e<n}),dlmReportsInstance.createUserRelatedData(),dlmReportsInstance.filterDownloads(),dlmReportsInstance.setMostActiveUser(),dlmReportsInstance.setLoggedOutDownloads(),dlmReportsInstance.setLoggedInDownloads(),jQuery(document).trigger("dlm_set_logs_data_by_date",[dlmReportsInstance])}setMostActiveUser(){var e=dlmReportsInstance.getUserByID(dlmReportsInstance.getMostActiveID()[0]);jQuery(".dlm-reports-block-summary li#most_active_user span").html(dlmReportsInstance.userToolTipMarkup(e))}getMostActiveID(){return Object.values(dlmReportsInstance.userRelatedData).length?Object.values(dlmReportsInstance.userRelatedData).reduce((e,t,a)=>parseInt(e.length)>parseInt(t.length)&&0<e.length&&null!==dlmReportsInstance.getUserByID(e[0][0])?e:null!==dlmReportsInstance.getUserByID(t[0][0])?t:[],[]):0}getUserByID(t){if(!t)return null;if("0"===t)return{role:"Guest",display_name:"Guest"};var e=Object.values(dlmReportsInstance.dlmUsersStats.users).filter(e=>parseInt(t)===parseInt(e.id));return Array.isArray(e)?0===e.length?null:e[0]:e}getLoggedInDownloads(){return Object.values(dlmReportsInstance.userRelatedData).length?1<Object.values(dlmReportsInstance.userRelatedData).length?Object.values(dlmReportsInstance.userRelatedData).reduce((e,t)=>parseInt(e)+parseInt(t.length),0):Object.values(dlmReportsInstance.userRelatedData)[0].length:0}setLoggedInDownloads(){const e=dlmReportsInstance.getLoggedInDownloads();jQuery(".dlm-reports-block-summary li#logged_in span,#total_downloads_summary_wrapper .dlm-reports-logged-in").html(e.toLocaleString())}getLoggedOutDownloads(){return dlmReportsInstance.userDownloads.length-dlmReportsInstance.getLoggedInDownloads()}setLoggedOutDownloads(){const e=dlmReportsInstance.getLoggedOutDownloads();jQuery(".dlm-reports-block-summary li#logged_out span,#total_downloads_summary_wrapper .dlm-reports-logged-out").html(e.toLocaleString())}userToolTipMarkup(e){let t='<div class="dlm-user-reports">';return t=(t=t+'<div class="wpchill-tooltip"><i>[?]</i>'+'<div class="wpchill-tooltip-content">')+("<span>User ID: "+(null!==e?e.id:"--")+"</span>"),"object"!=typeof e&&e.url.length&&(t+="<span>User URL: "+(null!==e?e.url:"--")+"</span>"),t+="<span>User registration date: "+(null!==e?e.registered:"--")+"</span>",null!==e&&void 0!==e.role&&e.role.length&&(t+="<span>User role: "+e.role+"</span>"),t=(t+="</div></div>")+(null!==e?e.display_name:"--")+"</div>"}setUserDownloads(e=0,t=!1){const a=jQuery("#users_download_log"),n=jQuery("#users_download_log .user-logs__list");if(n.empty(),!0!==t){let t=[];t=(null!==dlmReportsInstance.tempDownloads?JSON.parse(JSON.stringify(dlmReportsInstance.tempDownloads)):JSON.parse(JSON.stringify(dlmReportsInstance.userDownloads))).slice(dlmReportsInstance.perPage*parseInt(e),dlmReportsInstance.perPage*parseInt(e+1));for(let e=0;e<t.length;e++){var o=dlmReportsInstance.getUserByID(t[e].user_id.toString()),s=dlmReportsInstance.getDownloadCPT(t[e].download_id.toString()),r={key:e,user:null!=o?o.display_name:"--",ip:t[e].user_ip,role:null!==o&&null!==o.role?o.role:"--",download:null!=s?s.title:"--",valid_user:"0"!==t[e].user_id,edit_link:"0"!==t[e].user_id?"user-edit.php?user_id="+t[e].user_id:"#",edit_download_link:null!=s?dlmAdminUrl+"post.php?post="+s.id+"&action=edit":"#",status:t[e].download_status,download_date:t[e].download_date};jQuery(document).trigger("dlm_reports_user_logs_item_before_render",[r,dlmReportsInstance,t[e],o,s]),new dlmBackBone.modelUserLogs(r)}dlmReportsInstance.stopSpinner(jQuery("#users_download_log")),a.find(".dlm-reports-total-pages").html(Math.ceil(dlmReportsInstance.tempDownloads.length/dlmReportsInstance.perPage)),parseInt(dlmReportsInstance.perPage)!==parseInt(t.length)?a.find('.user-downloads-block-navigation button[data-action="load-more"]').attr("disabled","disabled"):a.find('.user-downloads-block-navigation button[data-action="load-more"]').removeAttr("disabled"),dlmReportsInstance.userDownloads.length>dlmReportsInstance.perPage?a.find(".user-downloads-block-navigation button").removeClass("hidden"):a.find(".user-downloads-block-navigation button").addClass("hidden")}}filterDownloads(){dlmReportsInstance.tempDownloads=JSON.parse(JSON.stringify(dlmReportsInstance.userDownloads)),dlmReportsInstance.currentFilters.length&&dlmReportsInstance.currentFilters.forEach(t=>{dlmReportsInstance.tempDownloads=dlmReportsInstance.tempDownloads.filter(e=>t.on===e[t.type])}),dlmReportsInstance.setUserDownloads()}handleUserDownloads(){jQuery(".user-downloads-block-navigation").on("click","button",function(e){e.stopPropagation();let t=jQuery(this).parents("#users_downloads_table_wrapper"),a=t.find("#users_download_log"),n=a.attr("data-page"),o=jQuery(this),s=parseInt(n)+1,r=0!==n?parseInt(n)-1:0,d=t.find(".downloads-block-navigation button").first(),l=t.find(".downloads-block-navigation button").last();o.attr("disabled","disabled");e={data:dlmReportsInstance.tempDownloads,main_parent:t,offsetHolder:a,offset:n,link:o,nextPage:s,prevPage:r,prevButton:d,nextButton:l,doAction:dlmReportsInstance.setUserDownloads};dlmReportsInstance.handleSliderNavigation(e)}),jQuery("#users_downloads_table_wrapper").find("input.dlm-reports-current-page").on("change",function(){dlmReportsInstance.paginationChange(jQuery(this),dlmReportsInstance.tempDownloads,jQuery("#users_downloads_table_wrapper"),jQuery("#users_downloads_table_wrapper").find("#users_download_log"),dlmReportsInstance.setUserDownloads)})}togglePageSettings(){jQuery("#dlm-toggle-settings").on("click",function(e){e.stopPropagation(),jQuery(this).find(".dlm-toggle-settings__settings").toggleClass("display")}),jQuery(".dlm-toggle-settings__settings").on("click",function(e){e.stopPropagation()}),jQuery("html,body").on("click",function(){jQuery(this).find(".dlm-toggle-settings__settings").removeClass("display")}),jQuery(document).on("change",".wpchill-toggle__input",function(e){const t=jQuery(this),a=t.attr("name"),n={action:"dlm_update_report_setting",name:a,checked:t.is(":checked"),_ajax_nonce:dlmReportsNonce};jQuery.post(ajaxurl,n,function(e){a,jQuery(document).trigger("dlm_settings_ajax_response",[dlmReportsInstance,t,e])})})}getMaxDownload(){let t=0;return dlmReportsInstance.dataSets.forEach(e=>{e=Object.values(e.data).reduce((e,t)=>t<e?e:t,0);t<e&&(t=e)}),parseInt(t)}setChartTooltipDate(e,t,a){let n="";var o,s,r;return n="undefined"!==t.chartType&&"months"===t.chartType?(moment(e).year(),r=moment(e).month(),a=Object.keys(a)[Object.keys(a).length-1],o=moment(a).month(moment(a).month()-1).format("YYYY-MM"),s=moment(e).format("YYYY-MM"),r<11?s===o?moment(s).format("MMMM, YYYY"):moment(e).format("MMM")+" - "+moment(e).month(r+1).format("MMM")+moment(e).format(", YYYY"):s===o||s===a?moment(s).format("MMMM, YYYY"):moment(e).format("MMM")+moment(e).format(" YYYY")+" - "+moment(e).month(r+1).format("MMM")+moment(e).month(r+1).format(", YYYY")):"undefined"!==t.chartType&&"days"===t.chartType?(moment(e).year(),o=moment(e).day(),a=moment(e).format("MMMM"),s=moment(e).day(o+1).format("MMMM"),r=dlmReportsInstance.dates.downloads.end_date,t=moment(r).day(moment(r).day()-1).format("MMMM Do"),moment(e).format("MMMM Do")===moment(r).format("MMMM Do")||moment(e).format("MMMM Do")===t?moment(e).format("MMMM Do, YYYY"):a===s?moment(e).format("MMMM Do")+" - "+moment(e).day(o+1).format("Do")+moment(e).format(", YYYY"):moment(e).format("MMM Do")+" - "+moment(e).day(o+1).format("MMM Do")+moment(e).format(", YYYY")):moment(e).format("MMMM Do, YY")}closeDatePickers(e){jQuery(".dlm-reports-header-date-selector").not(e).each(function(){var e={target:jQuery(this).attr("id")};dlmReportsInstance.hideDatepicker(jQuery(this),e)})}shortNumber(e){return e=4<=(e="string"==typeof e?e.replace(/,/gi,""):parseInt(e).toString()).length?parseInt(e.substring(0,e.length-3)).toLocaleString()+"k":e}getDownloadByID(t){let a={total:0},n;return dlmReportsInstance.tempDownloads.forEach(function(e){t===e.download_id&&(n=e,a.total=a.total+1,jQuery(document).trigger("dlm_download_by_id",[dlmReportsInstance,a,n]))}),a}getDownloadCPT(t){let e=null;return Array.isArray(dlmReportsInstance.mostDownloaded)&&(e=dlmReportsInstance.mostDownloaded.filter(e=>e.id===t,0)[0]),jQuery(document).trigger("dlm_download_cpt",[dlmReportsInstance,e]),e}setSpinner(e){e.append('<div class="dlm-reports-spinner"><span></span></div>')}stopSpinner(e){e.find(".dlm-reports-spinner").remove()}eventsFunctions(){jQuery("body").on("click",".total_downloads_table_filters_total_downloads > a",function(e){e.preventDefault(),jQuery(this).parent().find("span.dashicons").toggleClass("dashicons-arrow-down dashicons-arrow-up"),dlmReportsInstance.orderOverviewItemsByTotal()}),jQuery("body").on("click",".total_downloads_table_filters_download_date > a",function(e){e.preventDefault(),jQuery(this).parent().find("span.dashicons").toggleClass("dashicons-arrow-down dashicons-arrow-up"),dlmReportsInstance.orderUserReportsItemsByDate()}),jQuery("body").on("change","select.dlm-reports-per-page",function(e){dlmReportsInstance.perPage=jQuery(this).val(),dlmReportsInstance.setTopDownloads(),dlmReportsInstance.setUserDownloads(),jQuery.post(ajaxurl,{action:"dlm_update_report_setting",name:"dlm-reports-per-page",value:dlmReportsInstance.perPage,_ajax_nonce:dlmReportsNonce},function(e){})})}orderItems(e,a,n,t=0){return e.sort((e,t)=>"asc"!==a?t[n]-e[n]:e[n]-t[n]),e}orderOverviewItemsByTotal(){dlmReportsInstance.mostDownloaded=dlmReportsInstance.mostDownloaded.reverse(),dlmReportsInstance.setTopDownloads()}orderUserReportsItemsByDate(){dlmReportsInstance.tempDownloads=dlmReportsInstance.tempDownloads.reverse(),dlmReportsInstance.setUserDownloads()}paginationChange(e,t,a,n,o){let s=parseInt(e.val()),r=(0===s&&(s=1),t.length<s*dlmReportsInstance.perPage&&(s=Math.ceil(t.length/dlmReportsInstance.perPage)),jQuery(this).next('button[data-action="load-more"]')),d=s+1,l=s-1,m=a.find(".downloads-block-navigation button").first(),c=a.find(".downloads-block-navigation button").last();r.attr("disabled","disabled");e={data:t,main_parent:a,offsetHolder:n,offset:s,link:r,nextPage:d,prevPage:l,prevButton:m,nextButton:c,doAction:o};dlmReportsInstance.handleSliderNavigation(e)}}
|
1 |
+
jQuery(function(e){new DLM_Reports;dlmReportsInstance.fetchUserData()});class DLM_Reports{dlmReportsStats=[];dlmUsersStats={logs:[],users:[]};currentFilters=[];tempDownloads=null;templates={};totalDownloads=0;perPage=dlmReportsPerPage;constructor(){(dlmReportsInstance=this).chartContainer=document.getElementById("total_downloads_chart");const e=dlmReportsInstance.chartContainer.getContext("2d");dlmReportsInstance.chartColors={purple:{default:"rgba(149, 76, 233, 1)",threesome:"rgba(149, 76, 233, 0.75)",half:"rgba(149, 76, 233, 0.5)",quarter:"rgba(149, 76, 233, 0.5)",zero:"rgba(149, 76, 233, 0.05)"},blue:{default:"rgba(67, 56, 202, 1)",threesome:"rgba(67, 56, 202, 0.75)",half:"rgba(67, 56, 202, 0.5)",quarter:"rgba(67, 56, 202, 0.25)",zero:"rgba(67, 56, 202, 0.05)"},green:{default:"rgba(00, 255, 00, 1)",threesome:"rgba(00, 255, 00, 0.75)",half:"rgba(00, 255, 00, 0.5)",quarter:"rgba(00, 255, 00, 0.25)",zero:"rgba(67, 56, 202, 0.05)"},royalBlue:{default:"rgba(65, 105, 225, 1)",threesome:"rgba(65, 105, 225, 0.75)",half:"rgba(65, 105, 225, 0.5)",quarter:"rgba(65, 105, 225, 0.25)",zero:"rgba(65, 105, 225, 0.05)"},persianBlue:{default:"rgba(28, 57, 187, 1)",threesome:"rgba(28, 57, 187, 0.75)",half:"rgba(28, 57, 187, 0.5)",quarter:"rgba(28, 57, 187, 0.25)",zero:"rgba(28, 57, 187, 0.05)"},darkCyan:{default:"rgba(0,129,167, 1)",threesome:"rgba(0,129,167, 0.75)",half:"rgba(0,129,167, 0.5)",quarter:"rgba(0,129,167, 0.25)",zero:"rgba(0,129,167, 0.05)"},strongCyan:{default:"rgba(0, 175, 185, 1)",threesome:"rgba(0, 175, 185, 0.75)",half:"rgba(0, 175, 185, 0.5)",quarter:"rgba(0, 175, 185, 0.25)",zero:"rgba(0, 175, 185, 0.05)"}},dlmReportsInstance.chartGradient=e.createLinearGradient(0,25,0,300),dlmReportsInstance.chartGradient.addColorStop(0,dlmReportsInstance.chartColors.darkCyan.half),dlmReportsInstance.chartGradient.addColorStop(.45,dlmReportsInstance.chartColors.darkCyan.quarter),dlmReportsInstance.chartGradient.addColorStop(1,dlmReportsInstance.chartColors.darkCyan.zero),dlmReportsInstance.datePickerContainer=document.getElementById("dlm-date-range-picker"),dlmReportsInstance.dataSets=[];let t=new Date;dlmReportsInstance.dates={downloads:{start_date:new Date(t.setMonth(t.getMonth()-1)),end_date:new Date}},dlmReportsInstance.chartDataObject={}}async fetchReportsData(e=0,t=1e3){const a=jQuery('div[data-id="general_info"]');dlmReportsInstance.setSpinner(jQuery(".total_downloads_chart-wrapper")),dlmReportsInstance.setSpinner(jQuery("#users_download_log")),dlmReportsInstance.setSpinner(jQuery("#total_downloads_table_wrapper2"));let n=dlmDownloadReportsAPI+"?offset="+e+"&limit="+t;0<dlmDownloadReportsAPI.indexOf("index.php?")&&(n=dlmDownloadReportsAPI+"&offset="+e+"&limit="+t);const o=await fetch(n);if(!o.ok){const s=document.createElement("div"),r=(s.className="dlm-loading-data",document.createTextNode("Seems like we bumped into an error! ")),d=document.createTextNode("Data fetching returned a status text of : "+fetchedData.statusText),l=document.createElement("h1"),m=document.createElement("h3");throw l.appendChild(r),m.appendChild(d),s.appendChild(l),s.appendChild(m),a.find(".dlm-loading-data").remove(),a.append(s),new Error("Something went wrong! Reports response did not come OK - "+fetchedData.statusText)}dlmReportsInstance.mostDownloaded=!1,dlmReportsInstance.stats=!1,dlmReportsInstance.chartType="day";e=await o.json();dlmReportsInstance.dlmReportsStats=dlmReportsInstance.dlmReportsStats.concat(e.stats),!0===e.done?(0<window.location.href.indexOf("dlm_time")&&(dlmReportsInstance.dates.downloads.start_date=0<Object.keys(dlmReportsInstance.dlmReportsStats).length?new Date(dlmReportsInstance.dlmReportsStats[0].date):new Date,dlmReportsInstance.dates.downloads.end_date=new Date,jQuery("#dlm-date-range-picker .date-range-info").html(dlmReportsInstance.dates.downloads.start_date.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"})+" - "+dlmReportsInstance.dates.downloads.end_date.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"}))),dlmReportsInstance.createDataOnDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date),dlmReportsInstance.datePicker={opened:!1},jQuery(document).trigger("dlm_downloads_report_fetched",[dlmReportsInstance,dlmReportsInstance.dlmReportsStats]),dlmReportsInstance.stopSpinner(jQuery(".total_downloads_chart-wrapper")),dlmReportsInstance.init()):dlmReportsInstance.fetchReportsData(e.offset)}async fetchUsersReportsData(e=0,t=dlmPHPinfo.retrieved_rows){const a=jQuery('div[data-id="user_reports"]');let n=dlmUserReportsAPI+"?offset="+e+"&limit="+t;0<dlmUserReportsAPI.indexOf("index.php?")&&(n=dlmUserReportsAPI+"&offset="+e+"&limit="+t);const o=await fetch(n);if(!o.ok)throw new Error("Something went wrong! Reports response did not come OK - "+o.statusText);e=await o.json();dlmReportsInstance.dlmUsersStats.logs=dlmReportsInstance.dlmUsersStats.logs.concat(e.logs),!0===e.done?(dlmReportsInstance.userDownloads=void 0!==dlmReportsInstance.dlmUsersStats.logs?JSON.parse(JSON.stringify(dlmReportsInstance.dlmUsersStats.logs)):{},a.find(".dlm-loading-data").remove(),dlmReportsInstance.userReportsTab(),dlmReportsInstance.setTopDownloads(),dlmReportsInstance.stopSpinner(jQuery("#total_downloads_table_wrapper2"))):dlmReportsInstance.fetchUsersReportsData(e.offset)}async fetchUserData(){const e=await fetch(dlmUserDataAPI);if(!e.ok)throw new Error("Something went wrong! Reports response did not come OK - "+e.statusText);var t=await e.json();dlmReportsInstance.dlmUsersStats.users=dlmReportsInstance.dlmUsersStats.users.concat(t),dlmReportsInstance.fetchReportsData()}init(){dlmReportsInstance.tabNagivation(),dlmReportsInstance.overViewTab(),dlmReportsInstance.togglePageSettings(),dlmReportsInstance.setSpinner(jQuery("#users_download_log")),dlmReportsInstance.setSpinner(jQuery("#total_downloads_table_wrapper2")),dlmReportsInstance.fetchUsersReportsData(),jQuery(document).trigger("dlm_reports_init",[dlmReportsInstance]),dlmReportsInstance.eventsFunctions()}overViewTab(){dlmReportsInstance.dlmCreateChart(dlmReportsInstance.stats.chartStats,dlmReportsInstance.chartContainer),dlmReportsInstance.dlmDownloadsSummary(),dlmReportsInstance.datePickerContainer.addEventListener("click",dlmReportsInstance.toggleDatepicker.bind(this)),dlmReportsInstance.setTodayDownloads(),dlmReportsInstance.handleTopDownloads(),jQuery(document).on("click","body",function(e){e.stopPropagation(),0<jQuery(dlmReportsInstance.datePickerContainer).find("#dlm_date_range_picker").length&&dlmReportsInstance.hideDatepicker(jQuery(dlmReportsInstance.datePickerContainer),{target:"dlm-date-range-picker"})})}userReportsTab(){0!==Object.values(dlmReportsInstance.dlmUsersStats).length&&(dlmReportsInstance.logsDataByDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date),dlmReportsInstance.handleUserDownloads(),dlmReportsInstance.filterDownloads())}getDates(e,t){const a={};let n=e;for(;n<=t;)a[this.createDateElement(n)]=0,n=this.getNextDay(n);return a}getMonths(e){const t={};return Object.keys(e).map(e=>{e=e.substring(0,7);void 0===t[e]&&(t[e]=0)}),t}getDoubleMonths(e){const t={},a=Object.keys(e)[0],n=Object.keys(e)[Object.keys(e).length-1];let o=0,s=a.substring(0,7),r=n.substring(0,7);return Object.keys(e).map(e=>{e=e.substring(0,7);s!==e&&r!==e&&(s=e,o++),void 0===t[e]&&0==o%2&&(t[e]=0)}),t}getWeeks(e){let a={};return Object.keys(e).forEach(e=>{let t;t=15<moment(e).date()?e.substring(0,7)+"-15":e.substring(0,7)+"-01",void 0===a[t]&&(a[t]=0)}),a}getWeek(e){let t={},a=Object.keys(e)[Object.keys(e).length-1],n=0;return Object.keys(e).map(e=>{void 0===t[e]&&0==n%7&&(t[e]=0),n++}),void 0===t[a]&&(t[a]=0),t}getDoubleDays(e){let t={},a=Object.keys(e)[0],n=Object.keys(e)[Object.keys(e).length-1],o=0;return Object.keys(e).map(e=>{a!==e&&n!==e&&(a=e,o++),void 0===t[e]&&0==o%2&&(t[e]=0)}),t}getNextDay(e){const t=new Date(e);return t.setDate(e.getDate()+1),t}createDateElement(e){var t=(e.getMonth()+1<10?"0":"")+(e.getMonth()+1);return e.getFullYear()+"-"+t+"-"+("0"+e.getDate()).slice(-2)}getSetDates(e,t){let a,n;if(void 0!==e&&e)a=dlmReportsInstance.createDateElement(new Date(e));else{const o=new Date;o.setDate(o.getDate()-30),a=dlmReportsInstance.createDateElement(o)}if(void 0!==t&&t){e=new Date(t);n=dlmReportsInstance.createDateElement(e)}else{const s=new Date;s.setDate(s.getDate()+1),n=dlmReportsInstance.createDateElement(s)}return{startDate:a,endDate:n}}createDataOnDate(e,t){let{startDate:a,endDate:n}={...dlmReportsInstance.getSetDates(e,t)},o,s,r,d,l,m=(dlmReportsInstance.reportsData=void 0!==dlmReportsInstance.dlmReportsStats?JSON.parse(JSON.stringify(dlmReportsInstance.dlmReportsStats)):{},s=moment(n,"YYYY-MM-DD").month()-moment(a,"YYYY-MM-DD").month(),r=moment(n,"YYYY-MM-DD").year()-moment(a,"YYYY-MM-DD").year(),o=moment(n).date()-moment(a).date(),dlmReportsInstance.chartType="day",0==r&&-6<s&&s<6?1<s||s<-1?dlmReportsInstance.chartType=2==s?"week":"weeks":1==s&&(8<o||-14<o||0==o)&&(dlmReportsInstance.chartType="days"):s<=0?dlmReportsInstance.chartType="month":dlmReportsInstance.chartType="months",dlmReportsInstance.getDates(new Date(a),new Date(n))),c,p,i,g;switch(dlmReportsInstance.chartType){case"months":p=dlmReportsInstance.getDoubleMonths(m),l=p;break;case"month":var u=dlmReportsInstance.getMonths(m);l=u;break;case"weeks":i=dlmReportsInstance.getWeeks(m),l=i;break;case"week":g=dlmReportsInstance.getWeek(m),l=g;break;case"days":c=dlmReportsInstance.getDoubleDays(m),l=c;break;case"day":l=m}Object.values(dlmReportsInstance.reportsData).forEach((o,e)=>{var s=JSON.parse(o.download_ids);if(void 0!==m[o.date])switch(dlmReportsInstance.chartType){case"months":d=o.date.substring(0,7);let e=parseInt(o.date.substring(5,7)),t=o.date.substring(0,5),a=6<(e-1).length?t+(e-1):t+"0"+(e-1);Object.values(s).forEach((e,t)=>{void 0===p[d]?void 0!==p[a]&&(p[a]=p[a]+e.downloads):p[d]=p[d]+e.downloads}),l=p;break;case"month":d=o.date.substring(0,7),Object.values(s).forEach((e,t)=>{monthDownloads[d]=void 0!==monthDownloads[d]?monthDownloads[d]+e.downloads:e.downloads}),l=monthDownloads;break;case"weeks":d=15<moment(o.date).date()?o.date.substring(0,7)+"-15":o.date.substring(0,7)+"-01",Object.values(s).forEach((e,t)=>{i[d]=void 0!==i[d]?i[d]+e.downloads:e.downloads}),l=i;break;case"week":d=o.date,Object.values(s).forEach((t,e)=>{if(void 0===g[d])for(let e=1;e<8;e++){var a=moment(o.date).date(moment(o.date).date()-e).format("YYYY-MM-DD");void 0!==g[a]&&(g[a]=g[a]+t.downloads)}else g[d]=g[d]+t.downloads}),l=g;break;case"days":d=o.date;let n=moment(o.date).date(moment(o.date).date()-1).format("YYYY-MM-DD");Object.values(s).forEach((e,t)=>{void 0===c[d]?void 0!==c[n]&&(c[n]=c[n]+e.downloads):c[d]=c[d]+e.downloads}),l=c;break;case"day":Object.values(s).forEach((e,t)=>{m[o.date]=m[o.date]+e.downloads}),l=m}else delete dlmReportsInstance.reportsData[e]});const I=Object.keys(m);e=I.length,t=I.findIndex(e=>a===e);let R=I.findIndex(e=>n===e);-1===t&&-1===R?dlmReportsInstance.stats={chartStats:Object.assign({},l),summaryStats:!1,daysLength:e}:(-1===R&&(R=e),dlmReportsInstance.stats={chartStats:Object.assign({},l),summaryStats:dlmReportsInstance.reportsData,daysLength:e})}dlmCreateChart(t,a,n=!1){if(t&&a){let e=Chart.getChart("total_downloads_chart");dlmReportsInstance.chartDataObject={dataSetLabel:"Downloads",dataSetColor:"#27ae60",dataSetbg:dlmReportsInstance.chartGradient,dataSetPointbg:dlmReportsInstance.chartColors.darkCyan.default,dataSetBorder:dlmReportsInstance.chartColors.darkCyan.default,dataSetElementColor:"#2ecc71",lineType:"original",xAxis:"x",chartData:t},void 0!==e&&e.destroy(),jQuery(document).trigger("dlm_reports_before_data_sets",[dlmReportsInstance.chartDataObject,t,n]),0<dlmReportsInstance.dataSets.length&&(dlmReportsInstance.dataSets=dlmReportsInstance.dataSets.filter(e=>dlmReportsInstance.chartDataObject.lineType!==e.origin)),dlmReportsInstance.dataSets.push({origin:dlmReportsInstance.chartDataObject.lineType,label:dlmReportsInstance.chartDataObject.dataSetLabel,color:dlmReportsInstance.chartDataObject.dataSetColor,data:dlmReportsInstance.chartDataObject.chartData,type:"line",fill:!0,backgroundColor:dlmReportsInstance.chartDataObject.dataSetbg,pointBackgroundColor:dlmReportsInstance.chartDataObject.dataSetPointbg,pointHoverBackgroundColor:"#fff",borderColor:dlmReportsInstance.chartDataObject.dataSetBorder,pointBorderWidth:1,lineTension:.3,borderWidth:1,pointRadius:3,elements:{line:{borderColor:dlmReportsInstance.chartDataObject.dataSetElementColor,borderWidth:1},point:{radius:4,hoverRadius:4,pointStyle:"circle"}}});t=Object.values(dlmReportsInstance.dataSets).filter(e=>"original"===e.origin);let s=Object.keys(t[0].data);dlmReportsInstance.dataSets.sort(function(e,t){return"original"===e.origin?-1:1}),dlmReportsInstance.chart=new Chart(a,{title:"",data:{datasets:dlmReportsInstance.dataSets},height:450,is_series:1,options:{aspectRatio:5,animation:!1,interaction:{mode:"index",intersect:!1},stacked:!1,scales:{x:{grid:{display:!1},ticks:{callback:e=>{let t="";var a=s[e],n=s[s.length-1],o=moment(n).month(moment(n).month()-1).format("YYYY-MM");return t="undefined"!==dlmReportsInstance.chartType&&"months"===dlmReportsInstance.chartType?(e=moment(s[e]).month())<11?a===o?moment(a).format("MMM, YYYY"):moment(a).format("MMM")+" - "+moment(a).month(e+1).format("MMM")+moment(a).format(", YYYY"):a===o||a===n?moment(a).format("MMM, YYYY"):moment(a).format("MMM")+moment(a).format(" YYYY")+" - "+moment(a).month(e+1).format("MMM")+moment(a).month(e+1).format(", YYYY"):"undefined"!==dlmReportsInstance.chartType&&"months"===dlmReportsInstance.chartType?moment(a).format("MMMM, YYYY"):moment(a).format("D MMM")}}},y:{grid:{drawBorder:!1},min:0,max:0!==dlmReportsInstance.getMaxDownload()?1===Math.ceil(dlmReportsInstance.getMaxDownload()/10)?dlmReportsInstance.getMaxDownload()+1:10*Math.ceil(dlmReportsInstance.getMaxDownload()/10):100,ticks:{stepSize:0!==dlmReportsInstance.getMaxDownload()?Math.ceil(dlmReportsInstance.getMaxDownload()/4):25,callback:e=>dlmReportsInstance.shortNumber(e)}}},normalized:!0,parsing:{xAxisKey:"x",yAxisKey:"y"},plugins:{tooltip:{enabled:!1,external:dlmReportsInstance.externalTooltipHandler.bind(dlmReportsInstance,this)},legend:{display:!0}}}})}}dlmDownloadsSummary(){let a={};if(!1===dlmReportsInstance.stats||!1===dlmReportsInstance.stats.summaryStats||Object.keys(dlmReportsInstance.stats.summaryStats).length<=0)return this.setTotalDownloads(0),this.setDailyAverage(0),void this.setMostDownloaded("--");dlmReportsInstance.totalDownloads=0,dlmReportsInstance.stats.summaryStats.forEach(e=>{e=JSON.parse(e.download_ids),Object.entries(e).forEach(([e,t])=>{dlmReportsInstance.totalDownloads+=t.downloads,a[e]=void 0===a[e]?{downloads:t.downloads,title:t.title,id:e}:{downloads:a[e].downloads+t.downloads,title:t.title,id:e}})}),dlmReportsInstance.mostDownloaded=dlmReportsInstance.orderItems(Object.values(a),"desc","downloads"),dlmReportsInstance.setTotalDownloads(dlmReportsInstance.totalDownloads),dlmReportsInstance.setDailyAverage((dlmReportsInstance.totalDownloads/parseInt(dlmReportsInstance.stats.daysLength)).toFixed(0)),dlmReportsInstance.setMostDownloaded(dlmReportsInstance.mostDownloaded[0].title)}createDatepicker(e,t,a){const n=new Date;let o=n.getDate()-1,s=n.getMonth()+1,r=s-1;var d=n.getFullYear(),l=(o<10&&(o="0"+o),s<10&&(s="0"+s),r<10&&(r="0"+r),d+"-"+s+"-"+o),d=d+"-"+r+"-"+o,m=jQuery("<div>").addClass("dlm_rdrs_overlay"),a=jQuery("<div>").attr("id",a.replace("#",""));return"dlm-date-range-picker"===t.target?(dlmReportsInstance.startDateInput=jQuery("<input>").attr("type","hidden").attr("id","dlm_start_date").attr("value",d),dlmReportsInstance.endDateInput=jQuery("<input>").attr("type","hidden").attr("id","dlm_end_date").attr("value",l),m.append(a).append(dlmReportsInstance.startDateInput).append(dlmReportsInstance.endDateInput)):jQuery(document).trigger("dlm_create_date_picker_"+t.target,[dlmReportsInstance,m,a,d,l]),m}displayDatepicker(e,s){var t;if(jQuery(e)){if(t="#"+jQuery(e).attr("id").replace(/-/gi,"_"),"dlm-date-range-picker"===s.target){if(dlmReportsInstance.datePicker.opened)return;dlmReportsInstance.datePicker.opened=!0}else jQuery(document).trigger("dlm_display_datepicker_"+s.target,[dlmReportsInstance,s,e]);let o=dlmReportsInstance.createDatepicker(e,s,t);e.append(o);var a=0<Object.keys(dlmReportsInstance.dlmReportsStats).length?new Date(dlmReportsInstance.dlmReportsStats[0].date):new Date,n=(new Date,[]),e=(jQuery(document).trigger("dlm_datepicker_shortcuts_"+s.target,[dlmReportsInstance,s,e,n]),{separator:" to ",autoClose:!0,getValue:function(){},setValue:function(e,t,a){o.find('input[type="hidden"]').first().val(t),o.find('input[type="hidden"]').last().val(a)},inline:!0,alwaysOpen:!0,container:t,endDate:new Date,startDate:a,showShortcuts:!0,shortcuts:null,customShortcuts:n});o.dateRangePicker(e).on("datepicker-change",(e,t)=>{var a,n;t.date1&&t.date2&&(a=t.date1.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"}),n=t.date2.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"}),o.parent().find("span.date-range-info").text(a+" - "+n)),"dlm-date-range-picker"===s.target?(dlmReportsInstance.dates.downloads={start_date:t.date1,end_date:t.date2},dlmReportsInstance.createDataOnDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date),dlmReportsInstance.dlmCreateChart(dlmReportsInstance.stats.chartStats,dlmReportsInstance.chartContainer,!1),dlmReportsInstance.dlmDownloadsSummary(),0<Object.values(dlmReportsInstance.dlmUsersStats.logs).length&&dlmReportsInstance.logsDataByDate(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date)):jQuery(document).trigger("dlm_daterangepicker_init_"+s.target,[dlmReportsInstance,t.date1,t.date2]),dlmReportsInstance.setTopDownloads(),o.data("dateRangePicker").close()}),"dlm-date-range-picker"===s.target?o.data("dateRangePicker").setDateRange(dlmReportsInstance.dates.downloads.start_date,dlmReportsInstance.dates.downloads.end_date):jQuery(document).trigger("dlm_daterangepicker_after_init_"+s.target,[o,dlmReportsInstance])}}hideDatepicker(e,t){"dlm-date-range-picker"===t.target?dlmReportsInstance.datePicker.opened=!1:jQuery(document).trigger("dlm_hide_datepicker_"+t.target,[dlmReportsInstance,e,t]),e.find(".dlm_rdrs_overlay").remove()}toggleDatepicker(e){e.stopPropagation();const t=jQuery(e.target).parents(".dlm-reports-header-date-selector");e={target:t.attr("id"),object:dlmReportsInstance.datePicker};dlmReportsInstance.closeDatePickers(t),"dlm-date-range-picker"===e.target?dlmReportsInstance.datePicker.opened?dlmReportsInstance.hideDatepicker(t,e):dlmReportsInstance.displayDatepicker(t,e):jQuery(document).trigger("dlm_toggle_datepicker_"+e.target,[dlmReportsInstance,t,e])}setTotalDownloads(e){jQuery(".dlm-reports-block-summary li#total span").html(e.toLocaleString())}setDailyAverage(e){jQuery(".dlm-reports-block-summary li#average span").html(e.toLocaleString())}setMostDownloaded(e){jQuery(".dlm-reports-block-summary li#most_popular span").html(e)}setTodayDownloads(){let e=0;Object.keys(dlmReportsInstance.dlmReportsStats).length<=0?jQuery(".dlm-reports-block-summary li#today span").html(e.toLocaleString()):(dlmReportsInstance.dlmReportsStats[dlmReportsInstance.dlmReportsStats.length-1].date===dlmReportsInstance.createDateElement(new Date)&&(e=Object.values(JSON.parse(dlmReportsInstance.dlmReportsStats[dlmReportsInstance.dlmReportsStats.length-1].download_ids)).reduce((e,t)=>e+t.downloads,0)),jQuery(".dlm-reports-block-summary li#today span").html(e))}setTopDownloads(e=0,t=!1){const a=jQuery("#total_downloads_table_wrapper2"),n=jQuery("#total_downloads_table_wrapper2 .total_downloads_table__list");if(n.empty(),n.parent().addClass("empty"),dlmReportsInstance.mostDownloaded&&!0!==t){var o=JSON.parse(JSON.stringify(dlmReportsInstance.mostDownloaded)).slice(dlmReportsInstance.perPage*parseInt(e),dlmReportsInstance.perPage*parseInt(e+1));for(let e=0;e<o.length;e++){const r=dlmReportsInstance.getDownloadByID(o[e].id);if(void 0===r)return;var s={id:o[e].id,title:o[e].title,edit_link:dlmAdminUrl+"post.php?post="+o[e].id+"&action=edit",total_downloads:r.total.toLocaleString()};jQuery(document).trigger("dlm_reports_top_downloads_item_before_render",[s,dlmReportsInstance,o[e],r]),new dlmBackBone.modelTopDownloads(s)}n.parent().removeClass("empty"),a.find(".dlm-reports-total-pages").html(Math.ceil(dlmReportsInstance.mostDownloaded.length/dlmReportsInstance.perPage)),parseInt(dlmReportsInstance.perPage)!==parseInt(o.length)?a.find('.downloads-block-navigation button[data-action="load-more"]').attr("disabled","disabled"):a.find('.downloads-block-navigation button[data-action="load-more"]').removeAttr("disabled"),dlmReportsInstance.mostDownloaded.length>dlmReportsInstance.perPage?a.find(".downloads-block-navigation button").removeClass("hidden"):a.find(".downloads-block-navigation button").addClass("hidden"),dlmReportsInstance.stopSpinner(jQuery("#total_downloads_table_wrapper2"))}}handleTopDownloads(){jQuery("html body").on("click","#total_downloads_table_wrapper2 .downloads-block-navigation button",function(){let e=jQuery(this).parents("#total_downloads_table_wrapper2"),t=e,a=e.attr("data-page"),n=jQuery(this),o=parseInt(a)+1,s=0!==a?parseInt(a)-1:0,r=e.find(".downloads-block-navigation").find("button").first(),d=e.find(".downloads-block-navigation").find("button").last();n.attr("disabled","disabled");var l={data:dlmReportsInstance.mostDownloaded,main_parent:e,offsetHolder:t,offset:a,link:n,nextPage:o,prevPage:s,prevButton:r,nextButton:d,doAction:dlmReportsInstance.setTopDownloads};dlmReportsInstance.handleSliderNavigation(l)}),jQuery("#total_downloads_table_wrapper2").find("input.dlm-reports-current-page").on("change",function(){dlmReportsInstance.paginationChange(jQuery(this),dlmReportsInstance.mostDownloaded,jQuery("#total_downloads_table_wrapper2"),jQuery(this).parents("#total_downloads_table_wrapper2"),dlmReportsInstance.setTopDownloads)})}handleSliderNavigation(e){const{data:t,main_parent:a,offsetHolder:n,offset:o,link:s,nextPage:r,prevPage:d,prevButton:l,nextButton:m,doAction:c}={...e};let p=1;"load-more"===s.data("action")?(n.attr("data-page",r),c(r),Math.ceil(t.length/dlmReportsInstance.perPage)>r+1&&m.removeAttr("disabled"),l.removeAttr("disabled"),p=parseInt(r)+1):0!==parseInt(o)&&(n.attr("data-page",d),c(d),1!==parseInt(o)&&l.removeAttr("disabled"),m.removeAttr("disabled"),p=parseInt(d)+1),a.find(".dlm-reports-current-page").val(p)}tabNagivation(){jQuery(document).on("click",".dlm-reports .dlm-insights-tab-navigation > li",function(){const e=jQuery(this),t=jQuery(".dlm-reports .dlm-insights-tab-navigation > li").not(e),a=jQuery('div.dlm-insights-tab-navigation__content[data-id="'+e.attr("id")+'"]'),n=jQuery("div.dlm-insights-tab-navigation__content").not(a);e.hasClass("active")||(e.addClass("active"),t.removeClass("active"),a.addClass("active"),n.removeClass("active"))})}getOrCreateTooltip(e){let t=e.canvas.parentNode.querySelector("div.dlm-canvas-tooltip"),a=e.canvas.parentNode.querySelector("div.dlm-reports-tooltip__line");if(t||((a=document.createElement("div")).className="dlm-reports-tooltip__line"),!t){(t=document.createElement("div")).className="dlm-canvas-tooltip";const n=document.createElement("div");n.className="dlm-reports-tooltip",t.appendChild(n),e.canvas.parentNode.appendChild(t),e.canvas.parentNode.appendChild(a)}return{tooltipEl:t,tooltipLine:a}}externalTooltipHandler(d,e){const{chart:t,tooltip:l}=e,{tooltipEl:a,tooltipLine:n}={...d.getOrCreateTooltip(t)};e=jQuery(a).parent().width();if(0===l.opacity)return a.style.opacity=0,void(n.style.opacity=0);if(l.body){const m=l.title||[],c=document.createElement("div"),p=(c.className="dlm-reports-tooltip__header",m.forEach(e=>{const t=document.createElement("div"),a=(t.className="dlm-reports-tooltip__row",document.createElement("p")),n=(a.className="dlm-reports-tooltip__info",a.appendChild(document.createTextNode("Downloads")),t.appendChild(a),jQuery(document).trigger("dlm_chart_tooltip_before",[dlmReportsInstance,l,t,d]),document.createElement("p"));n.className="dlm-reports-tooltip__date";var o=dlmReportsInstance.setChartTooltipDate(l.dataPoints[0].label,d,d.stats.chartStats);n.appendChild(document.createTextNode(o)),t.appendChild(n);const s=document.createElement("p"),r=(s.className="dlm-reports-tooltip__downloads",document.createElement("span"));r.className="dlm-reports-tooltip__downloads_pointer",r.style.backgroundColor=dlmReportsInstance.chartColors.darkCyan.default,s.appendChild(r),s.appendChild(document.createTextNode(dlmReportsInstance.shortNumber(l.dataPoints[0].formattedValue))),t.appendChild(s),jQuery(document).trigger("dlm_chart_tooltip_after",[dlmReportsInstance,l,t,d]),c.appendChild(t)}),a.querySelector("div.dlm-reports-tooltip"));for(;p.firstChild;)p.firstChild.remove();p.appendChild(c)}var{offsetLeft:o,offsetTop:s}=t.canvas;a.style.opacity=1;let r={isMargin:!(n.style.opacity=1),left:!1};l.caretX-l.width<0&&(r.isMargin=!0,r.left=!0),o+l.caretX+l.width>e&&(r.isMargin=!0,r.left=!1),r.isMargin?r.left?a.style.left=o+l.width+"px":a.style.left=e-l.width+"px":a.style.left=o+l.caretX+"px",n.style.left=o+l.caretX+"px",a.style.top=s+l.caretY-a.offsetHeight-10+"px"}createUserRelatedData(){dlmReportsInstance.userRelatedData=[],Object.values(dlmReportsInstance.userDownloads).forEach((e,t)=>{var a;"0"!==e.user_id&&(a=[e.user_id,e.download_id,e.download_date,e.download_status],e="user_"+e.user_id,void 0!==dlmReportsInstance.userRelatedData[e]?dlmReportsInstance.userRelatedData[e].push(a):dlmReportsInstance.userRelatedData[e]=[a])})}logsDataByDate(e,t){var{startDate:e,endDate:t}={...dlmReportsInstance.getSetDates(e,t)};dlmReportsInstance.userDownloads=JSON.parse(JSON.stringify(dlmReportsInstance.dlmUsersStats.logs));let a=new Date(e),n=(a.setDate(a.getDate()-1),a=a.getTime(),new Date(t));n.setDate(n.getDate()+1),n=n.getTime(),dlmReportsInstance.userDownloads=dlmReportsInstance.userDownloads.filter((e,t)=>{e=dlmReportsInstance.createDateElement(new Date(e.download_date));return(e=new Date(e).getTime())>a&&e<n}),dlmReportsInstance.createUserRelatedData(),dlmReportsInstance.filterDownloads(),dlmReportsInstance.setMostActiveUser(),dlmReportsInstance.setLoggedOutDownloads(),dlmReportsInstance.setLoggedInDownloads(),jQuery(document).trigger("dlm_set_logs_data_by_date",[dlmReportsInstance])}setMostActiveUser(){var e=dlmReportsInstance.getUserByID(dlmReportsInstance.getMostActiveID()[0]);jQuery(".dlm-reports-block-summary li#most_active_user span").html(dlmReportsInstance.userToolTipMarkup(e))}getMostActiveID(){return Object.values(dlmReportsInstance.userRelatedData).length?Object.values(dlmReportsInstance.userRelatedData).reduce((e,t,a)=>parseInt(e.length)>parseInt(t.length)&&0<e.length&&null!==dlmReportsInstance.getUserByID(e[0][0])?e:null!==dlmReportsInstance.getUserByID(t[0][0])?t:[],[]):0}getUserByID(t){if(!t)return null;if("0"===t)return{role:"Guest",display_name:"Guest"};var e=Object.values(dlmReportsInstance.dlmUsersStats.users).filter(e=>parseInt(t)===parseInt(e.id));return Array.isArray(e)?0===e.length?null:e[0]:e}getLoggedInDownloads(){return Object.values(dlmReportsInstance.userRelatedData).length?1<Object.values(dlmReportsInstance.userRelatedData).length?Object.values(dlmReportsInstance.userRelatedData).reduce((e,t)=>parseInt(e)+parseInt(t.length),0):Object.values(dlmReportsInstance.userRelatedData)[0].length:0}setLoggedInDownloads(){const e=dlmReportsInstance.getLoggedInDownloads();jQuery(".dlm-reports-block-summary li#logged_in span,#total_downloads_summary_wrapper .dlm-reports-logged-in").html(e.toLocaleString())}getLoggedOutDownloads(){return dlmReportsInstance.userDownloads.length-dlmReportsInstance.getLoggedInDownloads()}setLoggedOutDownloads(){const e=dlmReportsInstance.getLoggedOutDownloads();jQuery(".dlm-reports-block-summary li#logged_out span,#total_downloads_summary_wrapper .dlm-reports-logged-out").html(e.toLocaleString())}userToolTipMarkup(e){let t='<div class="dlm-user-reports">';return t=(t=t+'<div class="wpchill-tooltip"><i>[?]</i>'+'<div class="wpchill-tooltip-content">')+("<span>User ID: "+(null!==e?e.id:"--")+"</span>"),"object"!=typeof e&&e.url.length&&(t+="<span>User URL: "+(null!==e?e.url:"--")+"</span>"),t+="<span>User registration date: "+(null!==e?e.registered:"--")+"</span>",null!==e&&void 0!==e.role&&e.role.length&&(t+="<span>User role: "+e.role+"</span>"),t=(t+="</div></div>")+(null!==e?e.display_name:"--")+"</div>"}setUserDownloads(e=0,t=!1){const a=jQuery("#users_download_log"),n=jQuery("#users_download_log .user-logs__list");if(n.empty(),!0!==t){let t=[];t=(null!==dlmReportsInstance.tempDownloads?JSON.parse(JSON.stringify(dlmReportsInstance.tempDownloads)):JSON.parse(JSON.stringify(dlmReportsInstance.userDownloads))).slice(dlmReportsInstance.perPage*parseInt(e),dlmReportsInstance.perPage*parseInt(e+1));for(let e=0;e<t.length;e++){var o=dlmReportsInstance.getUserByID(t[e].user_id.toString()),s=dlmReportsInstance.getDownloadCPT(t[e].download_id.toString()),r={key:e,user:null!=o?o.display_name:"--",ip:t[e].user_ip,role:null!==o&&null!==o.role?o.role:"--",download:null!=s?s.title:"--",valid_user:"0"!==t[e].user_id,edit_link:"0"!==t[e].user_id?"user-edit.php?user_id="+t[e].user_id:"#",edit_download_link:null!=s?dlmAdminUrl+"post.php?post="+s.id+"&action=edit":"#",status:t[e].download_status,download_date:t[e].download_date};jQuery(document).trigger("dlm_reports_user_logs_item_before_render",[r,dlmReportsInstance,t[e],o,s]),new dlmBackBone.modelUserLogs(r)}dlmReportsInstance.stopSpinner(jQuery("#users_download_log")),a.find(".dlm-reports-total-pages").html(Math.ceil(dlmReportsInstance.tempDownloads.length/dlmReportsInstance.perPage)),parseInt(dlmReportsInstance.perPage)!==parseInt(t.length)?a.find('.user-downloads-block-navigation button[data-action="load-more"]').attr("disabled","disabled"):a.find('.user-downloads-block-navigation button[data-action="load-more"]').removeAttr("disabled"),dlmReportsInstance.userDownloads.length>dlmReportsInstance.perPage?a.find(".user-downloads-block-navigation button").removeClass("hidden"):a.find(".user-downloads-block-navigation button").addClass("hidden")}}filterDownloads(){dlmReportsInstance.tempDownloads=JSON.parse(JSON.stringify(dlmReportsInstance.userDownloads)),dlmReportsInstance.currentFilters.length&&dlmReportsInstance.currentFilters.forEach(t=>{dlmReportsInstance.tempDownloads=dlmReportsInstance.tempDownloads.filter(e=>t.on===e[t.type])}),dlmReportsInstance.setUserDownloads()}handleUserDownloads(){jQuery(".user-downloads-block-navigation").on("click","button",function(e){e.stopPropagation();let t=jQuery(this).parents("#users_downloads_table_wrapper"),a=t.find("#users_download_log"),n=a.attr("data-page"),o=jQuery(this),s=parseInt(n)+1,r=0!==n?parseInt(n)-1:0,d=t.find(".downloads-block-navigation button").first(),l=t.find(".downloads-block-navigation button").last();o.attr("disabled","disabled");e={data:dlmReportsInstance.tempDownloads,main_parent:t,offsetHolder:a,offset:n,link:o,nextPage:s,prevPage:r,prevButton:d,nextButton:l,doAction:dlmReportsInstance.setUserDownloads};dlmReportsInstance.handleSliderNavigation(e)}),jQuery("#users_downloads_table_wrapper").find("input.dlm-reports-current-page").on("change",function(){dlmReportsInstance.paginationChange(jQuery(this),dlmReportsInstance.tempDownloads,jQuery("#users_downloads_table_wrapper"),jQuery("#users_downloads_table_wrapper").find("#users_download_log"),dlmReportsInstance.setUserDownloads)})}togglePageSettings(){jQuery("#dlm-toggle-settings").on("click",function(e){e.stopPropagation(),jQuery(this).find(".dlm-toggle-settings__settings").toggleClass("display")}),jQuery(".dlm-toggle-settings__settings").on("click",function(e){e.stopPropagation()}),jQuery("html,body").on("click",function(){jQuery(this).find(".dlm-toggle-settings__settings").removeClass("display")}),jQuery(document).on("change",".wpchill-toggle__input",function(e){const t=jQuery(this),a=t.attr("name"),n={action:"dlm_update_report_setting",name:a,checked:t.is(":checked"),_ajax_nonce:dlmReportsNonce};jQuery.post(ajaxurl,n,function(e){a,jQuery(document).trigger("dlm_settings_ajax_response",[dlmReportsInstance,t,e])})})}getMaxDownload(){let t=0;return dlmReportsInstance.dataSets.forEach(e=>{e=Object.values(e.data).reduce((e,t)=>t<e?e:t,0);t<e&&(t=e)}),parseInt(t)}setChartTooltipDate(e,t,a){let n="";var o,s,r;return n="undefined"!==t.chartType&&"months"===t.chartType?(moment(e).year(),r=moment(e).month(),a=Object.keys(a)[Object.keys(a).length-1],o=moment(a).month(moment(a).month()-1).format("YYYY-MM"),s=moment(e).format("YYYY-MM"),r<11?s===o?moment(s).format("MMMM, YYYY"):moment(e).format("MMM")+" - "+moment(e).month(r+1).format("MMM")+moment(e).format(", YYYY"):s===o||s===a?moment(s).format("MMMM, YYYY"):moment(e).format("MMM")+moment(e).format(" YYYY")+" - "+moment(e).month(r+1).format("MMM")+moment(e).month(r+1).format(", YYYY")):"undefined"!==t.chartType&&"days"===t.chartType?(moment(e).year(),o=moment(e).day(),a=moment(e).format("MMMM"),s=moment(e).day(o+1).format("MMMM"),r=dlmReportsInstance.dates.downloads.end_date,t=moment(r).day(moment(r).day()-1).format("MMMM Do"),moment(e).format("MMMM Do")===moment(r).format("MMMM Do")||moment(e).format("MMMM Do")===t?moment(e).format("MMMM Do, YYYY"):a===s?moment(e).format("MMMM Do")+" - "+moment(e).day(o+1).format("Do")+moment(e).format(", YYYY"):moment(e).format("MMM Do")+" - "+moment(e).day(o+1).format("MMM Do")+moment(e).format(", YYYY")):moment(e).format("MMMM Do, YY")}closeDatePickers(e){jQuery(".dlm-reports-header-date-selector").not(e).each(function(){var e={target:jQuery(this).attr("id")};dlmReportsInstance.hideDatepicker(jQuery(this),e)})}shortNumber(e){return e=4<=(e="string"==typeof e?e.replace(/,/gi,""):parseInt(e).toString()).length?parseInt(e.substring(0,e.length-3)).toLocaleString()+"k":e}getDownloadByID(t){let a={total:0},n;return dlmReportsInstance.tempDownloads.forEach(function(e){t===e.download_id&&(n=e,a.total=a.total+1,jQuery(document).trigger("dlm_download_by_id",[dlmReportsInstance,a,n]))}),a}getDownloadCPT(t){let e=null;return Array.isArray(dlmReportsInstance.mostDownloaded)&&(e=dlmReportsInstance.mostDownloaded.filter(e=>e.id===t,0)[0]),jQuery(document).trigger("dlm_download_cpt",[dlmReportsInstance,e]),e}setSpinner(e){e.append('<div class="dlm-reports-spinner"><span></span></div>')}stopSpinner(e){e.find(".dlm-reports-spinner").remove()}eventsFunctions(){jQuery("body").on("click",".total_downloads_table_filters_total_downloads > a",function(e){e.preventDefault(),jQuery(this).parent().find("span.dashicons").toggleClass("dashicons-arrow-down dashicons-arrow-up"),dlmReportsInstance.orderOverviewItemsByTotal()}),jQuery("body").on("click",".total_downloads_table_filters_download_date > a",function(e){e.preventDefault(),jQuery(this).parent().find("span.dashicons").toggleClass("dashicons-arrow-down dashicons-arrow-up"),dlmReportsInstance.orderUserReportsItemsByDate()}),jQuery("body").on("change","select.dlm-reports-per-page",function(e){dlmReportsInstance.perPage=jQuery(this).val(),dlmReportsInstance.setTopDownloads(),dlmReportsInstance.setUserDownloads(),jQuery.post(ajaxurl,{action:"dlm_update_report_setting",name:"dlm-reports-per-page",value:dlmReportsInstance.perPage,_ajax_nonce:dlmReportsNonce},function(e){})})}orderItems(e,a,n,t=0){return e.sort((e,t)=>"asc"!==a?t[n]-e[n]:e[n]-t[n]),e}orderOverviewItemsByTotal(){dlmReportsInstance.mostDownloaded=dlmReportsInstance.mostDownloaded.reverse(),dlmReportsInstance.setTopDownloads()}orderUserReportsItemsByDate(){dlmReportsInstance.tempDownloads=dlmReportsInstance.tempDownloads.reverse(),dlmReportsInstance.setUserDownloads()}paginationChange(e,t,a,n,o){let s=parseInt(e.val()),r=(0===s&&(s=1),t.length<s*dlmReportsInstance.perPage&&(s=Math.ceil(t.length/dlmReportsInstance.perPage)),jQuery(this).next('button[data-action="load-more"]')),d=s+1,l=s-1,m=a.find(".downloads-block-navigation button").first(),c=a.find(".downloads-block-navigation button").last();r.attr("disabled","disabled");e={data:t,main_parent:a,offsetHolder:n,offset:s,link:r,nextPage:d,prevPage:l,prevButton:m,nextButton:c,doAction:o};dlmReportsInstance.handleSliderNavigation(e)}}
|
changelog.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
= 4.7.1 - 18.10.2022 =
|
2 |
Fixed: Top Downloads widget wrong URL ( [#1087](https://github.com/WPChill/download-monitor/issues/1087) )
|
3 |
Fixed: Error when getting version download ( [#1090](https://github.com/WPChill/download-monitor/issues/1090) )
|
1 |
+
= 4.7.2 - 24.10.2022 =
|
2 |
+
Fixed: Possible overload of server on the Reports page ( [#1102](https://github.com/WPChill/download-monitor/issues/1102) )
|
3 |
+
Changed: Plugin Logo ( [#1101](https://github.com/WPChill/download-monitor/issues/1101) )
|
4 |
+
Fixed: Log query strings for download location ( [#1099](https://github.com/WPChill/download-monitor/issues/1099) )
|
5 |
+
Fixed: Version's number of downloads wrong ( [#1097](https://github.com/WPChill/download-monitor/issues/1097) )
|
6 |
+
Added: Protection functionality for Media Library files ( [#1096](https://github.com/WPChill/download-monitor/issues/1096) )
|
7 |
+
Fixed: Redirect to file when unicode chars are present ( [#1095](https://github.com/WPChill/download-monitor/issues/1095) )
|
8 |
+
Fixed: Front-end CSS was not enqueued for Gutenberg blocks ( [#1094](https://github.com/WPChill/download-monitor/issues/1094) )
|
9 |
+
|
10 |
= 4.7.1 - 18.10.2022 =
|
11 |
Fixed: Top Downloads widget wrong URL ( [#1087](https://github.com/WPChill/download-monitor/issues/1087) )
|
12 |
Fixed: Error when getting version download ( [#1090](https://github.com/WPChill/download-monitor/issues/1090) )
|
download-monitor.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Download Monitor
|
4 |
Plugin URI: https://www.download-monitor.com
|
5 |
Description: A full solution for managing and selling downloadable files, monitoring downloads and outputting download links and file information on your WordPress powered site.
|
6 |
-
Version: 4.7.
|
7 |
Author: WPChill
|
8 |
Author URI: https://wpchill.com
|
9 |
Requires at least: 5.4
|
@@ -34,7 +34,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
34 |
|
35 |
// Define DLM Version
|
36 |
|
37 |
-
define( 'DLM_VERSION', '4.7.
|
38 |
define( 'DLM_UPGRADER_VERSION', '4.6.0' );
|
39 |
|
40 |
// Define DLM FILE
|
3 |
Plugin Name: Download Monitor
|
4 |
Plugin URI: https://www.download-monitor.com
|
5 |
Description: A full solution for managing and selling downloadable files, monitoring downloads and outputting download links and file information on your WordPress powered site.
|
6 |
+
Version: 4.7.2
|
7 |
Author: WPChill
|
8 |
Author URI: https://wpchill.com
|
9 |
Requires at least: 5.4
|
34 |
|
35 |
// Define DLM Version
|
36 |
|
37 |
+
define( 'DLM_VERSION', '4.7.2' );
|
38 |
define( 'DLM_UPGRADER_VERSION', '4.6.0' );
|
39 |
|
40 |
// Define DLM FILE
|
includes/admin/uninstall/class-dlm-uninstall.php
CHANGED
@@ -40,7 +40,7 @@ class DLM_Uninstall {
|
|
40 |
|
41 |
$current_screen = get_current_screen();
|
42 |
if ( in_array( $current_screen->base, array( 'plugins', 'plugins-network' ) ) ) {
|
43 |
-
wp_enqueue_style( 'dlm-uninstall', $plugin_url . '/assets/css/dlm-uninstall.min.css' );
|
44 |
wp_enqueue_script( 'dlm-uninstall', $plugin_url . '/assets/js/dlm-uninstall.js', array( 'jquery' ), DLM_VERSION, true );
|
45 |
wp_localize_script( 'dlm-uninstall', 'wpDLMUninstall', array(
|
46 |
'redirect_url' => admin_url( '/plugins.php' ),
|
40 |
|
41 |
$current_screen = get_current_screen();
|
42 |
if ( in_array( $current_screen->base, array( 'plugins', 'plugins-network' ) ) ) {
|
43 |
+
wp_enqueue_style( 'dlm-uninstall', $plugin_url . '/assets/css/dlm-uninstall.min.css', array(), DLM_VERSION );
|
44 |
wp_enqueue_script( 'dlm-uninstall', $plugin_url . '/assets/js/dlm-uninstall.js', array( 'jquery' ), DLM_VERSION, true );
|
45 |
wp_localize_script( 'dlm-uninstall', 'wpDLMUninstall', array(
|
46 |
'redirect_url' => admin_url( '/plugins.php' ),
|
includes/backwards-compatibility/class-dlm-backwards-compatibility.php
CHANGED
@@ -52,7 +52,7 @@ class DLM_Backwards_Compatibility {
|
|
52 |
// Reset postdata after the loop.
|
53 |
add_action( 'dlm_reset_postdata', array( $this, 'reset_postdata' ), 15, 1 );
|
54 |
// Add version postmeta downloads to the version download count.
|
55 |
-
add_filter( 'dlm_add_version_meta_download_count', array( $this, '
|
56 |
// Add Download postmeta downloads to the Download download count.
|
57 |
add_filter( 'dlm_add_meta_download_count', array( $this, 'add_meta_download_count' ), 30, 2 );
|
58 |
// If the DB upgrade functionality did not take place we won't have the option stored.
|
@@ -270,36 +270,6 @@ class DLM_Backwards_Compatibility {
|
|
270 |
//remove_filter( 'posts_where', array( $this, 'where_download_count_compatibility' ) );
|
271 |
}
|
272 |
|
273 |
-
/**
|
274 |
-
* Backwards compaitbility for users who did not use the logs
|
275 |
-
*
|
276 |
-
* @since 4.6.0
|
277 |
-
*
|
278 |
-
* @param mixed $counts
|
279 |
-
* @param mixed $version_id
|
280 |
-
* @return void
|
281 |
-
*/
|
282 |
-
public function meta_download_counts( $counts, $id ) {
|
283 |
-
|
284 |
-
// Filter to enable adding meta counts to download counts.
|
285 |
-
$count_meta = apply_filters( 'dlm_count_meta_downloads', false );
|
286 |
-
|
287 |
-
if ( ( isset( $this->upgrade_option['using_logs'] ) && '0' === $this->upgrade_option['using_logs'] ) || $count_meta ) {
|
288 |
-
|
289 |
-
if ( 'dlm_download_version' === get_post_type( $id ) ) {
|
290 |
-
$meta_counts = get_post_meta( get_post( $id )->post_parent, '_download_count', true );
|
291 |
-
} else {
|
292 |
-
$meta_counts = get_post_meta( $id, '_download_count', true );
|
293 |
-
}
|
294 |
-
|
295 |
-
if ( isset( $meta_counts ) && '' !== $meta_counts ) {
|
296 |
-
return ( (int) $counts + (int) $meta_counts );
|
297 |
-
}
|
298 |
-
}
|
299 |
-
|
300 |
-
return $counts;
|
301 |
-
}
|
302 |
-
|
303 |
/**
|
304 |
* Backwards compatiblity for query args if using custom functionality
|
305 |
*
|
@@ -349,7 +319,7 @@ class DLM_Backwards_Compatibility {
|
|
349 |
}
|
350 |
|
351 |
/**
|
352 |
-
* Backwards compatibility to take meta count into consideration for Downloads
|
353 |
*
|
354 |
* @param [type] $count
|
355 |
* @param [type] $download_id
|
@@ -364,7 +334,7 @@ class DLM_Backwards_Compatibility {
|
|
364 |
|
365 |
if ( ( isset( $this->upgrade_option['using_logs'] ) && '0' === $this->upgrade_option['using_logs'] ) || $count_meta ) {
|
366 |
|
367 |
-
if ( 'dlm_download' !== get_post_type( $download_id ) ) {
|
368 |
|
369 |
return $counts;
|
370 |
}
|
52 |
// Reset postdata after the loop.
|
53 |
add_action( 'dlm_reset_postdata', array( $this, 'reset_postdata' ), 15, 1 );
|
54 |
// Add version postmeta downloads to the version download count.
|
55 |
+
add_filter( 'dlm_add_version_meta_download_count', array( $this, 'add_meta_download_count' ), 15, 2 );
|
56 |
// Add Download postmeta downloads to the Download download count.
|
57 |
add_filter( 'dlm_add_meta_download_count', array( $this, 'add_meta_download_count' ), 30, 2 );
|
58 |
// If the DB upgrade functionality did not take place we won't have the option stored.
|
270 |
//remove_filter( 'posts_where', array( $this, 'where_download_count_compatibility' ) );
|
271 |
}
|
272 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
/**
|
274 |
* Backwards compatiblity for query args if using custom functionality
|
275 |
*
|
319 |
}
|
320 |
|
321 |
/**
|
322 |
+
* Backwards compatibility to take meta count into consideration for Downloads & Versions
|
323 |
*
|
324 |
* @param [type] $count
|
325 |
* @param [type] $download_id
|
334 |
|
335 |
if ( ( isset( $this->upgrade_option['using_logs'] ) && '0' === $this->upgrade_option['using_logs'] ) || $count_meta ) {
|
336 |
|
337 |
+
if ( 'dlm_download' !== get_post_type( $download_id ) && 'dlm_download_version' !== get_post_type( $download_id ) ) {
|
338 |
|
339 |
return $counts;
|
340 |
}
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: wpchill, silkalns, barrykooij, mikejolley
|
|
3 |
Tags: download manager, document management, file manager, digital store, ecommerce, document management plugin, download monitor, download counter, password protection, download protection, password, protect downloads, tracker, sell, shop, ecommerce, paypal
|
4 |
Requires at least: 5.4
|
5 |
Tested up to: 6.0
|
6 |
-
Stable tag: 4.7.
|
7 |
License: GPLv3
|
8 |
Text Domain: -
|
9 |
Requires PHP: 5.6
|
@@ -121,6 +121,15 @@ More documentation can be found in our [Knowledge Base](https://www.download-mon
|
|
121 |
|
122 |
== Changelog ==
|
123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
= 4.7.1 - 18.10.2022 =
|
125 |
Fixed: Top Downloads widget wrong URL ( [#1087](https://github.com/WPChill/download-monitor/issues/1087) )
|
126 |
Fixed: Error when getting version download ( [#1090](https://github.com/WPChill/download-monitor/issues/1090) )
|
3 |
Tags: download manager, document management, file manager, digital store, ecommerce, document management plugin, download monitor, download counter, password protection, download protection, password, protect downloads, tracker, sell, shop, ecommerce, paypal
|
4 |
Requires at least: 5.4
|
5 |
Tested up to: 6.0
|
6 |
+
Stable tag: 4.7.2
|
7 |
License: GPLv3
|
8 |
Text Domain: -
|
9 |
Requires PHP: 5.6
|
121 |
|
122 |
== Changelog ==
|
123 |
|
124 |
+
= 4.7.2 - 24.10.2022 =
|
125 |
+
Fixed: Possible overload of server on the Reports page ( [#1102](https://github.com/WPChill/download-monitor/issues/1102) )
|
126 |
+
Changed: Plugin Logo ( [#1101](https://github.com/WPChill/download-monitor/issues/1101) )
|
127 |
+
Fixed: Log query strings for download location ( [#1099](https://github.com/WPChill/download-monitor/issues/1099) )
|
128 |
+
Fixed: Version's number of downloads wrong ( [#1097](https://github.com/WPChill/download-monitor/issues/1097) )
|
129 |
+
Added: Protection functionality for Media Library files ( [#1096](https://github.com/WPChill/download-monitor/issues/1096) )
|
130 |
+
Fixed: Redirect to file when unicode chars are present ( [#1095](https://github.com/WPChill/download-monitor/issues/1095) )
|
131 |
+
Fixed: Front-end CSS was not enqueued for Gutenberg blocks ( [#1094](https://github.com/WPChill/download-monitor/issues/1094) )
|
132 |
+
|
133 |
= 4.7.1 - 18.10.2022 =
|
134 |
Fixed: Top Downloads widget wrong URL ( [#1087](https://github.com/WPChill/download-monitor/issues/1087) )
|
135 |
Fixed: Error when getting version download ( [#1090](https://github.com/WPChill/download-monitor/issues/1090) )
|
src/Admin/Admin.php
CHANGED
@@ -50,15 +50,16 @@ class DLM_Admin {
|
|
50 |
$reports_page = new DLM_Reports_Page();
|
51 |
$reports_page->setup();
|
52 |
|
|
|
|
|
|
|
53 |
// Dashboard
|
54 |
add_action( 'wp_dashboard_setup', array( $this, 'admin_dashboard' ) );
|
55 |
// Admin Footer Text
|
56 |
add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ), 1 );
|
57 |
// flush rewrite rules on shutdown
|
58 |
add_action( 'shutdown', array( $this, 'maybe_flush_rewrites' ) );
|
59 |
-
|
60 |
-
add_filter( 'wp_prepare_attachment_for_js', array( $this, 'filter_thumbnails_protected_files_grid' ), 10, 1 );
|
61 |
-
add_filter( 'wp_get_attachment_image_src', array( $this, 'filter_thumbnails_protected_files_list' ), 10, 1 );
|
62 |
// Legacy Upgrader
|
63 |
$lu_check = new DLM_LU_Checker();
|
64 |
if ( $lu_check->needs_upgrading() ) {
|
@@ -69,15 +70,7 @@ class DLM_Admin {
|
|
69 |
add_filter( 'pre_update_option_dlm_download_endpoint', array( $this, 'set_rewrite_rules_flag_on_endpoint_change'), 15, 2 );
|
70 |
// Checks and flushes rewrite rule if rewrite flag option is set.
|
71 |
add_action( 'admin_init', array( $this, 'check_rewrite_rules') );
|
72 |
-
|
73 |
-
add_filter( 'file_is_displayable_image', array( $this, 'no_image_subsizes' ), 15, 2 );
|
74 |
-
add_filter( 'ajax_query_attachments_args', array( $this, 'no_media_library_display' ), 15 );
|
75 |
-
// Add a Media Library filter to list view so that we can filter out dlm_uploads
|
76 |
-
add_action( 'restrict_manage_posts', array( $this, 'add_dlm_uploads_filter' ), 15, 2 );
|
77 |
-
// Set query vars for dlm_uploads filter
|
78 |
-
add_action( 'pre_get_posts', array( $this, 'media_library_filter' ), 15 );
|
79 |
-
// Add DLM Uploads file as a mime type
|
80 |
-
add_filter( 'post_mime_types', array( $this, 'add_mime_types' ), 15, 1 );
|
81 |
}
|
82 |
|
83 |
/**
|
@@ -135,56 +128,6 @@ class DLM_Admin {
|
|
135 |
return $pathdata;
|
136 |
}
|
137 |
|
138 |
-
/**
|
139 |
-
* filter attachment thumbnails in media library grid view for files in dlm_uploads
|
140 |
-
*
|
141 |
-
* @param array $response
|
142 |
-
*
|
143 |
-
* @return array
|
144 |
-
*/
|
145 |
-
public function filter_thumbnails_protected_files_grid( $response ) {
|
146 |
-
if ( apply_filters( 'dlm_filter_thumbnails_protected_files', true ) ) {
|
147 |
-
$upload_dir = wp_upload_dir();
|
148 |
-
|
149 |
-
if ( strpos( $response['url'], $upload_dir['baseurl'] . '/dlm_uploads' ) !== false ) {
|
150 |
-
if ( ! empty( $response['sizes'] ) ) {
|
151 |
-
$dlm_protected_thumb = download_monitor()->get_plugin_url() . '/assets/images/protected-file-thumbnail.png';
|
152 |
-
foreach ( $response['sizes'] as $rs_key => $rs_val ) {
|
153 |
-
$rs_val['url'] = $dlm_protected_thumb;
|
154 |
-
$response['sizes'][ $rs_key ] = $rs_val;
|
155 |
-
}
|
156 |
-
}
|
157 |
-
}
|
158 |
-
}
|
159 |
-
|
160 |
-
return $response;
|
161 |
-
}
|
162 |
-
|
163 |
-
/**
|
164 |
-
* filter attachment thumbnails in media library list view for files in dlm_uploads
|
165 |
-
*
|
166 |
-
* @param bool|array $image
|
167 |
-
*
|
168 |
-
* @return bool|array
|
169 |
-
*/
|
170 |
-
public function filter_thumbnails_protected_files_list( $image ) {
|
171 |
-
if ( apply_filters( 'dlm_filter_thumbnails_protected_files', true ) ) {
|
172 |
-
if ( $image ) {
|
173 |
-
|
174 |
-
$upload_dir = wp_upload_dir();
|
175 |
-
|
176 |
-
if ( strpos( $image[0], $upload_dir['baseurl'] . '/dlm_uploads' ) !== false ) {
|
177 |
-
$image[0] = $dlm_protected_thumb = download_monitor()->get_plugin_url() . '/assets/images/protected-file-thumbnail.png';
|
178 |
-
$image[1] = 60;
|
179 |
-
$image[2] = 60;
|
180 |
-
}
|
181 |
-
}
|
182 |
-
|
183 |
-
}
|
184 |
-
|
185 |
-
return $image;
|
186 |
-
}
|
187 |
-
|
188 |
/**
|
189 |
* admin_enqueue_scripts function.
|
190 |
*
|
@@ -194,7 +137,7 @@ class DLM_Admin {
|
|
194 |
public function admin_enqueue_scripts( $hook ) {
|
195 |
global $post;
|
196 |
|
197 |
-
wp_enqueue_style( '
|
198 |
|
199 |
if ( $hook == 'index.php' ) {
|
200 |
wp_enqueue_style( 'download_monitor_dashboard_css', download_monitor()->get_plugin_url() . '/assets/css/dashboard.min.css', array(), DLM_VERSION );
|
@@ -391,160 +334,4 @@ class DLM_Admin {
|
|
391 |
|
392 |
}
|
393 |
|
394 |
-
/**
|
395 |
-
* Don't display or create sub-sizes for DLM uploads
|
396 |
-
*
|
397 |
-
* @param $result
|
398 |
-
* @param $path
|
399 |
-
*
|
400 |
-
* @return false|mixed
|
401 |
-
* @since 4.6.0
|
402 |
-
*/
|
403 |
-
public function no_image_subsizes( $result, $path ) {
|
404 |
-
|
405 |
-
$upload_dir = wp_upload_dir();
|
406 |
-
|
407 |
-
if ( strpos( $path, $upload_dir['basedir'] . '/dlm_uploads' ) !== false ) {
|
408 |
-
$result = false;
|
409 |
-
}
|
410 |
-
|
411 |
-
return $result;
|
412 |
-
}
|
413 |
-
|
414 |
-
/**
|
415 |
-
* Don't display DLM Uploads in Media Library
|
416 |
-
*
|
417 |
-
* @param array $query Query parameters.
|
418 |
-
*
|
419 |
-
* @return array
|
420 |
-
* @since 4.6.0
|
421 |
-
*/
|
422 |
-
public function no_media_library_display( $query ) {
|
423 |
-
|
424 |
-
//Check for the added temporary mime_type so that we can filter the Media Library contents
|
425 |
-
if ( ! isset( $query['post_mime_type'] ) || 'dlm_uploads_files' !== $query['post_mime_type'] ) {
|
426 |
-
if ( ! isset( $query['meta_query'] ) ) {
|
427 |
-
$query['meta_query'] = array(
|
428 |
-
'relation' => 'AND',
|
429 |
-
array(
|
430 |
-
'key' => '_wp_attached_file',
|
431 |
-
'compare' => 'NOT LIKE',
|
432 |
-
'value' => 'dlm_uploads'
|
433 |
-
)
|
434 |
-
);
|
435 |
-
} else {
|
436 |
-
$query['meta_query'][] = array(
|
437 |
-
'key' => '_wp_attached_file',
|
438 |
-
'compare' => 'NOT LIKE',
|
439 |
-
'value' => 'dlm_uploads'
|
440 |
-
);
|
441 |
-
}
|
442 |
-
} else {
|
443 |
-
unset($query['post_mime_type']);
|
444 |
-
$query['meta_key'] = '_wp_attached_file';
|
445 |
-
$query['meta_query'][] = array(
|
446 |
-
'key' => '_wp_attached_file',
|
447 |
-
'compare' => 'LIKE',
|
448 |
-
'value' => 'dlm_uploads'
|
449 |
-
);
|
450 |
-
}
|
451 |
-
|
452 |
-
return $query;
|
453 |
-
}
|
454 |
-
|
455 |
-
/**
|
456 |
-
* Add Media Library filters for DLM Downloads
|
457 |
-
*
|
458 |
-
* @param $screen
|
459 |
-
* @param $which
|
460 |
-
*
|
461 |
-
* @return void
|
462 |
-
* @since 4.6.4
|
463 |
-
*/
|
464 |
-
public function add_dlm_uploads_filter( $screen, $which ) {
|
465 |
-
// Add a filter to the Media Library page so that we can filter regular uploads and Download Monitor's uploads
|
466 |
-
if ( $screen === 'attachment' ) {
|
467 |
-
$views = apply_filters( 'dlm_media_views', array(
|
468 |
-
'uploads_folder' => __( 'Uploads folder', 'download-monitor' ),
|
469 |
-
'dlm_uploads_folder' => __( 'Download Monitor', 'download-monitor' )
|
470 |
-
) );
|
471 |
-
|
472 |
-
$applied_filter = isset( $_GET['dlm_upload_folder_type'] ) ? sanitize_text_field( wp_unslash( $_GET['dlm_upload_folder_type'] ) ) : 'all';
|
473 |
-
?>
|
474 |
-
<select name="dlm_upload_folder_type">
|
475 |
-
<?php
|
476 |
-
foreach ( $views as $key => $view ) {
|
477 |
-
echo '<option value="' . $key . '" ' . selected( $key, $applied_filter ) . '>' . $view . '</option>';
|
478 |
-
}
|
479 |
-
?>
|
480 |
-
</select>
|
481 |
-
<?php
|
482 |
-
}
|
483 |
-
}
|
484 |
-
|
485 |
-
/**
|
486 |
-
* Filter the media library query to wether show DLM uploads or not
|
487 |
-
*
|
488 |
-
* @param $query
|
489 |
-
*
|
490 |
-
* @return void
|
491 |
-
* @since 4.6.4
|
492 |
-
*/
|
493 |
-
public function media_library_filter( $query ) {
|
494 |
-
|
495 |
-
if ( ! is_admin() || false === strpos( $_SERVER['REQUEST_URI'], '/wp-admin/upload.php' ) ) {
|
496 |
-
return;
|
497 |
-
}
|
498 |
-
// If users views uploads folder then we don't need to show DLM uploads.
|
499 |
-
$compare = 'NOT LIKE';
|
500 |
-
// If user views the DLM Uploads folder then we need to show DLM uploads.
|
501 |
-
if ( isset( $_GET['dlm_upload_folder_type'] ) && 'dlm_uploads_folder' === $_GET['dlm_upload_folder_type'] ) {
|
502 |
-
$compare = 'LIKE';
|
503 |
-
}
|
504 |
-
// Set the meta query for the corresponding request.
|
505 |
-
$query->set( 'meta_key', '_wp_attached_file' );
|
506 |
-
$query->set( 'meta_query', array(
|
507 |
-
'key' => '_wp_attached_file',
|
508 |
-
'compare' => $compare,
|
509 |
-
'value' => 'dlm_uploads'
|
510 |
-
) );
|
511 |
-
}
|
512 |
-
|
513 |
-
/**
|
514 |
-
* Add temporary dlm_uploads_files mime type to help us filter the media library
|
515 |
-
*
|
516 |
-
* @param $mimes
|
517 |
-
*
|
518 |
-
* @return mixed
|
519 |
-
* @since 4.6.4
|
520 |
-
*/
|
521 |
-
public function add_mime_types($mimes){
|
522 |
-
|
523 |
-
if ( ! function_exists( 'get_current_screen' ) ) {
|
524 |
-
return $mimes;
|
525 |
-
}
|
526 |
-
|
527 |
-
$screen = get_current_screen();
|
528 |
-
// If we are not on the Media Library page or editing the Download then we don't need to add the mime types.
|
529 |
-
if ( ! is_admin() || ( 'upload' !== $screen->base && 'attachment' !== $screen->post_type && 'dlm_download' !== $screen->post_type ) ) {
|
530 |
-
return $mimes;
|
531 |
-
}
|
532 |
-
|
533 |
-
// Create temp mime_type that will only be available on Media Library page and edit Download page.
|
534 |
-
// We need this to proper filter the Media Library contents and show only DLM uploads or regular uploads.
|
535 |
-
$mimes['dlm_uploads_files'] = array(
|
536 |
-
'Download Monitor Files',
|
537 |
-
'Manage DLM Files',
|
538 |
-
array(
|
539 |
-
'dlm_uploads',
|
540 |
-
'else',
|
541 |
-
'singular' => 'DLM File',
|
542 |
-
'plural' => 'DLM Files',
|
543 |
-
'content' => null,
|
544 |
-
'domain' => null
|
545 |
-
)
|
546 |
-
);
|
547 |
-
|
548 |
-
return $mimes;
|
549 |
-
}
|
550 |
}
|
50 |
$reports_page = new DLM_Reports_Page();
|
51 |
$reports_page->setup();
|
52 |
|
53 |
+
// Handle all functinality that involves Media Library
|
54 |
+
$dlm_media_library = DLM_Media_Library::get_instance();
|
55 |
+
|
56 |
// Dashboard
|
57 |
add_action( 'wp_dashboard_setup', array( $this, 'admin_dashboard' ) );
|
58 |
// Admin Footer Text
|
59 |
add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ), 1 );
|
60 |
// flush rewrite rules on shutdown
|
61 |
add_action( 'shutdown', array( $this, 'maybe_flush_rewrites' ) );
|
62 |
+
|
|
|
|
|
63 |
// Legacy Upgrader
|
64 |
$lu_check = new DLM_LU_Checker();
|
65 |
if ( $lu_check->needs_upgrading() ) {
|
70 |
add_filter( 'pre_update_option_dlm_download_endpoint', array( $this, 'set_rewrite_rules_flag_on_endpoint_change'), 15, 2 );
|
71 |
// Checks and flushes rewrite rule if rewrite flag option is set.
|
72 |
add_action( 'admin_init', array( $this, 'check_rewrite_rules') );
|
73 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
}
|
75 |
|
76 |
/**
|
128 |
return $pathdata;
|
129 |
}
|
130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
/**
|
132 |
* admin_enqueue_scripts function.
|
133 |
*
|
137 |
public function admin_enqueue_scripts( $hook ) {
|
138 |
global $post;
|
139 |
|
140 |
+
wp_enqueue_style( 'download_monitor_others', download_monitor()->get_plugin_url() . '/assets/css/others.min.css', array(), DLM_VERSION );
|
141 |
|
142 |
if ( $hook == 'index.php' ) {
|
143 |
wp_enqueue_style( 'download_monitor_dashboard_css', download_monitor()->get_plugin_url() . '/assets/css/dashboard.min.css', array(), DLM_VERSION );
|
334 |
|
335 |
}
|
336 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
}
|
src/Admin/AdminScripts.php
CHANGED
@@ -24,7 +24,7 @@ class DLM_Admin_Scripts {
|
|
24 |
// Enqueue Edit Post JS
|
25 |
wp_enqueue_script(
|
26 |
'dlm_insert_download',
|
27 |
-
plugins_url( '/assets/js/
|
28 |
array( 'jquery' ),
|
29 |
DLM_VERSION
|
30 |
);
|
@@ -51,7 +51,7 @@ class DLM_Admin_Scripts {
|
|
51 |
// Enqueue Edit Post JS
|
52 |
wp_enqueue_script(
|
53 |
'dlm_insert_download',
|
54 |
-
plugins_url( '/assets/js/
|
55 |
array( 'jquery' ),
|
56 |
DLM_VERSION
|
57 |
);
|
@@ -228,7 +228,7 @@ class DLM_Admin_Scripts {
|
|
228 |
) );
|
229 |
|
230 |
// Script used to install plugins
|
231 |
-
wp_enqueue_script( 'dlm_install_plugins', plugins_url( '/assets/js/install-plugins' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', $dlm->get_plugin_file() ), array( 'jquery', 'updates' ),
|
232 |
wp_localize_script(
|
233 |
'dlm_install_plugins',
|
234 |
'dlm_install_plugins_vars',
|
24 |
// Enqueue Edit Post JS
|
25 |
wp_enqueue_script(
|
26 |
'dlm_insert_download',
|
27 |
+
plugins_url( '/assets/js/download-operations' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', $dlm->get_plugin_file() ),
|
28 |
array( 'jquery' ),
|
29 |
DLM_VERSION
|
30 |
);
|
51 |
// Enqueue Edit Post JS
|
52 |
wp_enqueue_script(
|
53 |
'dlm_insert_download',
|
54 |
+
plugins_url( '/assets/js/download-operations' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', $dlm->get_plugin_file() ),
|
55 |
array( 'jquery' ),
|
56 |
DLM_VERSION
|
57 |
);
|
228 |
) );
|
229 |
|
230 |
// Script used to install plugins
|
231 |
+
wp_enqueue_script( 'dlm_install_plugins', plugins_url( '/assets/js/install-plugins' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', $dlm->get_plugin_file() ), array( 'jquery', 'updates' ), DLM_VERSION, true );
|
232 |
wp_localize_script(
|
233 |
'dlm_install_plugins',
|
234 |
'dlm_install_plugins_vars',
|
src/Admin/MediaBrowser.php
CHANGED
@@ -33,7 +33,7 @@ class DLM_Admin_Media_Browser {
|
|
33 |
|
34 |
echo '<!DOCTYPE html><html lang="en"><head><title>' . esc_html__( 'Browse for a file', 'download-monitor' ) . '</title>';
|
35 |
|
36 |
-
wp_enqueue_style( 'download_monitor_admin_css', download_monitor()->get_plugin_url() . '/assets/css/admin.min.css', array( 'dashicons' ) );
|
37 |
do_action( 'admin_print_styles' );
|
38 |
do_action( 'admin_print_scripts' );
|
39 |
do_action( 'admin_head' );
|
33 |
|
34 |
echo '<!DOCTYPE html><html lang="en"><head><title>' . esc_html__( 'Browse for a file', 'download-monitor' ) . '</title>';
|
35 |
|
36 |
+
wp_enqueue_style( 'download_monitor_admin_css', download_monitor()->get_plugin_url() . '/assets/css/admin.min.css', array( 'dashicons' ), DLM_VERSION );
|
37 |
do_action( 'admin_print_styles' );
|
38 |
do_action( 'admin_print_scripts' );
|
39 |
do_action( 'admin_head' );
|
src/Admin/MediaInsert.php
CHANGED
@@ -45,7 +45,7 @@ class DLM_Admin_Media_Insert {
|
|
45 |
public function media_browser() {
|
46 |
|
47 |
// Enqueue scripts and styles for panel
|
48 |
-
wp_enqueue_style( 'download_monitor_admin_css', download_monitor()->get_plugin_url() . '/assets/css/admin.min.css', array( 'dashicons' ) );
|
49 |
wp_enqueue_script( 'common' );
|
50 |
wp_enqueue_style( 'global' );
|
51 |
wp_enqueue_style( 'wp-admin' );
|
45 |
public function media_browser() {
|
46 |
|
47 |
// Enqueue scripts and styles for panel
|
48 |
+
wp_enqueue_style( 'download_monitor_admin_css', download_monitor()->get_plugin_url() . '/assets/css/admin.min.css', array( 'dashicons' ), DLM_VERSION );
|
49 |
wp_enqueue_script( 'common' );
|
50 |
wp_enqueue_style( 'global' );
|
51 |
wp_enqueue_style( 'wp-admin' );
|
src/Admin/Settings/Page.php
CHANGED
@@ -332,7 +332,7 @@ class DLM_Settings_Page {
|
|
332 |
<div class="dlm-page-header <?php echo ( $extra_class ) ? esc_attr( $extra_class ) : ''; ?>">
|
333 |
<div class="dlm-header-logo">
|
334 |
|
335 |
-
<img src="data:image/png;base64,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" class="dlm-logo"/>
|
336 |
</div>
|
337 |
<div class="dlm-header-links">
|
338 |
<?php do_action( 'dlm_page_header_links' ); ?>
|
332 |
<div class="dlm-page-header <?php echo ( $extra_class ) ? esc_attr( $extra_class ) : ''; ?>">
|
333 |
<div class="dlm-header-logo">
|
334 |
|
335 |
+
<img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA1IiBoZWlnaHQ9IjEwNSIgdmlld0JveD0iMCAwIDEwNSAxMDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01Mi41IDAuMDAwNTk5Njc0QzM4LjU3NTYgMC4wMDA1OTk2NzQgMjUuMjIxOSA1LjUzMjAzIDE1LjM3NzYgMTUuMzc4MUM1LjUzMTQ2IDI1LjIyMjkgMCAzOC41NzY2IDAgNTIuNTAwM0MwIDY2LjQyNCA1LjUzMTQ2IDc5Ljc3ODMgMTUuMzc3NiA4OS42MjI1QzI1LjIyMjUgOTkuNDY4NiAzOC41NzYyIDEwNSA1Mi41IDEwNUM2Ni40MjM4IDEwNSA3OS43NzgxIDk5LjQ2ODYgODkuNjIyNCA4OS42MjI1Qzk5LjQ2ODUgNzkuNzc3NyAxMDUgNjYuNDI0IDEwNSA1Mi41MDAzQzEwNSA0My4yODQ1IDEwMi41NzQgMzQuMjMwOCA5Ny45NjY0IDI2LjI1MDJDOTMuMzU4NyAxOC4yNjk1IDg2LjczMDQgMTEuNjQxNiA3OC43NDk3IDcuMDMzNTRDNzAuNzY5IDIuNDI1ODEgNjEuNzE1MiAwIDUyLjQ5OTQgMEw1Mi41IDAuMDAwNTk5Njc0Wk00MC40Nzc3IDM4LjI3MThMNDcuMjQ5OSA0NS4wOTY5VjI2LjI0OTZINTcuNzUwMVY0NS4wOTY5TDY0LjUyMjMgMzguMzI0Nkw3MS45MjUyIDQ1LjcyNzVMNTIuNSA2NS4xNTI2TDMzLjAyMiA0NS42NzQ3TDQwLjQ3NzcgMzguMjcxOFpNNzguNzQ5MSA3OC43NTExSDI2LjI0ODVWNjguMjUxSDc4Ljc0OTFWNzguNzUxMVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8zN184NSkiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8zN184NSIgeDE9Ii0zNy41MjkzIiB5MT0iMS4wOTMzNGUtMDYiIHgyPSI5NS45NzY2IiB5Mj0iMTA3Ljg3MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBvZmZzZXQ9IjAuMTEwMTEzIiBzdG9wLWNvbG9yPSIjNURERUZCIi8+CjxzdG9wIG9mZnNldD0iMC40NDM1NjgiIHN0b3AtY29sb3I9IiM0MTlCQ0EiLz4KPHN0b3Agb2Zmc2V0PSIwLjYzNjEyMiIgc3RvcC1jb2xvcj0iIzAwOENENSIvPgo8c3RvcCBvZmZzZXQ9IjAuODU1OTk3IiBzdG9wLWNvbG9yPSIjMDI1RUEwIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAyNTM4RCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=" class="dlm-logo"/>
|
336 |
</div>
|
337 |
<div class="dlm-header-links">
|
338 |
<?php do_action( 'dlm_page_header_links' ); ?>
|
src/Admin/class-dlm-db-upgrader.php
CHANGED
@@ -552,10 +552,10 @@ if ( ! class_exists( 'DLM_DB_Upgrader' ) ) {
|
|
552 |
|
553 |
wp_enqueue_script( 'jquery-ui' );
|
554 |
wp_enqueue_script( 'jquery-ui-progressbar' );
|
555 |
-
wp_enqueue_script( 'dlm-log-db-upgrade', download_monitor()->get_plugin_url() . '/assets/js/database-upgrader' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', array( 'jquery' ),
|
556 |
wp_add_inline_script( 'dlm-log-db-upgrade', 'dlm_upgrader =' . wp_json_encode( array( 'nonce' => wp_create_nonce( 'dlm_db_log_nonce' ) ) ), 'before' );
|
557 |
|
558 |
-
wp_enqueue_style( 'dlm-db-upgrade-style', download_monitor()->get_plugin_url() . '/assets/css/db-upgrader.min.css', array(),
|
559 |
wp_enqueue_style( 'jquery-ui-style', download_monitor()->get_plugin_url() . '/assets/css/jquery-ui.min.css', array(), DLM_VERSION );
|
560 |
}
|
561 |
|
552 |
|
553 |
wp_enqueue_script( 'jquery-ui' );
|
554 |
wp_enqueue_script( 'jquery-ui-progressbar' );
|
555 |
+
wp_enqueue_script( 'dlm-log-db-upgrade', download_monitor()->get_plugin_url() . '/assets/js/database-upgrader' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', array( 'jquery' ), DLM_VERSION, true );
|
556 |
wp_add_inline_script( 'dlm-log-db-upgrade', 'dlm_upgrader =' . wp_json_encode( array( 'nonce' => wp_create_nonce( 'dlm_db_log_nonce' ) ) ), 'before' );
|
557 |
|
558 |
+
wp_enqueue_style( 'dlm-db-upgrade-style', download_monitor()->get_plugin_url() . '/assets/css/db-upgrader.min.css', array(), DLM_VERSION );
|
559 |
wp_enqueue_style( 'jquery-ui-style', download_monitor()->get_plugin_url() . '/assets/css/jquery-ui.min.css', array(), DLM_VERSION );
|
560 |
}
|
561 |
|
src/Admin/class-dlm-media-library.php
ADDED
@@ -0,0 +1,590 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Download Monitor - Media Library, class that handles the funcitonality from Media Library
|
4 |
+
*/
|
5 |
+
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
7 |
+
exit;
|
8 |
+
} // Exit if accessed directly
|
9 |
+
|
10 |
+
class DLM_Media_Library {
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Holds the class object.
|
14 |
+
*
|
15 |
+
* @since 4.7.2
|
16 |
+
*
|
17 |
+
* @var object
|
18 |
+
*/
|
19 |
+
public static $instance;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Returns the singleton instance of the class.
|
23 |
+
*
|
24 |
+
* @return object The DLM_Media_Library object.
|
25 |
+
* @since 4.7.2
|
26 |
+
*/
|
27 |
+
public static function get_instance() {
|
28 |
+
|
29 |
+
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof DLM_Media_Library ) ) {
|
30 |
+
self::$instance = new DLM_Media_Library();
|
31 |
+
}
|
32 |
+
|
33 |
+
return self::$instance;
|
34 |
+
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Class constructor
|
39 |
+
*/
|
40 |
+
private function __construct() {
|
41 |
+
// filter attachment thumbnails in media library for files in dlm_uploads
|
42 |
+
add_filter( 'wp_prepare_attachment_for_js', array( $this, 'filter_thumbnails_protected_files_grid' ), 10, 1 );
|
43 |
+
add_filter( 'wp_get_attachment_image_src', array( $this, 'filter_thumbnails_protected_files_list' ), 10, 1 );
|
44 |
+
// Do not make sub-sizes for images uploaded in dlm_uploads
|
45 |
+
add_filter( 'file_is_displayable_image', array( $this, 'no_image_subsizes' ), 15, 2 );
|
46 |
+
add_filter( 'ajax_query_attachments_args', array( $this, 'no_media_library_display' ), 15 );
|
47 |
+
// Add a Media Library filter to list view so that we can filter out dlm_uploads
|
48 |
+
add_action( 'restrict_manage_posts', array( $this, 'add_dlm_uploads_filter' ), 15, 2 );
|
49 |
+
// Set query vars for dlm_uploads filter
|
50 |
+
add_action( 'pre_get_posts', array( $this, 'media_library_filter' ), 15 );
|
51 |
+
// Add DLM Uploads file as a mime type
|
52 |
+
add_filter( 'post_mime_types', array( $this, 'add_mime_types' ), 15, 1 );
|
53 |
+
// Actions done to Media Library files in order to create Downloads and protect files
|
54 |
+
add_filter( 'attachment_fields_to_edit', array( $this, 'add_protect_button' ), 15, 2 );
|
55 |
+
add_action( 'wp_ajax_dlm_protect_file', array( $this, 'protect_file' ), 15 );
|
56 |
+
add_action( 'wp_ajax_dlm_unprotect_file', array( $this, 'unprotect_file' ), 15 );
|
57 |
+
add_filter( 'wp_prepare_attachment_for_js', array( $this, 'add_visual_indicator' ), 10, 2 );
|
58 |
+
add_filter( 'manage_upload_columns', array( $this, 'dlm_ml_column' ), 15, 1 );
|
59 |
+
add_action( 'manage_media_custom_column', array( $this, 'manage_dlm_ml_column' ), 0, 2 );
|
60 |
+
add_filter( 'bulk_actions-upload', array( $this, 'dlm_ml_bulk_actions' ), 15 );
|
61 |
+
add_filter( 'handle_bulk_actions-upload', array( $this, 'dlm_ml_handle_bulk' ), 15, 3 );
|
62 |
+
add_filter( 'admin_init', array( $this, 'dlm_ml_do_bulk' ), 15 );
|
63 |
+
// End Actions to Media Library files
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* filter attachment thumbnails in media library grid view for files in dlm_uploads
|
68 |
+
*
|
69 |
+
* @param array $response
|
70 |
+
*
|
71 |
+
* @return array
|
72 |
+
*/
|
73 |
+
public function filter_thumbnails_protected_files_grid( $response ) {
|
74 |
+
if ( apply_filters( 'dlm_filter_thumbnails_protected_files', true ) ) {
|
75 |
+
$upload_dir = wp_upload_dir();
|
76 |
+
|
77 |
+
if ( strpos( $response['url'], $upload_dir['baseurl'] . '/dlm_uploads' ) !== false ) {
|
78 |
+
if ( ! empty( $response['sizes'] ) ) {
|
79 |
+
$dlm_protected_thumb = download_monitor()->get_plugin_url() . '/assets/images/protected-file-thumbnail.png';
|
80 |
+
foreach ( $response['sizes'] as $rs_key => $rs_val ) {
|
81 |
+
$rs_val['url'] = $dlm_protected_thumb;
|
82 |
+
$response['sizes'][ $rs_key ] = $rs_val;
|
83 |
+
}
|
84 |
+
}
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
return $response;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* filter attachment thumbnails in media library list view for files in dlm_uploads
|
93 |
+
*
|
94 |
+
* @param bool|array $image
|
95 |
+
*
|
96 |
+
* @return bool|array
|
97 |
+
*/
|
98 |
+
public function filter_thumbnails_protected_files_list( $image ) {
|
99 |
+
if ( apply_filters( 'dlm_filter_thumbnails_protected_files', true ) ) {
|
100 |
+
if ( $image ) {
|
101 |
+
|
102 |
+
$upload_dir = wp_upload_dir();
|
103 |
+
|
104 |
+
if ( strpos( $image[0], $upload_dir['baseurl'] . '/dlm_uploads' ) !== false ) {
|
105 |
+
$image[0] = $dlm_protected_thumb = download_monitor()->get_plugin_url() . '/assets/images/protected-file-thumbnail.png';
|
106 |
+
$image[1] = 60;
|
107 |
+
$image[2] = 60;
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
}
|
112 |
+
|
113 |
+
return $image;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Don't display or create sub-sizes for DLM uploads
|
118 |
+
*
|
119 |
+
* @param $result
|
120 |
+
* @param $path
|
121 |
+
*
|
122 |
+
* @return false|mixed
|
123 |
+
* @since 4.6.0
|
124 |
+
*/
|
125 |
+
public function no_image_subsizes( $result, $path ) {
|
126 |
+
|
127 |
+
$upload_dir = wp_upload_dir();
|
128 |
+
|
129 |
+
if ( strpos( $path, $upload_dir['basedir'] . '/dlm_uploads' ) !== false ) {
|
130 |
+
$result = false;
|
131 |
+
}
|
132 |
+
|
133 |
+
return $result;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Don't display DLM Uploads in Media Library
|
138 |
+
*
|
139 |
+
* @param array $query Query parameters.
|
140 |
+
*
|
141 |
+
* @return array
|
142 |
+
* @since 4.6.0
|
143 |
+
*/
|
144 |
+
public function no_media_library_display( $query ) {
|
145 |
+
|
146 |
+
//Check for the added temporary mime_type so that we can filter the Media Library contents
|
147 |
+
if ( ! isset( $query['post_mime_type'] ) || 'dlm_uploads_files' !== $query['post_mime_type'] ) {
|
148 |
+
if ( ! isset( $query['meta_query'] ) ) {
|
149 |
+
$query['meta_query'] = array(
|
150 |
+
'relation' => 'AND',
|
151 |
+
array(
|
152 |
+
'key' => '_wp_attached_file',
|
153 |
+
'compare' => 'NOT LIKE',
|
154 |
+
'value' => 'dlm_uploads'
|
155 |
+
)
|
156 |
+
);
|
157 |
+
} else {
|
158 |
+
$query['meta_query'][] = array(
|
159 |
+
'key' => '_wp_attached_file',
|
160 |
+
'compare' => 'NOT LIKE',
|
161 |
+
'value' => 'dlm_uploads'
|
162 |
+
);
|
163 |
+
}
|
164 |
+
} else {
|
165 |
+
unset( $query['post_mime_type'] );
|
166 |
+
$query['meta_key'] = '_wp_attached_file';
|
167 |
+
$query['meta_query'][] = array(
|
168 |
+
'key' => '_wp_attached_file',
|
169 |
+
'compare' => 'LIKE',
|
170 |
+
'value' => 'dlm_uploads'
|
171 |
+
);
|
172 |
+
}
|
173 |
+
|
174 |
+
return $query;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Add Media Library filters for DLM Downloads
|
179 |
+
*
|
180 |
+
* @param $screen
|
181 |
+
* @param $which
|
182 |
+
*
|
183 |
+
* @return void
|
184 |
+
* @since 4.6.4
|
185 |
+
*/
|
186 |
+
public function add_dlm_uploads_filter( $screen, $which ) {
|
187 |
+
// Add a filter to the Media Library page so that we can filter regular uploads and Download Monitor's uploads
|
188 |
+
if ( $screen === 'attachment' ) {
|
189 |
+
$views = apply_filters( 'dlm_media_views', array(
|
190 |
+
'uploads_folder' => __( 'Uploads folder', 'download-monitor' ),
|
191 |
+
'dlm_uploads_folder' => __( 'Download Monitor', 'download-monitor' )
|
192 |
+
) );
|
193 |
+
|
194 |
+
$applied_filter = isset( $_GET['dlm_upload_folder_type'] ) ? sanitize_text_field( wp_unslash( $_GET['dlm_upload_folder_type'] ) ) : 'all';
|
195 |
+
?>
|
196 |
+
<select name="dlm_upload_folder_type">
|
197 |
+
<?php
|
198 |
+
foreach ( $views as $key => $view ) {
|
199 |
+
echo '<option value="' . $key . '" ' . selected( $key, $applied_filter ) . '>' . $view . '</option>';
|
200 |
+
}
|
201 |
+
?>
|
202 |
+
</select>
|
203 |
+
<?php
|
204 |
+
}
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Filter the media library query to wether show DLM uploads or not
|
209 |
+
*
|
210 |
+
* @param $query
|
211 |
+
*
|
212 |
+
* @return void
|
213 |
+
* @since 4.6.4
|
214 |
+
*/
|
215 |
+
public function media_library_filter( $query ) {
|
216 |
+
|
217 |
+
if ( ! is_admin() || false === strpos( $_SERVER['REQUEST_URI'], '/wp-admin/upload.php' ) ) {
|
218 |
+
return;
|
219 |
+
}
|
220 |
+
// If users views uploads folder then we don't need to show DLM uploads.
|
221 |
+
$compare = 'NOT LIKE';
|
222 |
+
// If user views the DLM Uploads folder then we need to show DLM uploads.
|
223 |
+
if ( isset( $_GET['dlm_upload_folder_type'] ) && 'dlm_uploads_folder' === $_GET['dlm_upload_folder_type'] ) {
|
224 |
+
$compare = 'LIKE';
|
225 |
+
}
|
226 |
+
// Set the meta query for the corresponding request.
|
227 |
+
$query->set( 'meta_key', '_wp_attached_file' );
|
228 |
+
$query->set( 'meta_query', array(
|
229 |
+
'key' => '_wp_attached_file',
|
230 |
+
'compare' => $compare,
|
231 |
+
'value' => 'dlm_uploads'
|
232 |
+
) );
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Add temporary dlm_uploads_files mime type to help us filter the media library
|
237 |
+
*
|
238 |
+
* @param $mimes
|
239 |
+
*
|
240 |
+
* @return mixed
|
241 |
+
* @since 4.6.4
|
242 |
+
*/
|
243 |
+
public function add_mime_types( $mimes ) {
|
244 |
+
|
245 |
+
if ( ! function_exists( 'get_current_screen' ) ) {
|
246 |
+
return $mimes;
|
247 |
+
}
|
248 |
+
|
249 |
+
$screen = get_current_screen();
|
250 |
+
// If we are not on the Media Library page or editing the Download then we don't need to add the mime types.
|
251 |
+
if ( ! is_admin() || ( 'upload' !== $screen->base && 'attachment' !== $screen->post_type && 'dlm_download' !== $screen->post_type ) ) {
|
252 |
+
return $mimes;
|
253 |
+
}
|
254 |
+
|
255 |
+
// Create temp mime_type that will only be available on Media Library page and edit Download page.
|
256 |
+
// We need this to proper filter the Media Library contents and show only DLM uploads or regular uploads.
|
257 |
+
$mimes['dlm_uploads_files'] = array(
|
258 |
+
'Download Monitor Files',
|
259 |
+
'Manage DLM Files',
|
260 |
+
array(
|
261 |
+
'dlm_uploads',
|
262 |
+
'else',
|
263 |
+
'singular' => 'DLM File',
|
264 |
+
'plural' => 'DLM Files',
|
265 |
+
'content' => null,
|
266 |
+
'domain' => null
|
267 |
+
)
|
268 |
+
);
|
269 |
+
|
270 |
+
return $mimes;
|
271 |
+
}
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Add a Protect Download button in the Attachment details view
|
275 |
+
*
|
276 |
+
* @param $fields
|
277 |
+
* @param $post
|
278 |
+
*
|
279 |
+
* @return mixed
|
280 |
+
* @since 4.7.2
|
281 |
+
*/
|
282 |
+
public function add_protect_button( $fields, $post ) {
|
283 |
+
// Let's check if this is not already set.
|
284 |
+
if ( ! isset( $fields['dlm_protect_file'] ) ) {
|
285 |
+
|
286 |
+
$button_text = __( 'Protect', 'download-monitor' );
|
287 |
+
$action = 'protect_file';
|
288 |
+
$text = esc_html__( 'Creates a Download based on this file and moves the file to Download Monitor\'s protected folder. Also replaces the attachment\'s URL with the download link.', 'download-monitor' );
|
289 |
+
|
290 |
+
if ( '1' === get_post_meta( $post->ID, 'dlm_protected_file', true ) ) {
|
291 |
+
$button_text = __( 'Unprotect', 'download-monitor' );
|
292 |
+
$action = 'unprotect_file';
|
293 |
+
$text = esc_html__( 'Moves the file from Download Monitor\'s protected directory to the uploads directory. Also places back the original URL for this attachment.', 'download-monitor' );
|
294 |
+
}
|
295 |
+
|
296 |
+
$html = '<button id="dlm-protect-file" class="button button-primary" data-action="' . esc_attr( $action ) . '" data-post_id="' . absint( $post->ID ) . '" data-nonce="' . wp_create_nonce( 'dlm_protect_file' ) . '" data-title="' . esc_attr( $post->title ) . '" data-user_id="' . get_current_user_id() . '" data-file="' . esc_url( wp_get_attachment_url( $post->ID ) ) . '" >' . esc_html( $button_text ) . '</button><p class="description">' . $text . '</p>';
|
297 |
+
|
298 |
+
// Add our button
|
299 |
+
$fields['dlm_protect_file'] = array(
|
300 |
+
'label' => __( 'DLM protect file', 'download-monitor' ),
|
301 |
+
'input' => 'html',
|
302 |
+
'html' => $html,
|
303 |
+
|
304 |
+
);
|
305 |
+
}
|
306 |
+
|
307 |
+
return $fields;
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Function used to create new Downloads directly from the Media Library
|
312 |
+
*
|
313 |
+
* @return void
|
314 |
+
* @since 4.7.2
|
315 |
+
*/
|
316 |
+
public function protect_file() {
|
317 |
+
// Check if nonce is transmitted
|
318 |
+
if ( ! isset( $_POST['_ajax_nonce'] ) ) {
|
319 |
+
wp_send_json_error( 'No nonce' );
|
320 |
+
}
|
321 |
+
// Check if nonce is correct
|
322 |
+
check_ajax_referer( 'dlm_protect_file', '_ajax_nonce' );
|
323 |
+
// Get the data so we can create the download
|
324 |
+
$file = $_POST;
|
325 |
+
// Move the file
|
326 |
+
download_monitor()->service( 'file_manager' )->move_file_to_dlm_uploads( $file['attachment_id'] );
|
327 |
+
// Create the download or update existing one
|
328 |
+
$current_url = $this->create_download( $file );
|
329 |
+
// Send the response
|
330 |
+
$data = array(
|
331 |
+
'url' => $current_url,
|
332 |
+
'text' => esc_html__( 'File protected. Download created', 'download-monitor' )
|
333 |
+
);
|
334 |
+
wp_send_json_success( $data );
|
335 |
+
}
|
336 |
+
|
337 |
+
/**
|
338 |
+
* Function used to unprotect Media Library file
|
339 |
+
*
|
340 |
+
* @return void
|
341 |
+
* @since 4.7.2
|
342 |
+
*/
|
343 |
+
public function unprotect_file() {
|
344 |
+
// Check if nonce is transmitted
|
345 |
+
if ( ! isset( $_POST['_ajax_nonce'] ) ) {
|
346 |
+
wp_send_json_error( 'No nonce' );
|
347 |
+
}
|
348 |
+
// Check if nonce is correct
|
349 |
+
check_ajax_referer( 'dlm_protect_file', '_ajax_nonce' );
|
350 |
+
// Get the data so we can create the download
|
351 |
+
$file = $_POST;
|
352 |
+
// For the moment we don't know the version id or if it exists
|
353 |
+
$version_id = false;
|
354 |
+
// Now make the move to Download Monitor's protected folder dlm_uploads
|
355 |
+
download_monitor()->service( 'file_manager' )->move_file_back( $file['attachment_id'] );
|
356 |
+
// Get the currently protected download so that we can update its files
|
357 |
+
$known_download = get_post_meta( $file['attachment_id'], 'dlm_download', true );
|
358 |
+
if ( ! empty( $known_download ) ) {
|
359 |
+
$version_id = json_decode( $known_download, true )['version_id'];
|
360 |
+
}
|
361 |
+
// Delete set metas when the file was protected.
|
362 |
+
delete_post_meta( $file['attachment_id'], 'dlm_protected_file' );
|
363 |
+
// Get current URL so we can update the Version files.
|
364 |
+
$current_url = wp_get_attachment_url( $file['attachment_id'] );
|
365 |
+
// Get secure path and update the file path in the Download
|
366 |
+
list( $file_path, $remote_file, $restriction ) = download_monitor()->service( 'file_manager' )->get_secure_path( $current_url, 'relative' );
|
367 |
+
|
368 |
+
if ( $version_id ) {
|
369 |
+
// Update the Version meta.
|
370 |
+
update_post_meta( $version_id, '_files', download_monitor()->service( 'file_manager' )->json_encode_files( $file_path ) );
|
371 |
+
}
|
372 |
+
|
373 |
+
// Send the response
|
374 |
+
$data = array(
|
375 |
+
'url' => $current_url,
|
376 |
+
'text' => esc_html__( 'File unprotected.', 'download-monitor' )
|
377 |
+
);
|
378 |
+
|
379 |
+
wp_send_json_success( $data );
|
380 |
+
}
|
381 |
+
|
382 |
+
/**
|
383 |
+
* Create new Download and its version
|
384 |
+
*
|
385 |
+
* @param $file
|
386 |
+
*
|
387 |
+
* @return string URL of the new Download
|
388 |
+
* @since 4.7.2
|
389 |
+
*/
|
390 |
+
public function create_download( $file ) {
|
391 |
+
|
392 |
+
// Get new path
|
393 |
+
list( $file_path, $remote_file, $restriction ) = download_monitor()->service( 'file_manager' )->get_secure_path( wp_get_attachment_url( $file['attachment_id'] ), 'relative' );
|
394 |
+
|
395 |
+
// Check if the file has been previously protected
|
396 |
+
$known_download = get_post_meta( $file['attachment_id'], 'dlm_download', true );
|
397 |
+
// If not, protect and add the corresponding meta, Download & Version
|
398 |
+
if ( empty( $known_download ) ) {
|
399 |
+
$download_title = ( empty( $file['title'] ) ) ? DLM_Utils::basename( $file['file'] ) : $file['title'];
|
400 |
+
// Create the Download object.
|
401 |
+
$download = array(
|
402 |
+
'post_title' => $download_title,
|
403 |
+
'post_content' => '',
|
404 |
+
'post_status' => 'publish',
|
405 |
+
'post_author' => absint( $file['user_id'] ),
|
406 |
+
'post_type' => 'dlm_download'
|
407 |
+
);
|
408 |
+
// Insert the Download. We need its ID to create the Download Version.
|
409 |
+
$download_id = wp_insert_post( $download );
|
410 |
+
// Create the Version object
|
411 |
+
$version = array(
|
412 |
+
'post_title' => 'Download #' . $download_title . 'File Version',
|
413 |
+
'post_content' => '',
|
414 |
+
'post_status' => 'publish',
|
415 |
+
'post_author' => absint( $file['user_id'] ),
|
416 |
+
'post_type' => 'dlm_download_version',
|
417 |
+
'post_parent' => $download_id
|
418 |
+
);
|
419 |
+
// Insert the Version.
|
420 |
+
$version_id = wp_insert_post( $version );
|
421 |
+
// Update the Version meta.
|
422 |
+
update_post_meta( $version_id, '_files', download_monitor()->service( 'file_manager' )->json_encode_files( $file_path ) );
|
423 |
+
// Set a meta option to know what Download is using this file and what Version.
|
424 |
+
$attachment_meta = json_encode(
|
425 |
+
array(
|
426 |
+
'download_id' => $download_id,
|
427 |
+
'version_id' => $version_id
|
428 |
+
)
|
429 |
+
);
|
430 |
+
update_post_meta( $file['attachment_id'], 'dlm_download', $attachment_meta );
|
431 |
+
} else { // Use the current Download and Version
|
432 |
+
$download_id = json_decode( $known_download, true )['download_id'];
|
433 |
+
$version_id = json_decode( $known_download, true )['version_id'];
|
434 |
+
}
|
435 |
+
|
436 |
+
// Update the Version meta.
|
437 |
+
update_post_meta( $version_id, '_files', download_monitor()->service( 'file_manager' )->json_encode_files( $file_path ) );
|
438 |
+
update_post_meta( $version_id, '_version', '' );
|
439 |
+
$transient_name = 'dlm_file_version_ids_' . $download_id;
|
440 |
+
$transient_name_2 = 'dlm_file_version_ids_' . $version_id;
|
441 |
+
// Set a meta option to know that this file is protected by Download Monitor.
|
442 |
+
update_post_meta( $file['attachment_id'], 'dlm_protected_file', '1' );
|
443 |
+
// Update the file's URL with the Download Monitor's URL.
|
444 |
+
// First we need to retrieve the newly created Download
|
445 |
+
try {
|
446 |
+
/** @var DLM_Download $download */
|
447 |
+
$download = download_monitor()->service( 'download_repository' )->retrieve_single( absint( $download_id ) );
|
448 |
+
$attachment = array(
|
449 |
+
'ID' => $file['attachment_id'],
|
450 |
+
);
|
451 |
+
wp_update_post( $attachment );
|
452 |
+
// Delete transient as it won't be able to find the versions if not.
|
453 |
+
delete_transient( $transient_name );
|
454 |
+
delete_transient( $transient_name_2 );
|
455 |
+
|
456 |
+
$url = $download->get_the_download_link();
|
457 |
+
// Set version also to the URL as the user might add another version to that Download that could download another file
|
458 |
+
if ( $version_id ) {
|
459 |
+
$url = add_query_arg( 'v', $version_id, $url );
|
460 |
+
}
|
461 |
+
|
462 |
+
return $url;
|
463 |
+
|
464 |
+
} catch ( Exception $exception ) {
|
465 |
+
// no download found, don't do anything.
|
466 |
+
}
|
467 |
+
|
468 |
+
return false;
|
469 |
+
}
|
470 |
+
|
471 |
+
/**
|
472 |
+
* Displays a visual indicator for Media Library files that are protected by DLM
|
473 |
+
*
|
474 |
+
* @param $response
|
475 |
+
* @param $attachment
|
476 |
+
*
|
477 |
+
* @return mixed
|
478 |
+
* @since 4.7.2
|
479 |
+
*/
|
480 |
+
public function add_visual_indicator( $response, $attachment ) {
|
481 |
+
|
482 |
+
if ( '1' === get_post_meta( $attachment->ID, 'dlm_protected_file', true ) ) {
|
483 |
+
$response['customClass'] = 'dlm-ml-protected-file';
|
484 |
+
}
|
485 |
+
|
486 |
+
return $response;
|
487 |
+
}
|
488 |
+
|
489 |
+
public function dlm_ml_column( $columns ) {
|
490 |
+
$columns['dlm_protection'] = __( 'Download Monitor', 'download-monitor' );
|
491 |
+
|
492 |
+
return $columns;
|
493 |
+
}
|
494 |
+
|
495 |
+
public function manage_dlm_ml_column( $column_name, $id ) {
|
496 |
+
|
497 |
+
if ( $column_name == 'dlm_protection' ) {
|
498 |
+
|
499 |
+
if ( '1' === get_post_meta( $id, 'dlm_protected_file', true ) ) {
|
500 |
+
?>
|
501 |
+
<img
|
502 |
+
src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyOCAyOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI4IDE0QzI4IDYuMjY4MDEgMjEuNzMyIDAgMTQgMEM2LjI2ODAxIDAgMCA2LjI2ODAxIDAgMTRDMCAyMS43MzIgNi4yNjgwMSAyOCAxNCAyOEMyMS43MzIgMjggMjggMjEuNzMyIDI4IDE0WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzM2XzM5KSIvPgo8cGF0aCBkPSJNMTcuNjE1NCAxMi41NjI1SDE3LjM3NVY5LjUxNTYyQzE3LjM3NSA4LjU4MzIyIDE2Ljk5NTEgNy42ODkwMSAxNi4zMTg5IDcuMDI5N0MxNS42NDI3IDYuMzcwNCAxNC43MjU1IDYgMTMuNzY5MiA2QzEyLjgxMjkgNiAxMS44OTU4IDYuMzcwNCAxMS4yMTk2IDcuMDI5N0MxMC41NDM0IDcuNjg5MDEgMTAuMTYzNSA4LjU4MzIyIDEwLjE2MzUgOS41MTU2MlYxMi41NjI1SDkuOTIzMDhDOS40MTMwNSAxMi41NjI1IDguOTIzOSAxMi43NiA4LjU2MzI2IDEzLjExMTdDOC4yMDI2MSAxMy40NjMzIDggMTMuOTQwMiA4IDE0LjQzNzVWMTkuMTI1QzggMTkuNjIyMyA4LjIwMjYxIDIwLjA5OTIgOC41NjMyNiAyMC40NTA4QzguOTIzOSAyMC44MDI1IDkuNDEzMDUgMjEgOS45MjMwOCAyMUgxNy42MTU0QzE4LjEyNTQgMjEgMTguNjE0NiAyMC44MDI1IDE4Ljk3NTIgMjAuNDUwOEMxOS4zMzU5IDIwLjA5OTIgMTkuNTM4NSAxOS42MjIzIDE5LjUzODUgMTkuMTI1VjE0LjQzNzVDMTkuNTM4NSAxMy45NDAyIDE5LjMzNTkgMTMuNDYzMyAxOC45NzUyIDEzLjExMTdDMTguNjE0NiAxMi43NiAxOC4xMjU0IDEyLjU2MjUgMTcuNjE1NCAxMi41NjI1VjEyLjU2MjVaTTExLjEyNSA5LjUxNTYyQzExLjEyNSA4LjgzMTg2IDExLjQwMzYgOC4xNzYxMSAxMS44OTk1IDcuNjkyNjJDMTIuMzk1NCA3LjIwOTEyIDEzLjA2NzkgNi45Mzc1IDEzLjc2OTIgNi45Mzc1QzE0LjQ3MDUgNi45Mzc1IDE1LjE0MzEgNy4yMDkxMiAxNS42MzkgNy42OTI2MkMxNi4xMzQ5IDguMTc2MTEgMTYuNDEzNSA4LjgzMTg2IDE2LjQxMzUgOS41MTU2MlYxMi41NjI1SDExLjEyNVY5LjUxNTYyWk0xNC4yNSAxNy45NTMxQzE0LjI1IDE4LjA3NzQgMTQuMTk5MyAxOC4xOTY3IDE0LjEwOTIgMTguMjg0NkMxNC4wMTkgMTguMzcyNSAxMy44OTY3IDE4LjQyMTkgMTMuNzY5MiAxOC40MjE5QzEzLjY0MTcgMTguNDIxOSAxMy41MTk0IDE4LjM3MjUgMTMuNDI5MyAxOC4yODQ2QzEzLjMzOTEgMTguMTk2NyAxMy4yODg1IDE4LjA3NzQgMTMuMjg4NSAxNy45NTMxVjE1LjYwOTRDMTMuMjg4NSAxNS40ODUxIDEzLjMzOTEgMTUuMzY1OCAxMy40MjkzIDE1LjI3NzlDMTMuNTE5NCAxNS4xOSAxMy42NDE3IDE1LjE0MDYgMTMuNzY5MiAxNS4xNDA2QzEzLjg5NjcgMTUuMTQwNiAxNC4wMTkgMTUuMTkgMTQuMTA5MiAxNS4yNzc5QzE0LjE5OTMgMTUuMzY1OCAxNC4yNSAxNS40ODUxIDE0LjI1IDE1LjYwOTRWMTcuOTUzMVoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMzZfMzkiIHgxPSItNy41NDY4NyIgeTE9Ii00LjM3NSIgeDI9IjI1LjU5MzciIHkyPSIyOC43NjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIG9mZnNldD0iMC4xMTAxMTMiIHN0b3AtY29sb3I9IiM1RERFRkIiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ0MzU2OCIgc3RvcC1jb2xvcj0iIzQxOUJDQSIvPgo8c3RvcCBvZmZzZXQ9IjAuNjM2MTIyIiBzdG9wLWNvbG9yPSIjMDA4Q0Q1Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAyNUVBMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=">
|
503 |
+
<?php
|
504 |
+
} else {
|
505 |
+
?>
|
506 |
+
<span class="dashicons dashicons-no"
|
507 |
+
style="color:red"></span><?php echo esc_html__( 'Un-Protected', 'download-monitor' ) ?>
|
508 |
+
<?php
|
509 |
+
}
|
510 |
+
|
511 |
+
}
|
512 |
+
}
|
513 |
+
|
514 |
+
/**
|
515 |
+
* Add bulk actions to Media Library table
|
516 |
+
*
|
517 |
+
* @param $bulk_actions
|
518 |
+
*
|
519 |
+
* @return mixed
|
520 |
+
* @since 4.7.2
|
521 |
+
*/
|
522 |
+
public function dlm_ml_bulk_actions( $bulk_actions ) {
|
523 |
+
$bulk_actions['dlm_protect_files'] = __( 'Download Monitor protect', 'download-monitor' );
|
524 |
+
|
525 |
+
return $bulk_actions;
|
526 |
+
}
|
527 |
+
|
528 |
+
/**
|
529 |
+
* Handle our bulk actions
|
530 |
+
*
|
531 |
+
* @param $location
|
532 |
+
* @param $doaction
|
533 |
+
* @param $post_ids
|
534 |
+
*
|
535 |
+
* @return string
|
536 |
+
* @since 4.7.2
|
537 |
+
*/
|
538 |
+
public function dlm_ml_handle_bulk( $location, $doaction, $post_ids ) {
|
539 |
+
|
540 |
+
global $pagenow;
|
541 |
+
if ( 'dlm_protect_files' === $doaction ) {
|
542 |
+
return admin_url(
|
543 |
+
add_query_arg(
|
544 |
+
array(
|
545 |
+
'dlm_action' => $doaction,
|
546 |
+
'posts' => $post_ids
|
547 |
+
), '/upload.php' ) );
|
548 |
+
}
|
549 |
+
|
550 |
+
return $location;
|
551 |
+
}
|
552 |
+
|
553 |
+
/**
|
554 |
+
* Bulk action for protecting files
|
555 |
+
*
|
556 |
+
* @return void
|
557 |
+
* @since 4.7.2
|
558 |
+
*/
|
559 |
+
public function dlm_ml_do_bulk() {
|
560 |
+
// If there's no action or posts, bail
|
561 |
+
if ( ! isset( $_GET['dlm_action'] ) || ! isset( $_GET['posts'] ) ) {
|
562 |
+
return;
|
563 |
+
}
|
564 |
+
|
565 |
+
$action = $_GET['dlm_action'];
|
566 |
+
$posts = $_GET['posts'];
|
567 |
+
|
568 |
+
if ( 'dlm_protect_files' === $action ) {
|
569 |
+
foreach ( $posts as $post_id ) {
|
570 |
+
// If it's not an attachment or is already protected, skip it
|
571 |
+
if ( 'attachment' !== get_post_type( $post_id ) || ( '1' === get_post_meta( $post_id, 'dlm_protected_file', true ) ) ) {
|
572 |
+
continue;
|
573 |
+
}
|
574 |
+
// Create the file object
|
575 |
+
$file = array(
|
576 |
+
'attachment_id' => $post_id,
|
577 |
+
'user_id' => get_current_user_id(),
|
578 |
+
'title' => get_the_title( $post_id ),
|
579 |
+
);
|
580 |
+
// Move the file
|
581 |
+
download_monitor()->service( 'file_manager' )->move_file_to_dlm_uploads( $file['attachment_id'] );
|
582 |
+
// Create the Download
|
583 |
+
$this->create_download( $file );
|
584 |
+
}
|
585 |
+
}
|
586 |
+
// Redirect to the media library when finished.
|
587 |
+
wp_redirect( admin_url( 'upload.php' ) );
|
588 |
+
exit;
|
589 |
+
}
|
590 |
+
}
|
src/AjaxHandler.php
CHANGED
@@ -22,6 +22,7 @@ class DLM_Ajax_Handler {
|
|
22 |
add_action( 'wp_ajax_dlm_settings_lazy_select', array( $this, 'handle_settings_lazy_select' ) );
|
23 |
add_action( 'wp_ajax_dlm_extension', array( $this, 'handle_extensions' ) );
|
24 |
add_action( 'wp_ajax_dlm_dismiss_notice', array( $this, 'dismiss_notice' ) );
|
|
|
25 |
}
|
26 |
|
27 |
/**
|
@@ -291,4 +292,27 @@ class DLM_Ajax_Handler {
|
|
291 |
// Send JSON
|
292 |
wp_send_json( $response );
|
293 |
}
|
294 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
add_action( 'wp_ajax_dlm_settings_lazy_select', array( $this, 'handle_settings_lazy_select' ) );
|
23 |
add_action( 'wp_ajax_dlm_extension', array( $this, 'handle_extensions' ) );
|
24 |
add_action( 'wp_ajax_dlm_dismiss_notice', array( $this, 'dismiss_notice' ) );
|
25 |
+
add_action( 'wp_ajax_dlm_update_file_meta', array( $this, 'save_attachment_meta' ) );
|
26 |
}
|
27 |
|
28 |
/**
|
292 |
// Send JSON
|
293 |
wp_send_json( $response );
|
294 |
}
|
295 |
+
|
296 |
+
/**
|
297 |
+
* Save attachment meta dlm_download
|
298 |
+
*
|
299 |
+
* @return void
|
300 |
+
* @since 4.7.2
|
301 |
+
*/
|
302 |
+
public function save_attachment_meta() {
|
303 |
+
// Check if there is a nonce
|
304 |
+
if ( ! isset( $_POST['nonce'] ) ) {
|
305 |
+
wp_send_json_error( 'No nonce send' );
|
306 |
+
}
|
307 |
+
// check nonce
|
308 |
+
check_ajax_referer( 'add-file', 'nonce' );
|
309 |
+
$meta = json_encode(
|
310 |
+
array(
|
311 |
+
'download_id' => absint( $_POST['download_id'] ),
|
312 |
+
'version_id' => absint( $_POST['version_id'] )
|
313 |
+
)
|
314 |
+
);
|
315 |
+
update_post_meta( absint( $_POST['file_id'] ), 'dlm_download', $meta );
|
316 |
+
wp_send_json_success();
|
317 |
+
}
|
318 |
+
}
|
src/DLM.php
CHANGED
@@ -217,6 +217,8 @@ class WP_DLM {
|
|
217 |
|
218 |
// Fix to whitelist our function for PolyLang
|
219 |
add_filter( 'pll_home_url_white_list', array( $this, 'whitelist_polylang' ), 15, 1 );
|
|
|
|
|
220 |
}
|
221 |
|
222 |
/**
|
@@ -625,4 +627,49 @@ class WP_DLM {
|
|
625 |
public static function do_xhr() {
|
626 |
return apply_filters( 'dlm_do_xhr', true );
|
627 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
628 |
}
|
217 |
|
218 |
// Fix to whitelist our function for PolyLang
|
219 |
add_filter( 'pll_home_url_white_list', array( $this, 'whitelist_polylang' ), 15, 1 );
|
220 |
+
// Generate attachment URL as Download link for protected files. Adding this here because we need it both in admin and in front
|
221 |
+
add_filter( 'wp_get_attachment_url', array( $this, 'generate_attachment_url' ), 15, 2 );
|
222 |
}
|
223 |
|
224 |
/**
|
627 |
public static function do_xhr() {
|
628 |
return apply_filters( 'dlm_do_xhr', true );
|
629 |
}
|
630 |
+
|
631 |
+
/**
|
632 |
+
* Return the Download Link for a given file if that file was protected by DLM
|
633 |
+
*
|
634 |
+
* @param $url
|
635 |
+
* @param $attachment_id
|
636 |
+
*
|
637 |
+
* @return mixed|String
|
638 |
+
* @since 4.7.2
|
639 |
+
*/
|
640 |
+
public function generate_attachment_url( $url, $attachment_id ) {
|
641 |
+
// Get the Download ID, if exists
|
642 |
+
$known_download = get_post_meta( $attachment_id, 'dlm_download', true );
|
643 |
+
$protected = get_post_meta( $attachment_id, 'dlm_protected_file', true );
|
644 |
+
// If it doesn't exist, return the original URL
|
645 |
+
if ( empty( $known_download ) || '1' !== $protected ) {
|
646 |
+
return $url;
|
647 |
+
}
|
648 |
+
|
649 |
+
$known_download = json_decode( $known_download, true );
|
650 |
+
$download_id = isset( $known_download['download_id'] ) ? $known_download['download_id'] : false;
|
651 |
+
$version_id = isset( $known_download['version_id'] ) ? $known_download['version_id'] : false;
|
652 |
+
|
653 |
+
if ( ! $download_id ) {
|
654 |
+
return $url;
|
655 |
+
}
|
656 |
+
|
657 |
+
$download = false;
|
658 |
+
// Try to find our Download
|
659 |
+
try {
|
660 |
+
/** @var DLM_Download $download */
|
661 |
+
$download = download_monitor()->service( 'download_repository' )->retrieve_single( absint( $download_id ) );
|
662 |
+
} catch ( Exception $exception ) {
|
663 |
+
return $url;
|
664 |
+
}
|
665 |
+
|
666 |
+
$url = $download->get_the_download_link();
|
667 |
+
// Set version also to the URL as the user might add another version to that Download that could download another file
|
668 |
+
if ( $version_id ) {
|
669 |
+
$url = add_query_arg( 'v', $version_id, $url );
|
670 |
+
}
|
671 |
+
|
672 |
+
// Return our Download Link instead of the original URL
|
673 |
+
return $url;
|
674 |
+
}
|
675 |
}
|
src/DownloadHandler.php
CHANGED
@@ -504,6 +504,8 @@ class DLM_Download_Handler {
|
|
504 |
do_action( 'dlm_downloading', $download, $version, $file_path );
|
505 |
}
|
506 |
|
|
|
|
|
507 |
$allowed_paths = download_monitor()->service( 'file_manager' )->get_allowed_paths();
|
508 |
// we get the secure file path.
|
509 |
$correct_path = download_monitor()->service( 'file_manager' )->get_correct_path( $file_path, $allowed_paths );
|
@@ -511,7 +513,7 @@ class DLM_Download_Handler {
|
|
511 |
// Redirect to the file...
|
512 |
if ( $download->is_redirect_only() || apply_filters( 'dlm_do_not_force', false, $download, $version ) ) {
|
513 |
if ( ! $this->check_for_xhr() ) {
|
514 |
-
$this->dlm_logging->log( $download, $version, 'redirect' );
|
515 |
}
|
516 |
|
517 |
// If it's not a remote file we need to create the correct URL.
|
@@ -525,6 +527,15 @@ class DLM_Download_Handler {
|
|
525 |
}
|
526 |
|
527 |
if ( $this->check_for_xhr() ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
528 |
header( 'DLM-Redirect: ' . $file_path );
|
529 |
exit;
|
530 |
}
|
@@ -542,7 +553,7 @@ class DLM_Download_Handler {
|
|
542 |
if ( '1' === get_option( 'dlm_xsendfile_enabled' ) ) {
|
543 |
if ( function_exists( 'apache_get_modules' ) && in_array( 'mod_xsendfile', apache_get_modules() ) ) {
|
544 |
if ( ! $this->check_for_xhr() ) {
|
545 |
-
$this->dlm_logging->log( $download, $version, 'completed' );
|
546 |
}
|
547 |
|
548 |
header( "X-Sendfile: $file_path" );
|
@@ -551,7 +562,7 @@ class DLM_Download_Handler {
|
|
551 |
} elseif ( stristr( getenv( 'SERVER_SOFTWARE' ), 'lighttpd' ) ) {
|
552 |
|
553 |
if ( ! $this->check_for_xhr() ) {
|
554 |
-
$this->dlm_logging->log( $download, $version, 'completed' );
|
555 |
}
|
556 |
|
557 |
header( "X-LIGHTTPD-send-file: $file_path" );
|
@@ -559,7 +570,7 @@ class DLM_Download_Handler {
|
|
559 |
|
560 |
} elseif ( stristr( getenv( 'SERVER_SOFTWARE' ), 'nginx' ) || stristr( getenv( 'SERVER_SOFTWARE' ), 'cherokee' ) ) {
|
561 |
// Log this way as the js doesn't know who the download_id and version_id is
|
562 |
-
$this->dlm_logging->log( $download, $version, 'completed' );
|
563 |
|
564 |
// At this point the $correct_path should have a value of the file path as the verification was made prior to this check
|
565 |
// If there are symbolik links the return of the function will be an URL, so the last replace will not be taken into consideration.
|
@@ -605,7 +616,7 @@ class DLM_Download_Handler {
|
|
605 |
// Adding contents to an object will trigger error on big files.
|
606 |
if ( $this->readfile_chunked( $file_path, false, $range ) ) {
|
607 |
if ( ! $this->check_for_xhr() ) {
|
608 |
-
$this->dlm_logging->log( $download, $version, 'completed' );
|
609 |
}
|
610 |
} elseif ( $remote_file ) {
|
611 |
// Redirect - we can't track if this completes or not.
|
@@ -615,7 +626,7 @@ class DLM_Download_Handler {
|
|
615 |
}
|
616 |
|
617 |
header( 'Location: ' . $file_path );
|
618 |
-
$this->dlm_logging->log( $download, $version, 'redirected' );
|
619 |
|
620 |
} else {
|
621 |
|
@@ -624,7 +635,7 @@ class DLM_Download_Handler {
|
|
624 |
exit;
|
625 |
}
|
626 |
|
627 |
-
$this->dlm_logging->log( $download, $version, 'failed' );
|
628 |
wp_die( esc_html__( 'File not found.', 'download-monitor' ) . ' <a href="' . esc_url( home_url() ) . '">' . esc_html__( 'Go to homepage →', 'download-monitor' ) . '</a>', esc_html__( 'Download Error', 'download-monitor' ), array( 'response' => 404 ) );
|
629 |
}
|
630 |
exit;
|
504 |
do_action( 'dlm_downloading', $download, $version, $file_path );
|
505 |
}
|
506 |
|
507 |
+
$referrer = ( isset( $_SERVER['HTTP_REFERER'] ) ) ? esc_url_raw( $_SERVER['HTTP_REFERER'] ) : '';
|
508 |
+
|
509 |
$allowed_paths = download_monitor()->service( 'file_manager' )->get_allowed_paths();
|
510 |
// we get the secure file path.
|
511 |
$correct_path = download_monitor()->service( 'file_manager' )->get_correct_path( $file_path, $allowed_paths );
|
513 |
// Redirect to the file...
|
514 |
if ( $download->is_redirect_only() || apply_filters( 'dlm_do_not_force', false, $download, $version ) ) {
|
515 |
if ( ! $this->check_for_xhr() ) {
|
516 |
+
$this->dlm_logging->log( $download, $version, 'redirect', true, $referrer );
|
517 |
}
|
518 |
|
519 |
// If it's not a remote file we need to create the correct URL.
|
527 |
}
|
528 |
|
529 |
if ( $this->check_for_xhr() ) {
|
530 |
+
// We need to urlencode in case there are unicode characters in the file name.
|
531 |
+
// Get file name
|
532 |
+
$file_name = urldecode( DLM_Utils::basename( $file_path ) );
|
533 |
+
|
534 |
+
if ( strstr( $file_name, '?' ) ) {
|
535 |
+
$file_name = current( explode( '?', $file_name ) );
|
536 |
+
}
|
537 |
+
|
538 |
+
$file_path = str_replace( $file_name, urlencode( $file_name ), $file_path );
|
539 |
header( 'DLM-Redirect: ' . $file_path );
|
540 |
exit;
|
541 |
}
|
553 |
if ( '1' === get_option( 'dlm_xsendfile_enabled' ) ) {
|
554 |
if ( function_exists( 'apache_get_modules' ) && in_array( 'mod_xsendfile', apache_get_modules() ) ) {
|
555 |
if ( ! $this->check_for_xhr() ) {
|
556 |
+
$this->dlm_logging->log( $download, $version, 'completed', true, $referrer );
|
557 |
}
|
558 |
|
559 |
header( "X-Sendfile: $file_path" );
|
562 |
} elseif ( stristr( getenv( 'SERVER_SOFTWARE' ), 'lighttpd' ) ) {
|
563 |
|
564 |
if ( ! $this->check_for_xhr() ) {
|
565 |
+
$this->dlm_logging->log( $download, $version, 'completed', true, $referrer );
|
566 |
}
|
567 |
|
568 |
header( "X-LIGHTTPD-send-file: $file_path" );
|
570 |
|
571 |
} elseif ( stristr( getenv( 'SERVER_SOFTWARE' ), 'nginx' ) || stristr( getenv( 'SERVER_SOFTWARE' ), 'cherokee' ) ) {
|
572 |
// Log this way as the js doesn't know who the download_id and version_id is
|
573 |
+
$this->dlm_logging->log( $download, $version, 'completed', true, $referrer );
|
574 |
|
575 |
// At this point the $correct_path should have a value of the file path as the verification was made prior to this check
|
576 |
// If there are symbolik links the return of the function will be an URL, so the last replace will not be taken into consideration.
|
616 |
// Adding contents to an object will trigger error on big files.
|
617 |
if ( $this->readfile_chunked( $file_path, false, $range ) ) {
|
618 |
if ( ! $this->check_for_xhr() ) {
|
619 |
+
$this->dlm_logging->log( $download, $version, 'completed', true, $referrer );
|
620 |
}
|
621 |
} elseif ( $remote_file ) {
|
622 |
// Redirect - we can't track if this completes or not.
|
626 |
}
|
627 |
|
628 |
header( 'Location: ' . $file_path );
|
629 |
+
$this->dlm_logging->log( $download, $version, 'redirected', true, $referrer );
|
630 |
|
631 |
} else {
|
632 |
|
635 |
exit;
|
636 |
}
|
637 |
|
638 |
+
$this->dlm_logging->log( $download, $version, 'failed', true, $referrer );
|
639 |
wp_die( esc_html__( 'File not found.', 'download-monitor' ) . ' <a href="' . esc_url( home_url() ) . '">' . esc_html__( 'Go to homepage →', 'download-monitor' ) . '</a>', esc_html__( 'Download Error', 'download-monitor' ), array( 'response' => 404 ) );
|
640 |
}
|
641 |
exit;
|
src/FileManager.php
CHANGED
@@ -467,4 +467,333 @@ class DLM_File_Manager {
|
|
467 |
|
468 |
return $file_path;
|
469 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
470 |
}
|
467 |
|
468 |
return $file_path;
|
469 |
}
|
470 |
+
|
471 |
+
/**
|
472 |
+
* Function to move files from Media Library to the DLM protected folder dlm_uploads.
|
473 |
+
*
|
474 |
+
* @param $post_id
|
475 |
+
*
|
476 |
+
* @return WP_Error
|
477 |
+
* @since 4.7.2
|
478 |
+
*/
|
479 |
+
public function move_file_to_dlm_uploads( $post_id ) {
|
480 |
+
//Move file to dlm_uploads
|
481 |
+
$file = get_post_meta( $post_id, '_wp_attached_file', true );
|
482 |
+
|
483 |
+
if ( 0 === stripos( $file, $this->dlm_upload_dir( '/' ) ) ) {
|
484 |
+
return new WP_Error( 'protected_file_existed', sprintf(
|
485 |
+
__( 'This file is already protected. Please reload your page.', 'download-monitor' ),
|
486 |
+
$file
|
487 |
+
), array( 'status' => 500 ) );
|
488 |
+
}
|
489 |
+
|
490 |
+
$reldir = dirname( $file );
|
491 |
+
|
492 |
+
if ( in_array( $reldir, array( '\\', '/', '.' ), true ) ) {
|
493 |
+
$reldir = '';
|
494 |
+
}
|
495 |
+
|
496 |
+
$protected_dir = path_join( $this->dlm_upload_dir(), $reldir );
|
497 |
+
return $this->move_attachment_to_protected( $post_id, $protected_dir );
|
498 |
+
|
499 |
+
}
|
500 |
+
|
501 |
+
/**
|
502 |
+
* Function to move files back to the Media Library.
|
503 |
+
*
|
504 |
+
* @param $post_id
|
505 |
+
*
|
506 |
+
* @return array|bool|int|WP_Error
|
507 |
+
* @since 4.7.2
|
508 |
+
*/
|
509 |
+
public function move_file_back( $post_id ) {
|
510 |
+
|
511 |
+
$file = get_post_meta( $post_id, '_wp_attached_file', true );
|
512 |
+
|
513 |
+
// check if files are already not in Download Monitor's protected folder
|
514 |
+
if ( 0 !== stripos( $file, $this->dlm_upload_dir( '/' ) ) ) {
|
515 |
+
return true;
|
516 |
+
}
|
517 |
+
|
518 |
+
$protected_dir = ltrim( dirname( $file ), $this->dlm_upload_dir( '/' ) );
|
519 |
+
return $this->move_attachment_to_protected( $post_id, $protected_dir );
|
520 |
+
}
|
521 |
+
|
522 |
+
/**
|
523 |
+
* Download Monitor's upload directory ( dlm_uploads ).
|
524 |
+
*
|
525 |
+
* @param $path
|
526 |
+
* @param $in_url
|
527 |
+
*
|
528 |
+
* @return string
|
529 |
+
* @since 4.7.2
|
530 |
+
*/
|
531 |
+
public function dlm_upload_dir( $path = '', $in_url = false ) {
|
532 |
+
|
533 |
+
$dirpath = $in_url ? '/' : '';
|
534 |
+
$dirpath .= 'dlm_uploads';
|
535 |
+
$dirpath .= $path;
|
536 |
+
|
537 |
+
return $dirpath;
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* Move attachment to protected folder.
|
542 |
+
*
|
543 |
+
* @param $attachment_id
|
544 |
+
* @param $protected_dir
|
545 |
+
* @param $meta_input
|
546 |
+
*
|
547 |
+
* @return array|bool|WP_Error
|
548 |
+
* @since 4.7.2
|
549 |
+
*/
|
550 |
+
public function move_attachment_to_protected( $attachment_id, $protected_dir, $meta_input = [] ) {
|
551 |
+
|
552 |
+
if ( 'attachment' !== get_post_type( $attachment_id ) ) {
|
553 |
+
return new WP_Error( 'not_attachment', sprintf(
|
554 |
+
__( 'The post with ID: %d is not an attachment post type.', 'download-monitor' ),
|
555 |
+
$attachment_id
|
556 |
+
), array( 'status' => 404 ) );
|
557 |
+
}
|
558 |
+
|
559 |
+
if ( path_is_absolute( $protected_dir ) ) {
|
560 |
+
return new WP_Error( 'protected_dir_not_relative', sprintf(
|
561 |
+
__( 'The new path provided: %s is absolute. The new path must be a path relative to the WP uploads directory.', 'download-monitor' ),
|
562 |
+
$protected_dir
|
563 |
+
), array( 'status' => 404 ) );
|
564 |
+
}
|
565 |
+
|
566 |
+
$meta = empty( $meta_input ) ? wp_get_attachment_metadata( $attachment_id ) : $meta_input;
|
567 |
+
$meta = is_array( $meta ) ? $meta : array();
|
568 |
+
|
569 |
+
$file = get_post_meta( $attachment_id, '_wp_attached_file', true );
|
570 |
+
$backups = get_post_meta( $attachment_id, '_wp_attachment_backup_sizes', true );
|
571 |
+
$upload_dir = wp_upload_dir();
|
572 |
+
$old_dir = dirname( $file );
|
573 |
+
|
574 |
+
if ( in_array( $old_dir, array( '\\', '/', '.' ), true ) ) {
|
575 |
+
$old_dir = '';
|
576 |
+
}
|
577 |
+
|
578 |
+
if ( $protected_dir === $old_dir ) {
|
579 |
+
return true;
|
580 |
+
}
|
581 |
+
|
582 |
+
$old_full_path = path_join( $upload_dir['basedir'], $old_dir );
|
583 |
+
$protected_full_path = path_join( $upload_dir['basedir'], $protected_dir );
|
584 |
+
|
585 |
+
if ( ! wp_mkdir_p( $protected_full_path ) ) {
|
586 |
+
return new WP_Error( 'wp_mkdir_p_error', sprintf(
|
587 |
+
__( 'There was an error making or verifying the directory at: %s', 'download-monitor' ),
|
588 |
+
$protected_full_path
|
589 |
+
), array( 'status' => 500 ) );
|
590 |
+
}
|
591 |
+
|
592 |
+
//Get all files
|
593 |
+
$sizes = array();
|
594 |
+
|
595 |
+
if ( array_key_exists( 'sizes', $meta ) ) {
|
596 |
+
$sizes = $this->get_files_from_meta( $meta['sizes'] );
|
597 |
+
}
|
598 |
+
|
599 |
+
$backup_sizes = $this->get_files_from_meta( $backups );
|
600 |
+
$old_basenames = $new_basenames = array_merge(
|
601 |
+
array( wp_basename( $file ) ),
|
602 |
+
$sizes,
|
603 |
+
$backup_sizes
|
604 |
+
);
|
605 |
+
$orig_basename = wp_basename( $file );
|
606 |
+
|
607 |
+
if ( is_array( $backups ) && isset( $backups['full-orig'] ) ) {
|
608 |
+
$orig_basename = $backups['full-orig']['file'];
|
609 |
+
}
|
610 |
+
|
611 |
+
$orig_filename = pathinfo( $orig_basename );
|
612 |
+
$orig_filename = $orig_filename['filename'];
|
613 |
+
|
614 |
+
$result = $this->resolve_name_conflict( $new_basenames, $protected_full_path, $orig_filename );
|
615 |
+
$new_basenames = $result['new_basenames'];
|
616 |
+
|
617 |
+
$this->rename_files( $old_basenames, $new_basenames, $old_full_path, $protected_full_path );
|
618 |
+
|
619 |
+
$base_file_name = 0;
|
620 |
+
|
621 |
+
$new_attached_file = path_join( $protected_dir, $new_basenames[0] );
|
622 |
+
if ( array_key_exists( 'file', $meta ) ) {
|
623 |
+
$meta['file'] = $new_attached_file;
|
624 |
+
}
|
625 |
+
update_post_meta( $attachment_id, '_wp_attached_file', $new_attached_file );
|
626 |
+
|
627 |
+
if ( $new_basenames[ $base_file_name ] != $old_basenames[ $base_file_name ] ) {
|
628 |
+
$pattern = $result['pattern'];
|
629 |
+
$replace = $result['replace'];
|
630 |
+
$separator = "#";
|
631 |
+
$orig_basename = ltrim(
|
632 |
+
str_replace( $pattern, $replace, $separator . $orig_basename ),
|
633 |
+
$separator
|
634 |
+
);
|
635 |
+
$meta = $this->update_meta_sizes_file( $meta, $new_basenames );
|
636 |
+
$this->update_backup_files( $attachment_id, $backups, $new_basenames );
|
637 |
+
}
|
638 |
+
|
639 |
+
update_post_meta( $attachment_id, '_wp_attachment_metadata', $meta );
|
640 |
+
$guid = path_join( $protected_full_path, $orig_basename );
|
641 |
+
wp_update_post( array( 'ID' => $attachment_id, 'guid' => $guid ) );
|
642 |
+
|
643 |
+
return empty( $meta_input ) ? true : $meta;
|
644 |
+
}
|
645 |
+
|
646 |
+
/**
|
647 |
+
* Get files from meta.
|
648 |
+
*
|
649 |
+
* @param $input
|
650 |
+
*
|
651 |
+
* @return array
|
652 |
+
* @since 4.7.2
|
653 |
+
*/
|
654 |
+
public function get_files_from_meta( $input ) {
|
655 |
+
|
656 |
+
$files = array();
|
657 |
+
if ( is_array( $input ) ) {
|
658 |
+
foreach ( $input as $size ) {
|
659 |
+
$files[] = $size['file'];
|
660 |
+
}
|
661 |
+
}
|
662 |
+
|
663 |
+
return $files;
|
664 |
+
}
|
665 |
+
|
666 |
+
/**
|
667 |
+
* Resolve name conflict.
|
668 |
+
*
|
669 |
+
* @param $new_basenames
|
670 |
+
* @param $protected_full_path
|
671 |
+
* @param $orig_file_name
|
672 |
+
*
|
673 |
+
* @return array
|
674 |
+
* @since 4.7.2
|
675 |
+
*/
|
676 |
+
public function resolve_name_conflict( $new_basenames, $protected_full_path, $orig_file_name ) {
|
677 |
+
|
678 |
+
$conflict = true;
|
679 |
+
$number = 1;
|
680 |
+
$separator = "#";
|
681 |
+
$med_filename = $orig_file_name;
|
682 |
+
$pattern = "";
|
683 |
+
$replace = "";
|
684 |
+
|
685 |
+
while ( $conflict ) {
|
686 |
+
$conflict = false;
|
687 |
+
foreach ( $new_basenames as $basename ) {
|
688 |
+
if ( is_file( path_join( $protected_full_path, $basename ) ) ) {
|
689 |
+
$conflict = true;
|
690 |
+
break;
|
691 |
+
}
|
692 |
+
}
|
693 |
+
|
694 |
+
if ( $conflict ) {
|
695 |
+
$new_filename = "$orig_file_name-$number";
|
696 |
+
$number ++;
|
697 |
+
$pattern = "$separator$med_filename";
|
698 |
+
$replace = "$separator$new_filename";
|
699 |
+
$new_basenames = explode(
|
700 |
+
$separator,
|
701 |
+
ltrim(
|
702 |
+
str_replace( $pattern, $replace, $separator . implode( $separator, $new_basenames ) ),
|
703 |
+
$separator
|
704 |
+
)
|
705 |
+
);
|
706 |
+
|
707 |
+
}
|
708 |
+
}
|
709 |
+
|
710 |
+
return array(
|
711 |
+
'new_basenames' => $new_basenames,
|
712 |
+
'pattern' => $pattern,
|
713 |
+
'replace' => $replace
|
714 |
+
);
|
715 |
+
}
|
716 |
+
|
717 |
+
/**
|
718 |
+
* Rename files.
|
719 |
+
*
|
720 |
+
* @param $old_basenames
|
721 |
+
* @param $new_basenames
|
722 |
+
* @param $old_dir
|
723 |
+
* @param $protected_dir
|
724 |
+
*
|
725 |
+
* @return void|WP_Error
|
726 |
+
* @since 4.7.2
|
727 |
+
*/
|
728 |
+
public function rename_files( $old_basenames, $new_basenames, $old_dir, $protected_dir ) {
|
729 |
+
|
730 |
+
$unique_old_basenames = array_values( array_unique( $old_basenames ) );
|
731 |
+
$unique_new_basenames = array_values( array_unique( $new_basenames ) );
|
732 |
+
$i = count( $unique_old_basenames );
|
733 |
+
|
734 |
+
while ( $i -- ) {
|
735 |
+
$old_fullpath = path_join( $old_dir, $unique_old_basenames[ $i ] );
|
736 |
+
$new_fullpath = path_join( $protected_dir, $unique_new_basenames[ $i ] );
|
737 |
+
if ( is_file( $old_fullpath ) ) {
|
738 |
+
rename( $old_fullpath, $new_fullpath );
|
739 |
+
|
740 |
+
if ( ! is_file( $new_fullpath ) ) {
|
741 |
+
return new WP_Error(
|
742 |
+
'rename_failed',
|
743 |
+
sprintf(
|
744 |
+
__( 'Rename failed when trying to move file from: %s, to: %s', 'download-monitor' ),
|
745 |
+
$old_fullpath,
|
746 |
+
$new_fullpath
|
747 |
+
)
|
748 |
+
);
|
749 |
+
}
|
750 |
+
}
|
751 |
+
}
|
752 |
+
}
|
753 |
+
|
754 |
+
/**
|
755 |
+
* Update meta sizes file.
|
756 |
+
*
|
757 |
+
* @param $meta
|
758 |
+
* @param $new_basenames
|
759 |
+
*
|
760 |
+
* @return array
|
761 |
+
* @since 4.7.2
|
762 |
+
*/
|
763 |
+
public function update_meta_sizes_file( $meta, $new_basenames ) {
|
764 |
+
|
765 |
+
if ( is_array( $meta['sizes'] ) ) {
|
766 |
+
$i = 0;
|
767 |
+
|
768 |
+
foreach ( $meta['sizes'] as $size => $data ) {
|
769 |
+
$meta['sizes'][ $size ]['file'] = $new_basenames[ ++ $i ];
|
770 |
+
}
|
771 |
+
}
|
772 |
+
|
773 |
+
return $meta;
|
774 |
+
}
|
775 |
+
|
776 |
+
/**
|
777 |
+
* Update backup files.
|
778 |
+
*
|
779 |
+
* @param $attachment_id
|
780 |
+
* @param $backups
|
781 |
+
* @param $new_basenames
|
782 |
+
*
|
783 |
+
* @return void
|
784 |
+
* @since 4.7.2
|
785 |
+
*/
|
786 |
+
public function update_backup_files( $attachment_id, $backups, $new_basenames ) {
|
787 |
+
|
788 |
+
if ( is_array( $backups ) ) {
|
789 |
+
$i = 0;
|
790 |
+
$l = count( $backups );
|
791 |
+
$new_backup_sizes = array_slice( $new_basenames, - $l, $l );
|
792 |
+
|
793 |
+
foreach ( $backups as $size => $data ) {
|
794 |
+
$backups[ $size ]['file'] = $new_backup_sizes[ $i ++ ];
|
795 |
+
}
|
796 |
+
update_post_meta( $attachment_id, '_wp_attachment_backup_sizes', $backups );
|
797 |
+
}
|
798 |
+
}
|
799 |
}
|
src/Gutenberg.php
CHANGED
@@ -114,6 +114,11 @@ class DLM_Gutenberg {
|
|
114 |
}
|
115 |
|
116 |
$template_handler = new DLM_Template_Handler();
|
|
|
|
|
|
|
|
|
|
|
117 |
|
118 |
// do the output
|
119 |
ob_start();
|
114 |
}
|
115 |
|
116 |
$template_handler = new DLM_Template_Handler();
|
117 |
+
// enqueue style only on shortcode use
|
118 |
+
wp_enqueue_style( 'dlm-frontend' );
|
119 |
+
|
120 |
+
// Action to allow the adition of extra scripts and code related to the shortcode
|
121 |
+
do_action( 'dlm_download_shortcode_scripts' );
|
122 |
|
123 |
// do the output
|
124 |
ob_start();
|
src/Logs/LogItem.php
CHANGED
@@ -114,7 +114,7 @@ class DLM_Log_Item {
|
|
114 |
public function set_current_url( $current_url ) {
|
115 |
|
116 |
if ( get_option( 'permalink_structure' ) ) {
|
117 |
-
$current_url = wp_parse_url( $current_url )['path'];
|
118 |
} else {
|
119 |
$current_url = '/' . wp_parse_url( $current_url )['query'];
|
120 |
}
|
114 |
public function set_current_url( $current_url ) {
|
115 |
|
116 |
if ( get_option( 'permalink_structure' ) ) {
|
117 |
+
$current_url = wp_parse_url( $current_url )['path'] . '?' . wp_parse_url( $current_url )['query'];
|
118 |
} else {
|
119 |
$current_url = '/' . wp_parse_url( $current_url )['query'];
|
120 |
}
|
src/PostTypeManager.php
CHANGED
@@ -69,7 +69,7 @@ class DLM_Post_Type_Manager {
|
|
69 |
'show_in_nav_menus' => false,
|
70 |
'menu_position' => 35,
|
71 |
'show_in_rest' => true,
|
72 |
-
'menu_icon' => 'data:image/svg+xml;base64,
|
73 |
) )
|
74 |
);
|
75 |
|
69 |
'show_in_nav_menus' => false,
|
70 |
'menu_position' => 35,
|
71 |
'show_in_rest' => true,
|
72 |
+
'menu_icon' => 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA1IiBoZWlnaHQ9IjEwNSIgdmlld0JveD0iMCAwIDEwNSAxMDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01Mi41IDAuMDAwNTk5Njc0QzM4LjU3NTYgMC4wMDA1OTk2NzQgMjUuMjIxOSA1LjUzMjAzIDE1LjM3NzYgMTUuMzc4MUM1LjUzMTQ2IDI1LjIyMjkgMCAzOC41NzY2IDAgNTIuNTAwM0MwIDY2LjQyNCA1LjUzMTQ2IDc5Ljc3ODMgMTUuMzc3NiA4OS42MjI1QzI1LjIyMjUgOTkuNDY4NiAzOC41NzYyIDEwNSA1Mi41IDEwNUM2Ni40MjM4IDEwNSA3OS43NzgxIDk5LjQ2ODYgODkuNjIyNCA4OS42MjI1Qzk5LjQ2ODUgNzkuNzc3NyAxMDUgNjYuNDI0IDEwNSA1Mi41MDAzQzEwNSA0My4yODQ1IDEwMi41NzQgMzQuMjMwOCA5Ny45NjY0IDI2LjI1MDJDOTMuMzU4NyAxOC4yNjk1IDg2LjczMDQgMTEuNjQxNiA3OC43NDk3IDcuMDMzNTRDNzAuNzY5IDIuNDI1ODEgNjEuNzE1MiAwIDUyLjQ5OTQgMEw1Mi41IDAuMDAwNTk5Njc0Wk00MC40Nzc3IDM4LjI3MThMNDcuMjQ5OSA0NS4wOTY5VjI2LjI0OTZINTcuNzUwMVY0NS4wOTY5TDY0LjUyMjMgMzguMzI0Nkw3MS45MjUyIDQ1LjcyNzVMNTIuNSA2NS4xNTI2TDMzLjAyMiA0NS42NzQ3TDQwLjQ3NzcgMzguMjcxOFpNNzguNzQ5MSA3OC43NTExSDI2LjI0ODVWNjguMjUxSDc4Ljc0OTFWNzguNzUxMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo='
|
73 |
) )
|
74 |
);
|
75 |
|
src/Shop/Util/Assets.php
CHANGED
@@ -21,11 +21,11 @@ class Assets {
|
|
21 |
public function enqueue_assets() {
|
22 |
|
23 |
if ( Services::get()->service( 'page' )->is_cart() ) {
|
24 |
-
wp_enqueue_style( 'dlm-frontend-cart', download_monitor()->get_plugin_url() . '/assets/css/cart.min.css' );
|
25 |
}
|
26 |
|
27 |
if ( Services::get()->service( 'page' )->is_checkout() ) {
|
28 |
-
wp_enqueue_style( 'dlm-frontend-checkout', download_monitor()->get_plugin_url() . '/assets/css/checkout.min.css' );
|
29 |
|
30 |
wp_enqueue_script(
|
31 |
'dlm-frontend-checkout-js',
|
21 |
public function enqueue_assets() {
|
22 |
|
23 |
if ( Services::get()->service( 'page' )->is_cart() ) {
|
24 |
+
wp_enqueue_style( 'dlm-frontend-cart', download_monitor()->get_plugin_url() . '/assets/css/cart.min.css', array(), DLM_VERSION );
|
25 |
}
|
26 |
|
27 |
if ( Services::get()->service( 'page' )->is_checkout() ) {
|
28 |
+
wp_enqueue_style( 'dlm-frontend-checkout', download_monitor()->get_plugin_url() . '/assets/css/checkout.min.css', array(), DLM_VERSION );
|
29 |
|
30 |
wp_enqueue_script(
|
31 |
'dlm-frontend-checkout-js',
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -76,6 +76,7 @@ return array(
|
|
76 |
'DLM_Log_Item' => $baseDir . '/src/Logs/LogItem.php',
|
77 |
'DLM_Log_Item_Repository' => $baseDir . '/src/Logs/LogItemRepository.php',
|
78 |
'DLM_Logging' => $baseDir . '/src/Logs/Logging.php',
|
|
|
79 |
'DLM_Post_Type_Manager' => $baseDir . '/src/PostTypeManager.php',
|
80 |
'DLM_Product' => $baseDir . '/src/Product/Product.php',
|
81 |
'DLM_Product_Error_Handler' => $baseDir . '/src/Product/ProductErrorHandler.php',
|
76 |
'DLM_Log_Item' => $baseDir . '/src/Logs/LogItem.php',
|
77 |
'DLM_Log_Item_Repository' => $baseDir . '/src/Logs/LogItemRepository.php',
|
78 |
'DLM_Logging' => $baseDir . '/src/Logs/Logging.php',
|
79 |
+
'DLM_Media_Library' => $baseDir . '/src/Admin/class-dlm-media-library.php',
|
80 |
'DLM_Post_Type_Manager' => $baseDir . '/src/PostTypeManager.php',
|
81 |
'DLM_Product' => $baseDir . '/src/Product/Product.php',
|
82 |
'DLM_Product_Error_Handler' => $baseDir . '/src/Product/ProductErrorHandler.php',
|
vendor/composer/autoload_static.php
CHANGED
@@ -91,6 +91,7 @@ class ComposerStaticInit80ce4473100edd20fd6c17775a76ce9a
|
|
91 |
'DLM_Log_Item' => __DIR__ . '/../..' . '/src/Logs/LogItem.php',
|
92 |
'DLM_Log_Item_Repository' => __DIR__ . '/../..' . '/src/Logs/LogItemRepository.php',
|
93 |
'DLM_Logging' => __DIR__ . '/../..' . '/src/Logs/Logging.php',
|
|
|
94 |
'DLM_Post_Type_Manager' => __DIR__ . '/../..' . '/src/PostTypeManager.php',
|
95 |
'DLM_Product' => __DIR__ . '/../..' . '/src/Product/Product.php',
|
96 |
'DLM_Product_Error_Handler' => __DIR__ . '/../..' . '/src/Product/ProductErrorHandler.php',
|
91 |
'DLM_Log_Item' => __DIR__ . '/../..' . '/src/Logs/LogItem.php',
|
92 |
'DLM_Log_Item_Repository' => __DIR__ . '/../..' . '/src/Logs/LogItemRepository.php',
|
93 |
'DLM_Logging' => __DIR__ . '/../..' . '/src/Logs/Logging.php',
|
94 |
+
'DLM_Media_Library' => __DIR__ . '/../..' . '/src/Admin/class-dlm-media-library.php',
|
95 |
'DLM_Post_Type_Manager' => __DIR__ . '/../..' . '/src/PostTypeManager.php',
|
96 |
'DLM_Product' => __DIR__ . '/../..' . '/src/Product/Product.php',
|
97 |
'DLM_Product_Error_Handler' => __DIR__ . '/../..' . '/src/Product/ProductErrorHandler.php',
|