Version Description
- Plugin is now initiated at plugins_loaded.
- Implemented auto loader.
- Classes are no longer initiated at bottom of class file but whenever an object is needed.
- Code standards corrections.
- Introduced Template_Handler. Loading of template parts should be done through this class.
- Removed $GLOBALS['dlm_logging'] global.
- Removed $GLOBALS['DLM_Download_Handler'] global.
- Removed internal use of $download_monitor global. # Moved all inline JavaScript to separate JavaScript files.
- Moved all install related code to installer class.
- Moved main plugin class to it's own file.
- Deprecated 'dlm_create_log' function.
- Redone extensions page.
- Fixed a bug in shortcode download where orderby=download_count wasn't working.
- Fixed a bug where downloads didn't work with default WP permalink structure.
- Delete dlm_file_version_ids_ transient on save.
- Added dlm_download_headers filter.
- Added dlm_get_template_part filter.
Download this release
Release Info
Developer | barrykooij |
Plugin | Download Monitor |
Version | 1.6.0 |
Comparing to | |
See all releases |
Code changes from version 1.5.1 to 1.6.0
- Gruntfile.js +0 -129
- assets/css/admin.css +1 -1
- assets/css/admin.less +597 -570
- assets/css/dashboard.css +1 -1
- assets/css/dashboard.less +47 -47
- assets/css/frontend.less +149 -135
- assets/css/menu.less +18 -18
- assets/images/cross.png +0 -0
- assets/images/download_count_head.png +0 -0
- assets/images/downloads-icon.gif +0 -0
- assets/images/featured_head.png +0 -0
- assets/images/folder-horizontal-open.png +0 -0
- assets/images/folder-horizontal.png +0 -0
- assets/images/media-button-download.gif +0 -0
- assets/images/member_head.png +0 -0
- assets/images/menu_icon.png +0 -0
- assets/images/on.png +0 -0
- assets/images/redirect_head.png +0 -0
- assets/js/edit-download.js +235 -0
- assets/js/edit-download.min.js +1 -0
- assets/js/edit-post.js +9 -0
- assets/js/edit-post.min.js +1 -0
- assets/js/extensions.js +37 -0
- assets/js/extensions.min.js +1 -0
- assets/js/jqueryFileTree/jqueryFileTree.min.js +0 -33
- assets/js/settings.js +18 -0
- assets/js/settings.min.js +1 -0
- download-monitor.php +55 -663
- includes/admin/class-dlm-addons.php +0 -59
- includes/admin/class-dlm-admin-cpt.php +140 -102
- includes/admin/class-dlm-admin-dashboard.php +63 -56
- includes/admin/class-dlm-admin-extensions.php +169 -0
- includes/admin/class-dlm-admin-media-browser.php +40 -35
- includes/admin/{class-dlm-admin-insert.php → class-dlm-admin-media-insert.php} +132 -121
- includes/admin/class-dlm-admin-scripts.php +106 -0
- includes/admin/class-dlm-admin-writepanels.php +93 -273
- includes/admin/class-dlm-admin.php +260 -235
- includes/admin/class-dlm-category-walker.php +12 -7
- includes/admin/class-dlm-logging-list-table.php +112 -92
- includes/admin/html-downloadable-file-version.php +63 -47
- includes/admin/uaparser/lib/json/jsonwrapper.php +4 -2
- includes/class-dlm-ajax-handler.php +73 -15
- includes/class-dlm-autoloader.php +61 -0
- includes/class-dlm-debug-logger.php +54 -0
- includes/class-dlm-download-handler.php +120 -83
- includes/class-dlm-download-version.php +25 -13
- includes/class-dlm-download.php +114 -89
- includes/class-dlm-file-manager.php +221 -0
- includes/class-dlm-installer.php +134 -0
- includes/class-dlm-logging.php +16 -22
- includes/class-dlm-post-type-manager.php +84 -0
- includes/class-dlm-shortcodes.php +109 -93
- includes/class-dlm-taxonomy-manager.php +85 -0
- includes/class-dlm-template-handler.php +67 -0
- includes/class-wp-dlm.php +426 -0
- includes/deprecated.php +37 -0
- includes/download-functions.php +2 -1
- includes/product/class-dlm-product-license.php +110 -0
- includes/product/class-dlm-product-manager.php +107 -0
- includes/product/class-dlm-product.php +346 -0
- includes/widgets/class-dlm-widget-downloads.php +97 -57
- includes/widgets/class-dlm-widget-manager.php +23 -0
- languages/download-monitor-de_DE.mo +0 -0
- languages/download-monitor-de_DE.po +169 -129
- package.json +0 -19
- readme.txt +40 -15
- templates/content-download-box.php +5 -2
- templates/content-download-button.php +4 -4
- templates/content-download-filename.php +7 -2
- templates/content-download-title.php +3 -1
- templates/content-download-version-list.php +12 -8
- templates/content-download.php +6 -2
- templates/pagination.php +16 -13
Gruntfile.js
DELETED
@@ -1,129 +0,0 @@
|
|
1 |
-
/* jshint node:true */
|
2 |
-
module.exports = function( grunt ){
|
3 |
-
'use strict';
|
4 |
-
|
5 |
-
grunt.initConfig({
|
6 |
-
// setting folder templates
|
7 |
-
dirs: {
|
8 |
-
css: 'assets/css',
|
9 |
-
images: 'assets/images',
|
10 |
-
js: 'assets/js'
|
11 |
-
},
|
12 |
-
|
13 |
-
// Compile all .less files.
|
14 |
-
less: {
|
15 |
-
compile: {
|
16 |
-
options: {
|
17 |
-
// These paths are searched for @imports
|
18 |
-
paths: ['<%= dirs.css %>/']
|
19 |
-
},
|
20 |
-
files: [{
|
21 |
-
expand: true,
|
22 |
-
cwd: '<%= dirs.css %>/',
|
23 |
-
src: [
|
24 |
-
'*.less',
|
25 |
-
'!icons.less',
|
26 |
-
'!mixins.less'
|
27 |
-
],
|
28 |
-
dest: '<%= dirs.css %>/',
|
29 |
-
ext: '.css'
|
30 |
-
}]
|
31 |
-
}
|
32 |
-
},
|
33 |
-
|
34 |
-
// Minify all .css files.
|
35 |
-
cssmin: {
|
36 |
-
minify: {
|
37 |
-
expand: true,
|
38 |
-
cwd: '<%= dirs.css %>/',
|
39 |
-
src: ['*.css'],
|
40 |
-
dest: '<%= dirs.css %>/',
|
41 |
-
ext: '.css'
|
42 |
-
}
|
43 |
-
},
|
44 |
-
|
45 |
-
// Minify .js files.
|
46 |
-
uglify: {
|
47 |
-
options: {
|
48 |
-
preserveComments: 'some'
|
49 |
-
},
|
50 |
-
frontend: {
|
51 |
-
files: [{
|
52 |
-
expand: true,
|
53 |
-
cwd: '<%= dirs.js %>',
|
54 |
-
src: [
|
55 |
-
'*.js',
|
56 |
-
'!*.min.js'
|
57 |
-
],
|
58 |
-
dest: '<%= dirs.js %>',
|
59 |
-
ext: '.min.js'
|
60 |
-
}]
|
61 |
-
},
|
62 |
-
},
|
63 |
-
|
64 |
-
// Watch changes for assets
|
65 |
-
watch: {
|
66 |
-
less: {
|
67 |
-
files: ['<%= dirs.css %>/*.less'],
|
68 |
-
tasks: ['less', 'cssmin'],
|
69 |
-
},
|
70 |
-
js: {
|
71 |
-
files: [
|
72 |
-
'<%= dirs.js %>/*js',
|
73 |
-
'!<%= dirs.js %>/*.min.js',
|
74 |
-
],
|
75 |
-
tasks: ['uglify']
|
76 |
-
}
|
77 |
-
},
|
78 |
-
|
79 |
-
shell: {
|
80 |
-
options: {
|
81 |
-
stdout: true,
|
82 |
-
stderr: true
|
83 |
-
},
|
84 |
-
txpull: {
|
85 |
-
command: [
|
86 |
-
'tx pull -a -f',
|
87 |
-
].join( '&&' )
|
88 |
-
},
|
89 |
-
generatemos: {
|
90 |
-
command: [
|
91 |
-
'cd languages',
|
92 |
-
'for i in *.po; do msgfmt $i -o ${i%%.*}.mo; done'
|
93 |
-
].join( '&&' )
|
94 |
-
},
|
95 |
-
generatepot: {
|
96 |
-
command: [
|
97 |
-
'makepot'
|
98 |
-
].join( '&&' )
|
99 |
-
}
|
100 |
-
},
|
101 |
-
|
102 |
-
});
|
103 |
-
|
104 |
-
// Load NPM tasks to be used here
|
105 |
-
grunt.loadNpmTasks( 'grunt-shell' );
|
106 |
-
grunt.loadNpmTasks( 'grunt-contrib-less' );
|
107 |
-
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
|
108 |
-
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
|
109 |
-
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
110 |
-
|
111 |
-
// Register tasks
|
112 |
-
grunt.registerTask( 'default', [
|
113 |
-
'less',
|
114 |
-
'cssmin',
|
115 |
-
'uglify'
|
116 |
-
]);
|
117 |
-
|
118 |
-
// Just an alias for pot file generation
|
119 |
-
grunt.registerTask( 'pot', [
|
120 |
-
'shell:generatepot'
|
121 |
-
]);
|
122 |
-
|
123 |
-
grunt.registerTask( 'dev', [
|
124 |
-
'default',
|
125 |
-
'shell:txpull',
|
126 |
-
'shell:generatemos'
|
127 |
-
]);
|
128 |
-
|
129 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/css/admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#dlm_logs td{padding:7px;vertical-align:middle}#dlm_logs .column-status{width:4em}#dlm_logs td.column-status{font-size:10px;vertical-align:middle;text-align:center}#dlm_logs td.column-status span{color:#fff;font-weight:400;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;height:16px;line-height:16px;width:16px;display:inline-block}#dlm_logs td.column-status .failed{background-color:#df9d1d}#dlm_logs td.column-status .redirected{background-color:#74a721}#dlm_logs td.column-status .completed{background-color:#1c769b}#dlm_logs td.column-user_agent,#dlm_logs td.column-user_ip{font-family:monospace;font-weight:400}#dlm_logs span.description{font-weight:400}#dlm_logs .column-download,#dlm_logs .column-file,#dlm_logs .column-user,#dlm_logs .column-user_ua{width:16%!important}#dlm_logs .column-date,#dlm_logs .column-user_ip{width:6%!important}ul.download_monitor_file_browser{list-style:none outside;margin:0;border:1px solid #ddd;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:#f9f9f9;padding:5px;-moz-box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}ul.download_monitor_file_browser li{padding:0;margin:0}ul.download_monitor_file_browser li a{color:#21759B;display:block;padding:4px 0 4px 4px;text-decoration:none}ul.download_monitor_file_browser li a:hover{background-color:#eaf2fa}ul.download_monitor_file_browser li a:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f123";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.folder:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f318";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.filetype-3g2:before,ul.download_monitor_file_browser li a.filetype-3gp:before,ul.download_monitor_file_browser li a.filetype-asf:before,ul.download_monitor_file_browser li a.filetype-asx:before,ul.download_monitor_file_browser li a.filetype-avi:before,ul.download_monitor_file_browser li a.filetype-mov:before,ul.download_monitor_file_browser li a.filetype-mp4:before,ul.download_monitor_file_browser li a.filetype-mpg:before,ul.download_monitor_file_browser li a.filetype-rm:before,ul.download_monitor_file_browser li a.filetype-srt:before,ul.download_monitor_file_browser li a.filetype-vob:before,ul.download_monitor_file_browser li a.filetype-wmv:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f126";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.filetype-aif:before,ul.download_monitor_file_browser li a.filetype-iff:before,ul.download_monitor_file_browser li a.filetype-m3u:before,ul.download_monitor_file_browser li a.filetype-m4a:before,ul.download_monitor_file_browser li a.filetype-mid:before,ul.download_monitor_file_browser li a.filetype-midi:before,ul.download_monitor_file_browser li a.filetype-mp3:before,ul.download_monitor_file_browser li a.filetype-mpa:before,ul.download_monitor_file_browser li a.filetype-ra:before,ul.download_monitor_file_browser li a.filetype-wav:before,ul.download_monitor_file_browser li a.filetype-wma:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f127";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.filetype-ai:before,ul.download_monitor_file_browser li a.filetype-bmp:before,ul.download_monitor_file_browser li a.filetype-dds:before,ul.download_monitor_file_browser li a.filetype-eps:before,ul.download_monitor_file_browser li a.filetype-gif:before,ul.download_monitor_file_browser li a.filetype-ico:before,ul.download_monitor_file_browser li a.filetype-jpeg:before,ul.download_monitor_file_browser li a.filetype-jpg:before,ul.download_monitor_file_browser li a.filetype-png:before,ul.download_monitor_file_browser li a.filetype-ps:before,ul.download_monitor_file_browser li a.filetype-psd:before,ul.download_monitor_file_browser li a.filetype-pspimage:before,ul.download_monitor_file_browser li a.filetype-svg:before,ul.download_monitor_file_browser li a.filetype-tga:before,ul.download_monitor_file_browser li a.filetype-thm:before,ul.download_monitor_file_browser li a.filetype-tif:before,ul.download_monitor_file_browser li a.filetype-yuv:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f128";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li.nofiles{color:#999;font-style:italic;padding:4px 0}ul.download_monitor_file_browser li ul{list-style:none outside;margin:0;padding:0 0 0 28px}ul.download_monitor_file_browser li ul.loading{background:url(../images/ajax-loader.gif) no-repeat 24px 0;height:32px}table.wp-list-table .column-thumb{width:44px;text-align:center;white-space:nowrap}table.wp-list-table .column-dlm_download_cat,table.wp-list-table .column-dlm_download_tag,table.wp-list-table .column-file{width:11%!important}table.wp-list-table .column-file,table.wp-list-table .column-title{width:17%!important}table.wp-list-table .column-download_id,table.wp-list-table .column-version{width:5em}table.wp-list-table th.column-download_count span:first-child,table.wp-list-table th.column-featured span:first-child,table.wp-list-table th.column-members_only span:first-child,table.wp-list-table th.column-redirect_only span:first-child,table.wp-list-table th.column-thumb span:first-child{float:none;display:inline-block;width:1em;height:1em;line-height:1em;padding:2px 0 0;overflow:hidden}table.wp-list-table th.column-download_count .sorting-indicator,table.wp-list-table th.column-featured .sorting-indicator,table.wp-list-table th.column-members_only .sorting-indicator,table.wp-list-table th.column-redirect_only .sorting-indicator,table.wp-list-table th.column-thumb .sorting-indicator{float:right}table.wp-list-table th.column-thumb{width:52px;text-align:center}table.wp-list-table th.column-thumb span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f128";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-download_count{width:5em}table.wp-list-table th.column-download_count span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f346";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-members_only{width:3.5em}table.wp-list-table th.column-members_only span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f338";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-redirect_only{width:3.5em}table.wp-list-table th.column-redirect_only span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f103";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-featured{width:3.5em}table.wp-list-table th.column-featured span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f155";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table td.column-download_count,table.wp-list-table td.column-featured,table.wp-list-table td.column-members_only,table.wp-list-table td.column-redirect_only{text-align:left;padding-left:11px}table.wp-list-table td.column-download_count span.na,table.wp-list-table td.column-featured span.na,table.wp-list-table td.column-members_only span.na,table.wp-list-table td.column-redirect_only span.na{color:#999;width:1em;height:1em;line-height:1em;display:inline-block;overflow:hidden;vertical-align:middle}table.wp-list-table td.column-download_count span.na:before,table.wp-list-table td.column-featured span.na:before,table.wp-list-table td.column-members_only span.na:before,table.wp-list-table td.column-redirect_only span.na:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f460";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table td.column-download_count span.yes,table.wp-list-table td.column-featured span.yes,table.wp-list-table td.column-members_only span.yes,table.wp-list-table td.column-redirect_only span.yes{width:1em;height:1em;line-height:1em;display:inline-block;overflow:hidden;vertical-align:middle}table.wp-list-table td.column-download_count span.yes:before,table.wp-list-table td.column-featured span.yes:before,table.wp-list-table td.column-members_only span.yes:before,table.wp-list-table td.column-redirect_only span.yes:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f147";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table .column-thumb img{padding:2px;margin:0;border:1px solid #dfdfdf;vertical-align:middle;width:32px;height:32px}#download-monitor-file .inside{padding:0;margin:0}#download-monitor-file .dlm-metaboxes-wrapper .close_all,#download-monitor-file .dlm-metaboxes-wrapper .expand_all{float:right;margin-left:1em;line-height:22px;text-decoration:none}#download-monitor-file .dlm-metaboxes-wrapper .expand_all:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f168";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .close_all:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f460";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper p.toolbar{margin:0!important;border-top:1px solid #fff;border-bottom:1px solid #DFDFDF;padding:7px 12px!important;overflow:hidden;zoom:1}#download-monitor-file .dlm-metaboxes-wrapper p.toolbar a.button{float:left;margin:0}#download-monitor-file .dlm-metaboxes-wrapper .fr,#download-monitor-file .dlm-metaboxes-wrapper button.add_attribute,#download-monitor-file .dlm-metaboxes-wrapper button.add_variable_attribute,#download-monitor-file .dlm-metaboxes-wrapper select.attribute_taxonomy{float:right;margin:0 0 0 6px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metaboxes{padding:0 12px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox-sortable-placeholder{border-color:#bbb;background-color:#f5f5f5;margin:9px 0;border-width:1px;border-style:dashed}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox{background:#ececec;border:1px solid #ececec;margin:9px 0!important}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3{margin:0!important;padding:6px!important;font-size:1em!important;overflow:hidden;zoom:1;cursor:move}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 button{float:right}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 strong{font-weight:400;line-height:24px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 select{font-family:sans-serif}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 .handlediv{background-position:6px 5px!important;display:none;height:24px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox:hover h3 .handlediv{display:block}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table{width:100%;position:relative;background:#fff;padding:3px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td{text-align:left;padding:6px;vertical-align:top;border:0;line-height:26px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td label{text-align:left;display:block;line-height:21px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input{float:left;min-width:200px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input,#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td textarea{width:100%;margin:0;display:block;font-size:14px;padding:4px;color:#555}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td textarea{height:7.5em}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td select{width:100%}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.short{width:200px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.checkbox{width:auto;min-width:inherit;vertical-align:middle;display:inline;float:none}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.date-picker-field{width:50%;min-width:inherit;float:none;display:inline}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.hour,#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.minute{width:2em;min-width:inherit;float:none;display:inline}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td.attribute_name{width:200px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .minus,#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .plus{margin-top:6px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .fl{float:left}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .fr{float:right}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox:first-child h3{background:#EAF2FA;background-image:linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-o-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-moz-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-webkit-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-ms-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#dae6f2),color-stop(1,#eaf2fa));border-color:#d3deea;color:#21759B}#download-monitor-file .dlm-metaboxes-wrapper .plus:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f132";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .minus:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f460";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .dlm_upload_file:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f317";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .dlm_browse_for_file:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f322";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-options .inside{padding:0;margin:0}#download-monitor-options .form-field-checkbox label{display:inline;padding:0 0 4px}#download-monitor-options .form-field-checkbox input{display:inline-block;width:auto;vertical-align:middle}#download-monitor-options .form-field-checkbox .description{padding:4px 0 0;display:block}#download-monitor-options .access_permissions{margin:0!important;border-top:1px solid #fff;border-bottom:1px solid #DFDFDF;padding:7px 12px!important;overflow:hidden;zoom:1}#download-monitor-options .access_permissions h4{margin:0 0 .5em}#download-monitor-options .access_permissions ul{background:#fff;border:1px solid #dfdfdf;height:110px;overflow:auto;padding:.5em .9em;margin:0}#download-monitor-options p{margin:0!important;border-top:1px solid #fff;border-bottom:1px solid #DFDFDF;padding:7px 12px!important;overflow:hidden;zoom:1}#insert-download{padding:20px}#insert-download .error,#insert-download .updated{margin-left:0;margin-right:0}#insert-download h2{margin-top:0}#insert-download label{margin:0 0 .25em;display:block;font-size:1.1em}#insert-download span.description{display:block}#insert-download input.input{margin:0 0 .25em;display:block;width:100%;font-size:1.1em}#insert-download .add_link{float:right}#insert-download ul.page-numbers{overflow:hidden;zoom:1;margin:0 auto;padding:0;text-align:center}#insert-download ul.page-numbers li{display:inline-block;margin:0;list-style:none outside;line-height:1em}#insert-download ul.page-numbers li a,#insert-download ul.page-numbers li span{text-decoration:none;border:1px solid #ddd;-webkit-border-radius:4px;border-radius:4px;padding:8px;display:block}#insert-download ul.page-numbers li span{border-color:#eee}#insert-download legend{font-weight:700;display:block;margin:0 0 1em}#insert-download fieldset label{display:block;margin:0 0 .5em}.dlm_addons_wrap .items{overflow:hidden}.dlm_addons_wrap .items li{display:inline-block;margin:0 10px 10px 0!important;padding:0;vertical-align:top;width:250px;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;position:relative}.dlm_addons_wrap .items li a{color:inherit;text-decoration:none}.dlm_addons_wrap .items li img{max-width:100%;height:auto;display:block;margin:0;background:#fff}.dlm_addons_wrap .items li h2{margin:0!important;padding:10px 20px!important;line-height:1;background:rgba(255,255,255,.8);color:#000;position:absolute;max-width:280px;top:20px;left:0;font-size:18px;text-shadow:none}.dlm_addons_wrap .items li .third_party{display:none}.dlm_addons_wrap .items li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.dlm_addons_wrap .items li .cost{display:none}
|
1 |
+
#dlm_logs td{padding:7px;vertical-align:middle}#dlm_logs .column-status{width:4em}#dlm_logs td.column-status{font-size:10px;vertical-align:middle;text-align:center}#dlm_logs td.column-status span{color:#fff;font-weight:400;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;height:16px;line-height:16px;width:16px;display:inline-block}#dlm_logs td.column-status .failed{background-color:#df9d1d}#dlm_logs td.column-status .redirected{background-color:#74a721}#dlm_logs td.column-status .completed{background-color:#1c769b}#dlm_logs td.column-user_agent,#dlm_logs td.column-user_ip{font-family:monospace;font-weight:400}#dlm_logs span.description{font-weight:400}#dlm_logs .column-download,#dlm_logs .column-file,#dlm_logs .column-user,#dlm_logs .column-user_ua{width:16%!important}#dlm_logs .column-date,#dlm_logs .column-user_ip{width:6%!important}ul.download_monitor_file_browser{list-style:none outside;margin:0;border:1px solid #ddd;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:#f9f9f9;padding:5px;-moz-box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}ul.download_monitor_file_browser li{padding:0;margin:0}ul.download_monitor_file_browser li a{color:#21759B;display:block;padding:4px 0 4px 4px;text-decoration:none}ul.download_monitor_file_browser li a:hover{background-color:#eaf2fa}ul.download_monitor_file_browser li a:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f123";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.folder:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f318";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.filetype-3g2:before,ul.download_monitor_file_browser li a.filetype-3gp:before,ul.download_monitor_file_browser li a.filetype-asf:before,ul.download_monitor_file_browser li a.filetype-asx:before,ul.download_monitor_file_browser li a.filetype-avi:before,ul.download_monitor_file_browser li a.filetype-mov:before,ul.download_monitor_file_browser li a.filetype-mp4:before,ul.download_monitor_file_browser li a.filetype-mpg:before,ul.download_monitor_file_browser li a.filetype-rm:before,ul.download_monitor_file_browser li a.filetype-srt:before,ul.download_monitor_file_browser li a.filetype-vob:before,ul.download_monitor_file_browser li a.filetype-wmv:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f126";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.filetype-aif:before,ul.download_monitor_file_browser li a.filetype-iff:before,ul.download_monitor_file_browser li a.filetype-m3u:before,ul.download_monitor_file_browser li a.filetype-m4a:before,ul.download_monitor_file_browser li a.filetype-mid:before,ul.download_monitor_file_browser li a.filetype-midi:before,ul.download_monitor_file_browser li a.filetype-mp3:before,ul.download_monitor_file_browser li a.filetype-mpa:before,ul.download_monitor_file_browser li a.filetype-ra:before,ul.download_monitor_file_browser li a.filetype-wav:before,ul.download_monitor_file_browser li a.filetype-wma:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f127";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li a.filetype-ai:before,ul.download_monitor_file_browser li a.filetype-bmp:before,ul.download_monitor_file_browser li a.filetype-dds:before,ul.download_monitor_file_browser li a.filetype-eps:before,ul.download_monitor_file_browser li a.filetype-gif:before,ul.download_monitor_file_browser li a.filetype-ico:before,ul.download_monitor_file_browser li a.filetype-jpeg:before,ul.download_monitor_file_browser li a.filetype-jpg:before,ul.download_monitor_file_browser li a.filetype-png:before,ul.download_monitor_file_browser li a.filetype-ps:before,ul.download_monitor_file_browser li a.filetype-psd:before,ul.download_monitor_file_browser li a.filetype-pspimage:before,ul.download_monitor_file_browser li a.filetype-svg:before,ul.download_monitor_file_browser li a.filetype-tga:before,ul.download_monitor_file_browser li a.filetype-thm:before,ul.download_monitor_file_browser li a.filetype-tif:before,ul.download_monitor_file_browser li a.filetype-yuv:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f128";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}ul.download_monitor_file_browser li.nofiles{color:#999;font-style:italic;padding:4px 0}ul.download_monitor_file_browser li ul{list-style:none outside;margin:0;padding:0 0 0 28px}ul.download_monitor_file_browser li ul.loading{background:url(../images/ajax-loader.gif) no-repeat 24px 0;height:32px}table.wp-list-table .column-thumb{width:44px;text-align:center;white-space:nowrap}table.wp-list-table .column-dlm_download_cat,table.wp-list-table .column-dlm_download_tag,table.wp-list-table .column-file{width:11%!important}table.wp-list-table .column-file,table.wp-list-table .column-title{width:17%!important}table.wp-list-table .column-download_id,table.wp-list-table .column-version{width:5em}table.wp-list-table th.column-download_count span:first-child,table.wp-list-table th.column-featured span:first-child,table.wp-list-table th.column-members_only span:first-child,table.wp-list-table th.column-redirect_only span:first-child,table.wp-list-table th.column-thumb span:first-child{float:none;display:inline-block;width:1em;height:1em;line-height:1em;padding:2px 0 0;overflow:hidden}table.wp-list-table th.column-download_count .sorting-indicator,table.wp-list-table th.column-featured .sorting-indicator,table.wp-list-table th.column-members_only .sorting-indicator,table.wp-list-table th.column-redirect_only .sorting-indicator,table.wp-list-table th.column-thumb .sorting-indicator{float:right}table.wp-list-table th.column-thumb{width:52px;text-align:center}table.wp-list-table th.column-thumb span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f128";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-download_count{width:5em}table.wp-list-table th.column-download_count span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f346";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-members_only{width:3.5em}table.wp-list-table th.column-members_only span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f338";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-redirect_only{width:3.5em}table.wp-list-table th.column-redirect_only span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f103";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table th.column-featured{width:3.5em}table.wp-list-table th.column-featured span:first-child:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f155";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table td.column-download_count,table.wp-list-table td.column-featured,table.wp-list-table td.column-members_only,table.wp-list-table td.column-redirect_only{text-align:left;padding-left:11px}table.wp-list-table td.column-download_count span.na,table.wp-list-table td.column-featured span.na,table.wp-list-table td.column-members_only span.na,table.wp-list-table td.column-redirect_only span.na{color:#999;width:1em;height:1em;line-height:1em;display:inline-block;overflow:hidden;vertical-align:middle}table.wp-list-table td.column-download_count span.na:before,table.wp-list-table td.column-featured span.na:before,table.wp-list-table td.column-members_only span.na:before,table.wp-list-table td.column-redirect_only span.na:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f460";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table td.column-download_count span.yes,table.wp-list-table td.column-featured span.yes,table.wp-list-table td.column-members_only span.yes,table.wp-list-table td.column-redirect_only span.yes{width:1em;height:1em;line-height:1em;display:inline-block;overflow:hidden;vertical-align:middle}table.wp-list-table td.column-download_count span.yes:before,table.wp-list-table td.column-featured span.yes:before,table.wp-list-table td.column-members_only span.yes:before,table.wp-list-table td.column-redirect_only span.yes:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f147";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}table.wp-list-table .column-thumb img{padding:2px;margin:0;border:1px solid #dfdfdf;vertical-align:middle;width:32px;height:32px}#download-monitor-file .inside{padding:0;margin:0}#download-monitor-file .dlm-metaboxes-wrapper .close_all,#download-monitor-file .dlm-metaboxes-wrapper .expand_all{float:right;margin-left:1em;line-height:22px;text-decoration:none}#download-monitor-file .dlm-metaboxes-wrapper .expand_all:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f168";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .close_all:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f460";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper p.toolbar{margin:0!important;border-top:1px solid #fff;border-bottom:1px solid #DFDFDF;padding:7px 12px!important;overflow:hidden;zoom:1}#download-monitor-file .dlm-metaboxes-wrapper p.toolbar a.button{float:left;margin:0}#download-monitor-file .dlm-metaboxes-wrapper .fr,#download-monitor-file .dlm-metaboxes-wrapper button.add_attribute,#download-monitor-file .dlm-metaboxes-wrapper button.add_variable_attribute,#download-monitor-file .dlm-metaboxes-wrapper select.attribute_taxonomy{float:right;margin:0 0 0 6px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metaboxes{padding:0 12px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox-sortable-placeholder{border-color:#bbb;background-color:#f5f5f5;margin:9px 0;border-width:1px;border-style:dashed}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox{background:#ececec;border:1px solid #ececec;margin:9px 0!important}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3{margin:0!important;padding:6px!important;font-size:1em!important;overflow:hidden;zoom:1;cursor:move}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 button{float:right}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 strong{font-weight:400;line-height:24px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 select{font-family:sans-serif}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox h3 .handlediv{background-position:6px 5px!important;display:none;height:24px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox:hover h3 .handlediv{display:block}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table{width:100%;position:relative;background:#fff;padding:3px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td{text-align:left;padding:6px;vertical-align:top;border:0;line-height:26px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td label{text-align:left;display:block;line-height:21px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input{float:left;min-width:200px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input,#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td textarea{width:100%;margin:0;display:block;font-size:14px;padding:4px;color:#555}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td textarea{height:7.5em}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td select{width:100%}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.short{width:200px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.checkbox{width:auto;min-width:inherit;vertical-align:middle;display:inline;float:none}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.date-picker-field{width:50%;min-width:inherit;float:none;display:inline}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.hour,#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td input.minute{width:2em;min-width:inherit;float:none;display:inline}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table td.attribute_name{width:200px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .minus,#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .plus{margin-top:6px}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .fl{float:left}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox table .fr{float:right}#download-monitor-file .dlm-metaboxes-wrapper .dlm-metabox:first-child h3{background:#EAF2FA;background-image:linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-o-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-moz-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-webkit-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-ms-linear-gradient(bottom,#dae6f2 0,#eaf2fa 100%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#dae6f2),color-stop(1,#eaf2fa));border-color:#d3deea;color:#21759B}#download-monitor-file .dlm-metaboxes-wrapper .plus:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f132";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .minus:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f460";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .dlm_upload_file:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f317";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-file .dlm-metaboxes-wrapper .dlm_browse_for_file:before{font-family:dashicons!important;speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0 4px 0 0;content:"\f322";top:1px;left:-1px;font-size:1em;line-height:inherit;position:relative;vertical-align:top}#download-monitor-options .inside{padding:0;margin:0}#download-monitor-options .form-field-checkbox label{display:inline;padding:0 0 4px}#download-monitor-options .form-field-checkbox input{display:inline-block;width:auto;vertical-align:middle}#download-monitor-options .form-field-checkbox .description{padding:4px 0 0;display:block}#download-monitor-options .access_permissions{margin:0!important;border-top:1px solid #fff;border-bottom:1px solid #DFDFDF;padding:7px 12px!important;overflow:hidden;zoom:1}#download-monitor-options .access_permissions h4{margin:0 0 .5em}#download-monitor-options .access_permissions ul{background:#fff;border:1px solid #dfdfdf;height:110px;overflow:auto;padding:.5em .9em;margin:0}#download-monitor-options p{margin:0!important;border-top:1px solid #fff;border-bottom:1px solid #DFDFDF;padding:7px 12px!important;overflow:hidden;zoom:1}#insert-download{padding:20px}#insert-download .error,#insert-download .updated{margin-left:0;margin-right:0}#insert-download h2{margin-top:0}#insert-download label{margin:0 0 .25em;display:block;font-size:1.1em}#insert-download span.description{display:block}#insert-download input.input{margin:0 0 .25em;display:block;width:100%;font-size:1.1em}#insert-download .add_link{float:right}#insert-download ul.page-numbers{overflow:hidden;zoom:1;margin:0 auto;padding:0;text-align:center}#insert-download ul.page-numbers li{display:inline-block;margin:0;list-style:none outside;line-height:1em}#insert-download ul.page-numbers li a,#insert-download ul.page-numbers li span{text-decoration:none;border:1px solid #ddd;-webkit-border-radius:4px;border-radius:4px;padding:8px;display:block}#insert-download ul.page-numbers li span{border-color:#eee}#insert-download legend{font-weight:700;display:block;margin:0 0 1em}#insert-download fieldset label{display:block;margin:0 0 .5em}.dlm_extensions_wrap h2 a.dlm-reload-button{float:right}.dlm_extensions_wrap .dlm_extensions{padding:15px 0;overflow:hidden}.dlm_extensions_wrap .dlm_extensions div.dlm_extension{cursor:auto!important}.dlm_extensions_wrap .dlm_extensions div.dlm_extension a{color:#444;text-decoration:none}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .dlm_extension_img_wrapper{width:100%;background:#419CCB;text-align:center}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .dlm_extension_img_wrapper img{max-width:100%;margin:0 auto}.dlm_extensions_wrap .dlm_extensions div.dlm_extension h3{padding:0 20px}.dlm_extensions_wrap .dlm_extensions div.dlm_extension p.extension-desc{min-height:85px;padding:0 20px}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .product_footer{padding:0 20px 15px}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .product_footer .loop_price{font-weight:700}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .product_footer .loop_price.sale{color:green}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .product_footer .loop_price.sale strike{color:#444}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .product_footer .loop_more{color:#459ac9;text-decoration:none;font-weight:700;float:right}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .extension_license{padding:0 20px 20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .extension_license p.license-status{padding:5px 0;margin:5px 0;background:red;font-weight:700;font-size:1.2em;color:#fff;text-align:center}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .extension_license p.license-status.active{background:green}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .extension_license input{width:100%;margin:7px 0;padding:7px}.dlm_extensions_wrap .dlm_extensions div.dlm_extension .extension_license a.button-primary{width:100%;margin:5px auto 0;color:#fff;text-align:center}
|
assets/css/admin.less
CHANGED
@@ -1,609 +1,636 @@
|
|
1 |
.iconbefore( @glyph: "\f333" ) {
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
}
|
18 |
|
19 |
/* Logs */
|
20 |
#dlm_logs {
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
}
|
67 |
|
68 |
/* File lists */
|
69 |
ul.download_monitor_file_browser {
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
}
|
141 |
|
142 |
/* Download list */
|
143 |
table.wp-list-table {
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
}
|
249 |
|
250 |
/* Meta boxes */
|
251 |
#download-monitor-file {
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
}
|
436 |
|
437 |
/* Writepanel forms */
|
438 |
#download-monitor-options {
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
}
|
488 |
|
489 |
#insert-download {
|
490 |
-
|
491 |
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
}
|
552 |
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
609 |
}
|
1 |
.iconbefore( @glyph: "\f333" ) {
|
2 |
+
font-family: dashicons !important;
|
3 |
+
speak: none;
|
4 |
+
font-weight: normal;
|
5 |
+
font-variant: normal;
|
6 |
+
text-transform: none;
|
7 |
+
-webkit-font-smoothing: antialiased;
|
8 |
+
-moz-osx-font-smoothing: grayscale;
|
9 |
+
margin: 0 4px 0 0;
|
10 |
+
content: @glyph;
|
11 |
+
top: 1px;
|
12 |
+
left: -1px;
|
13 |
+
font-size: 1em;
|
14 |
+
line-height: inherit;
|
15 |
+
position: relative;
|
16 |
+
vertical-align: top;
|
17 |
}
|
18 |
|
19 |
/* Logs */
|
20 |
#dlm_logs {
|
21 |
+
td {
|
22 |
+
padding: 7px 7px;
|
23 |
+
vertical-align: middle;
|
24 |
+
}
|
25 |
+
.column-status {
|
26 |
+
width: 4em;
|
27 |
+
}
|
28 |
+
td.column-status {
|
29 |
+
font-size: 10px;
|
30 |
+
vertical-align: middle;
|
31 |
+
text-align: center;
|
32 |
+
span {
|
33 |
+
color: #fff;
|
34 |
+
font-weight: normal;
|
35 |
+
-moz-border-radius: 50%;
|
36 |
+
-webkit-border-radius: 50%;
|
37 |
+
border-radius: 50%;
|
38 |
+
height: 16px;
|
39 |
+
line-height: 16px;
|
40 |
+
width: 16px;
|
41 |
+
display: inline-block;
|
42 |
+
}
|
43 |
+
.failed {
|
44 |
+
background-color: #df9d1d;
|
45 |
+
}
|
46 |
+
.redirected {
|
47 |
+
background-color: #74a721;
|
48 |
+
}
|
49 |
+
.completed {
|
50 |
+
background-color: #1c769b;
|
51 |
+
}
|
52 |
+
}
|
53 |
+
td.column-user_ip, td.column-user_agent {
|
54 |
+
font-family: monospace;
|
55 |
+
font-weight: normal;
|
56 |
+
}
|
57 |
+
span.description {
|
58 |
+
font-weight: normal;
|
59 |
+
}
|
60 |
+
.column-download, .column-file, .column-user, .column-user_ua {
|
61 |
+
width: 16% !important;
|
62 |
+
}
|
63 |
+
.column-user_ip, .column-date {
|
64 |
+
width: 6% !important;
|
65 |
+
}
|
66 |
}
|
67 |
|
68 |
/* File lists */
|
69 |
ul.download_monitor_file_browser {
|
70 |
+
list-style: none outside;
|
71 |
+
margin: 0;
|
72 |
+
border: 1px solid #ddd;
|
73 |
+
-moz-border-radius: 3px;
|
74 |
+
-webkit-border-radius: 3px;
|
75 |
+
border-radius: 3px;
|
76 |
+
background: #f9f9f9;
|
77 |
+
padding: 5px 5px;
|
78 |
+
-moz-box-shadow: inset 0 0 0 1px #fff;
|
79 |
+
-webkit-box-shadow: inset 0 0 0 1px #fff;
|
80 |
+
box-shadow: inset 0 0 0 1px #fff;
|
81 |
|
82 |
+
li {
|
83 |
+
padding: 0;
|
84 |
+
margin: 0;
|
85 |
+
a {
|
86 |
+
color: #21759B;
|
87 |
+
display: block;
|
88 |
+
padding: 4px 0 4px 4px;
|
89 |
+
text-decoration: none;
|
90 |
|
91 |
+
&:hover {
|
92 |
+
background-color: #eaf2fa;
|
93 |
+
}
|
94 |
+
&:before {
|
95 |
+
.iconbefore("\f123");
|
96 |
+
}
|
97 |
+
&.folder:before {
|
98 |
+
.iconbefore("\f318");
|
99 |
+
}
|
100 |
|
101 |
+
// Videos
|
102 |
+
&.filetype-mov, &.filetype-avi, &.filetype-3g2, &.filetype-3gp, &.filetype-asf, &.filetype-asx, &.filetype-mp4, &.filetype-mpg, &.filetype-rm, &.filetype-srt, &.filetype-vob, &.filetype-wmv {
|
103 |
+
&:before {
|
104 |
+
.iconbefore("\f126");
|
105 |
+
}
|
106 |
+
}
|
107 |
|
108 |
+
// Audio
|
109 |
+
&.filetype-mp3, &.filetype-aif, &.filetype-iff, &.filetype-m3u, &.filetype-m4a, &.filetype-mid, &.filetype-midi, &.filetype-mpa, &.filetype-ra, &.filetype-wav, &.filetype-wma {
|
110 |
+
&:before {
|
111 |
+
.iconbefore("\f127");
|
112 |
+
}
|
113 |
+
}
|
114 |
|
115 |
+
// Images
|
116 |
+
&.filetype-psd, &.filetype-ai, &.filetype-eps, &.filetype-ps, &.filetype-svg, &.filetype-bmp, &.filetype-dds, &.filetype-gif, &.filetype-jpg, &.filetype-jpeg, &.filetype-png, &.filetype-pspimage, &.filetype-tga, &.filetype-thm, &.filetype-tif, &.filetype-yuv, &.filetype-ico {
|
117 |
+
&:before {
|
118 |
+
.iconbefore("\f128");
|
119 |
+
}
|
120 |
+
}
|
121 |
+
}
|
122 |
|
123 |
+
&.nofiles {
|
124 |
+
color: #999;
|
125 |
+
font-style: italic;
|
126 |
+
padding: 4px 0;
|
127 |
+
}
|
128 |
|
129 |
+
ul {
|
130 |
+
list-style: none outside;
|
131 |
+
margin: 0;
|
132 |
+
padding: 0 0 0 28px;
|
133 |
|
134 |
+
&.loading {
|
135 |
+
background: url(../images/ajax-loader.gif) no-repeat 24px 0;
|
136 |
+
height: 32px;
|
137 |
+
}
|
138 |
+
}
|
139 |
+
}
|
140 |
}
|
141 |
|
142 |
/* Download list */
|
143 |
table.wp-list-table {
|
144 |
+
.column-thumb {
|
145 |
+
width: 44px;
|
146 |
+
text-align: center;
|
147 |
+
white-space: nowrap
|
148 |
+
}
|
149 |
+
.column-dlm_download_cat, .column-dlm_download_tag, .column-file {
|
150 |
+
width: 11% !important;
|
151 |
+
}
|
152 |
+
.column-title, .column-file {
|
153 |
+
width: 17% !important;
|
154 |
+
}
|
155 |
+
.column-download_id, .column-version {
|
156 |
+
width: 5em;
|
157 |
+
}
|
158 |
+
th.column-thumb, th.column-download_count, th.column-members_only, th.column-redirect_only, th.column-featured {
|
159 |
+
span:first-child {
|
160 |
+
float: none;
|
161 |
+
display: inline-block;
|
162 |
+
width: 1em;
|
163 |
+
height: 1em;
|
164 |
+
line-height: 1em;
|
165 |
+
padding: 2px 0 0 0;
|
166 |
+
overflow: hidden;
|
167 |
+
}
|
168 |
+
.sorting-indicator {
|
169 |
+
float: right;
|
170 |
+
}
|
171 |
+
}
|
172 |
+
th.column-thumb {
|
173 |
+
width: 52px;
|
174 |
+
text-align: center;
|
175 |
+
span:first-child {
|
176 |
+
&:before {
|
177 |
+
.iconbefore("\f128");
|
178 |
+
}
|
179 |
+
}
|
180 |
+
}
|
181 |
+
th.column-download_count {
|
182 |
+
width: 5em;
|
183 |
+
span:first-child {
|
184 |
+
&:before {
|
185 |
+
.iconbefore("\f346");
|
186 |
+
}
|
187 |
+
}
|
188 |
+
}
|
189 |
+
th.column-members_only {
|
190 |
+
width: 3.5em;
|
191 |
+
span:first-child {
|
192 |
+
&:before {
|
193 |
+
.iconbefore("\f338");
|
194 |
+
}
|
195 |
+
}
|
196 |
+
}
|
197 |
+
th.column-redirect_only {
|
198 |
+
width: 3.5em;
|
199 |
+
span:first-child {
|
200 |
+
&:before {
|
201 |
+
.iconbefore("\f103");
|
202 |
+
}
|
203 |
+
}
|
204 |
+
}
|
205 |
+
th.column-featured {
|
206 |
+
width: 3.5em;
|
207 |
+
span:first-child {
|
208 |
+
&:before {
|
209 |
+
.iconbefore("\f155");
|
210 |
+
}
|
211 |
+
}
|
212 |
+
}
|
213 |
+
td.column-download_count, td.column-members_only, td.column-redirect_only, td.column-featured {
|
214 |
+
text-align: left;
|
215 |
+
padding-left: 11px;
|
216 |
+
span.na {
|
217 |
+
color: #999;
|
218 |
+
width: 1em;
|
219 |
+
height: 1em;
|
220 |
+
line-height: 1em;
|
221 |
+
display: inline-block;
|
222 |
+
overflow: hidden;
|
223 |
+
vertical-align: middle;
|
224 |
+
&:before {
|
225 |
+
.iconbefore("\f460");
|
226 |
+
}
|
227 |
+
}
|
228 |
+
span.yes {
|
229 |
+
width: 1em;
|
230 |
+
height: 1em;
|
231 |
+
line-height: 1em;
|
232 |
+
display: inline-block;
|
233 |
+
overflow: hidden;
|
234 |
+
vertical-align: middle;
|
235 |
+
&:before {
|
236 |
+
.iconbefore("\f147");
|
237 |
+
}
|
238 |
+
}
|
239 |
+
}
|
240 |
+
.column-thumb img {
|
241 |
+
padding: 2px;
|
242 |
+
margin: 0;
|
243 |
+
border: 1px solid #dfdfdf;
|
244 |
+
vertical-align: middle;
|
245 |
+
width: 32px;
|
246 |
+
height: 32px;
|
247 |
+
}
|
248 |
}
|
249 |
|
250 |
/* Meta boxes */
|
251 |
#download-monitor-file {
|
252 |
+
.inside {
|
253 |
+
padding: 0;
|
254 |
+
margin: 0;
|
255 |
+
}
|
256 |
+
.dlm-metaboxes-wrapper {
|
257 |
+
.expand_all, .close_all {
|
258 |
+
float: right;
|
259 |
+
margin-left: 1em;
|
260 |
+
line-height: 22px;
|
261 |
+
text-decoration: none;
|
262 |
+
}
|
263 |
+
.expand_all {
|
264 |
+
&:before {
|
265 |
+
.iconbefore("\f168");
|
266 |
+
}
|
267 |
+
}
|
268 |
+
.close_all {
|
269 |
+
&:before {
|
270 |
+
.iconbefore("\f460");
|
271 |
+
}
|
272 |
+
}
|
273 |
+
p.toolbar {
|
274 |
+
margin: 0 !important;
|
275 |
+
border-top: 1px solid white;
|
276 |
+
border-bottom: 1px solid #DFDFDF;
|
277 |
+
padding: 7px 12px !important;
|
278 |
+
overflow: hidden;
|
279 |
+
zoom: 1;
|
280 |
|
281 |
+
a.button {
|
282 |
+
float: left;
|
283 |
+
margin: 0;
|
284 |
+
}
|
285 |
+
}
|
286 |
+
select.attribute_taxonomy, button.add_attribute, button.add_variable_attribute, .fr {
|
287 |
+
float: right;
|
288 |
+
margin: 0 0 0 6px;
|
289 |
+
}
|
290 |
+
.dlm-metaboxes {
|
291 |
+
padding: 0 12px 0;
|
292 |
+
}
|
293 |
+
.dlm-metabox-sortable-placeholder {
|
294 |
+
border-color: #bbb;
|
295 |
+
background-color: #f5f5f5;
|
296 |
+
margin: 9px 0;
|
297 |
+
border-width: 1px;
|
298 |
+
border-style: dashed;
|
299 |
+
}
|
300 |
+
.dlm-metabox {
|
301 |
+
background: #ececec;
|
302 |
+
border: 1px solid #ececec;
|
303 |
+
margin: 9px 0 !important;
|
304 |
+
h3 {
|
305 |
+
margin: 0 !important;
|
306 |
+
padding: 6px !important;
|
307 |
+
font-size: 1em !important;
|
308 |
+
overflow: hidden;
|
309 |
+
zoom: 1;
|
310 |
+
cursor: move;
|
311 |
+
button {
|
312 |
+
float: right;
|
313 |
+
}
|
314 |
+
strong {
|
315 |
+
font-weight: normal;
|
316 |
+
line-height: 24px;
|
317 |
+
}
|
318 |
+
select {
|
319 |
+
font-family: sans-serif;
|
320 |
+
}
|
321 |
+
.handlediv {
|
322 |
+
background-position: 6px 5px !important;
|
323 |
+
display: none;
|
324 |
+
height: 24px;
|
325 |
+
}
|
326 |
+
}
|
327 |
+
&:hover h3 .handlediv {
|
328 |
+
display: block;
|
329 |
+
}
|
330 |
+
table {
|
331 |
+
width: 100%;
|
332 |
+
position: relative;
|
333 |
+
background: #fff;
|
334 |
+
padding: 3px;
|
335 |
+
td {
|
336 |
+
text-align: left;
|
337 |
+
padding: 6px 6px;
|
338 |
+
vertical-align: top;
|
339 |
+
border: 0;
|
340 |
+
line-height: 26px;
|
341 |
+
label {
|
342 |
+
text-align: left;
|
343 |
+
display: block;
|
344 |
+
line-height: 21px;
|
345 |
+
}
|
346 |
+
input {
|
347 |
+
float: left;
|
348 |
+
min-width: 200px;
|
349 |
+
}
|
350 |
+
input, textarea {
|
351 |
+
width: 100%;
|
352 |
+
margin: 0;
|
353 |
+
display: block;
|
354 |
+
font-size: 14px;
|
355 |
+
padding: 4px;
|
356 |
+
color: #555;
|
357 |
+
}
|
358 |
+
textarea {
|
359 |
+
height: 7.5em;
|
360 |
+
}
|
361 |
+
select {
|
362 |
+
width: 100%;
|
363 |
+
}
|
364 |
+
input.short {
|
365 |
+
width: 200px;
|
366 |
+
}
|
367 |
+
input.checkbox {
|
368 |
+
width: auto;
|
369 |
+
min-width: inherit;
|
370 |
+
vertical-align: middle;
|
371 |
+
display: inline;
|
372 |
+
float: none;
|
373 |
+
}
|
374 |
+
input.date-picker-field {
|
375 |
+
width: 50%;
|
376 |
+
min-width: inherit;
|
377 |
+
float: none;
|
378 |
+
display: inline;
|
379 |
+
}
|
380 |
+
input.minute, input.hour {
|
381 |
+
width: 2em;
|
382 |
+
min-width: inherit;
|
383 |
+
float: none;
|
384 |
+
display: inline;
|
385 |
+
}
|
386 |
+
}
|
387 |
+
td.attribute_name {
|
388 |
+
width: 200px;
|
389 |
+
}
|
390 |
+
.plus, .minus {
|
391 |
+
margin-top: 6px;
|
392 |
+
}
|
393 |
+
.fl {
|
394 |
+
float: left;
|
395 |
+
}
|
396 |
+
.fr {
|
397 |
+
float: right;
|
398 |
+
}
|
399 |
+
}
|
400 |
+
&:first-child {
|
401 |
+
/* main file */
|
402 |
+
h3 {
|
403 |
+
background: #EAF2FA;
|
404 |
+
background-image: linear-gradient(bottom, rgb(218, 230, 242) 0%, rgb(234, 242, 250) 100%);
|
405 |
+
background-image: -o-linear-gradient(bottom, rgb(218, 230, 242) 0%, rgb(234, 242, 250) 100%);
|
406 |
+
background-image: -moz-linear-gradient(bottom, rgb(218, 230, 242) 0%, rgb(234, 242, 250) 100%);
|
407 |
+
background-image: -webkit-linear-gradient(bottom, rgb(218, 230, 242) 0%, rgb(234, 242, 250) 100%);
|
408 |
+
background-image: -ms-linear-gradient(bottom, rgb(218, 230, 242) 0%, rgb(234, 242, 250) 100%);
|
409 |
|
410 |
+
background-image: -webkit-gradient(
|
411 |
+
linear,
|
412 |
+
left bottom,
|
413 |
+
left top,
|
414 |
+
color-stop(0, rgb(218, 230, 242)),
|
415 |
+
color-stop(1, rgb(234, 242, 250))
|
416 |
+
);
|
417 |
+
border-color: #d3deea;
|
418 |
+
color: #21759B;
|
419 |
+
}
|
420 |
+
}
|
421 |
+
}
|
422 |
+
.plus:before {
|
423 |
+
.iconbefore("\f132");
|
424 |
+
}
|
425 |
+
.minus:before {
|
426 |
+
.iconbefore("\f460");
|
427 |
+
}
|
428 |
+
.dlm_upload_file:before {
|
429 |
+
.iconbefore("\f317");
|
430 |
+
}
|
431 |
+
.dlm_browse_for_file:before {
|
432 |
+
.iconbefore("\f322");
|
433 |
+
}
|
434 |
+
}
|
435 |
}
|
436 |
|
437 |
/* Writepanel forms */
|
438 |
#download-monitor-options {
|
439 |
+
.inside {
|
440 |
+
padding: 0;
|
441 |
+
margin: 0;
|
442 |
+
}
|
443 |
+
.form-field-checkbox {
|
444 |
+
label {
|
445 |
+
display: inline;
|
446 |
+
padding: 0 0 4px;
|
447 |
+
}
|
448 |
+
input {
|
449 |
+
display: inline-block;
|
450 |
+
width: auto;
|
451 |
+
vertical-align: middle;
|
452 |
+
}
|
453 |
+
.description {
|
454 |
+
padding: 4px 0 0 0;
|
455 |
+
display: block;
|
456 |
+
}
|
457 |
+
}
|
458 |
+
.access_permissions {
|
459 |
+
margin: 0 !important;
|
460 |
+
border-top: 1px solid white;
|
461 |
+
border-bottom: 1px solid #DFDFDF;
|
462 |
+
padding: 7px 12px !important;
|
463 |
+
overflow: hidden;
|
464 |
+
zoom: 1;
|
465 |
|
466 |
+
h4 {
|
467 |
+
margin-bottom: .5em;
|
468 |
+
margin: 0 0 .5em;
|
469 |
+
}
|
470 |
+
ul {
|
471 |
+
background: #fff;
|
472 |
+
border: 1px solid #dfdfdf;
|
473 |
+
height: 110px;
|
474 |
+
overflow: auto;
|
475 |
+
padding: .5em .9em;
|
476 |
+
margin: 0;
|
477 |
+
}
|
478 |
+
}
|
479 |
+
p {
|
480 |
+
margin: 0 !important;
|
481 |
+
border-top: 1px solid white;
|
482 |
+
border-bottom: 1px solid #DFDFDF;
|
483 |
+
padding: 7px 12px !important;
|
484 |
+
overflow: hidden;
|
485 |
+
zoom: 1;
|
486 |
+
}
|
487 |
}
|
488 |
|
489 |
#insert-download {
|
490 |
+
padding: 20px 20px;
|
491 |
|
492 |
+
.updated, .error {
|
493 |
+
margin-left: 0;
|
494 |
+
margin-right: 0;
|
495 |
+
}
|
496 |
+
h2 {
|
497 |
+
margin-top: 0;
|
498 |
+
}
|
499 |
+
label {
|
500 |
+
margin: 0 0 .25em 0;
|
501 |
+
display: block;
|
502 |
+
font-size: 1.1em;
|
503 |
+
}
|
504 |
+
span.description {
|
505 |
+
display: block;
|
506 |
+
}
|
507 |
+
input.input {
|
508 |
+
margin: 0 0 .25em 0;
|
509 |
+
display: block;
|
510 |
+
width: 100%;
|
511 |
+
font-size: 1.1em;
|
512 |
+
}
|
513 |
+
.add_link {
|
514 |
+
float: right;
|
515 |
+
}
|
516 |
+
ul.page-numbers {
|
517 |
+
overflow: hidden;
|
518 |
+
zoom: 1;
|
519 |
+
margin: 0 auto;
|
520 |
+
padding: 0;
|
521 |
+
text-align: center;
|
522 |
+
li {
|
523 |
+
display: inline-block;
|
524 |
+
margin: 0;
|
525 |
+
list-style: none outside;
|
526 |
+
line-height: 1em;
|
527 |
+
a, span {
|
528 |
+
text-decoration: none;
|
529 |
+
border: 1px solid #ddd;
|
530 |
+
-webkit-border-radius: 4px;
|
531 |
+
border-radius: 4px;
|
532 |
+
padding: 8px;
|
533 |
+
display: block;
|
534 |
+
}
|
535 |
+
span {
|
536 |
+
border-color: #eee;
|
537 |
+
}
|
538 |
+
}
|
539 |
+
}
|
540 |
+
legend {
|
541 |
+
font-weight: bold;
|
542 |
+
display: block;
|
543 |
+
margin: 0 0 1em;
|
544 |
+
}
|
545 |
+
fieldset {
|
546 |
+
label {
|
547 |
+
display: block;
|
548 |
+
margin: 0 0 .5em;
|
549 |
+
}
|
550 |
+
}
|
551 |
}
|
552 |
|
553 |
+
.dlm_extensions_wrap {
|
554 |
+
h2 {
|
555 |
+
a.dlm-reload-button {
|
556 |
+
float: right;
|
557 |
+
}
|
558 |
+
}
|
559 |
+
.dlm_extensions {
|
560 |
+
padding: 15px 0;
|
561 |
+
overflow: hidden;
|
562 |
+
div.dlm_extension {
|
563 |
+
cursor: auto !important;
|
564 |
+
a {
|
565 |
+
color: #444;
|
566 |
+
text-decoration: none;
|
567 |
+
}
|
568 |
+
.dlm_extension_img_wrapper {
|
569 |
+
width: 100%;
|
570 |
+
background: #419CCB;
|
571 |
+
text-align: center;
|
572 |
+
img {
|
573 |
+
max-width: 100%;
|
574 |
+
margin: 0 auto;
|
575 |
+
}
|
576 |
+
}
|
577 |
+
h3 {
|
578 |
+
padding: 0 20px;
|
579 |
+
|
580 |
+
}
|
581 |
+
p.extension-desc {
|
582 |
+
min-height: 85px;
|
583 |
+
padding: 0 20px;
|
584 |
+
}
|
585 |
+
.product_footer {
|
586 |
+
padding: 0 20px 15px;
|
587 |
+
.loop_price {
|
588 |
+
font-weight: bold;
|
589 |
+
&.sale {
|
590 |
+
color: #008000;
|
591 |
+
strike {
|
592 |
+
color: #444;
|
593 |
+
}
|
594 |
+
}
|
595 |
+
}
|
596 |
+
.loop_more {
|
597 |
+
color: #459ac9;
|
598 |
+
text-decoration: none;
|
599 |
+
font-weight: bold;
|
600 |
+
float: right;
|
601 |
+
}
|
602 |
+
}
|
603 |
+
.extension_license {
|
604 |
+
// padding: 0 10% 10%;
|
605 |
+
padding: 0 20px 20px;
|
606 |
+
-webkit-box-sizing: border-box;
|
607 |
+
-moz-box-sizing: border-box;
|
608 |
+
box-sizing: border-box;
|
609 |
+
p.license-status {
|
610 |
+
padding: 5px 0;
|
611 |
+
margin: 5px 0;
|
612 |
+
background: red;
|
613 |
+
font-weight: bold;
|
614 |
+
font-size: 1.2em;
|
615 |
+
color: #fff;
|
616 |
+
text-align: center;
|
617 |
+
}
|
618 |
+
p.license-status.active {
|
619 |
+
background: #008000;
|
620 |
+
}
|
621 |
+
input {
|
622 |
+
width: 100%;
|
623 |
+
margin: 7px 0;
|
624 |
+
padding: 7px;
|
625 |
+
}
|
626 |
+
a.button-primary {
|
627 |
+
width: 100%;
|
628 |
+
margin: 5px auto 0;
|
629 |
+
color: #fff;
|
630 |
+
text-align: center;
|
631 |
+
}
|
632 |
+
}
|
633 |
+
}
|
634 |
+
}
|
635 |
+
|
636 |
}
|
assets/css/dashboard.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
table.download_chart{width:100%}table.download_chart thead{display:none}table.download_chart td,table.download_chart th{padding:5px;vertical-align:middle;line-height:1.5em}table.download_chart th{text-align:left;font-weight:400;padding-left:0}table.download_chart td:last-child{padding-right:0}table.download_chart tr:first-child td,table.download_chart tr:first-child th{padding-top:0}table.download_chart tr:last-child td,table.download_chart tr:last-child th{border-bottom:0;padding-bottom:0}table.download_chart span.bar{padding:0 0 0 1px;height:1.5em;float:left;margin-right:5px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;bprder:1px solid
|
1 |
+
table.download_chart{width:100%}table.download_chart thead{display:none}table.download_chart td,table.download_chart th{padding:5px;vertical-align:middle;line-height:1.5em}table.download_chart th{text-align:left;font-weight:400;padding-left:0}table.download_chart td:last-child{padding-right:0}table.download_chart tr:first-child td,table.download_chart tr:first-child th{padding-top:0}table.download_chart tr:last-child td,table.download_chart tr:last-child th{border-bottom:0;padding-bottom:0}table.download_chart span.bar{padding:0 0 0 1px;height:1.5em;float:left;margin-right:5px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;bprder:1px solid # #6e6e6e;background:#6e6e6e;background-image:-webkit-gradient(linear,left bottom,left top,from(#747474),to(#6e6e6e));background-image:-webkit-linear-gradient(bottom,#747474,#6e6e6e);background-image:-moz-linear-gradient(bottom,#747474,#6e6e6e);background-image:-o-linear-gradient(bottom,#747474,#6e6e6e);background-image:linear-gradient(to top,#747474,#6e6e6e)}
|
assets/css/dashboard.less
CHANGED
@@ -1,50 +1,50 @@
|
|
1 |
/* Widgets */
|
2 |
table.download_chart {
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
}
|
1 |
/* Widgets */
|
2 |
table.download_chart {
|
3 |
+
width: 100%;
|
4 |
+
thead {
|
5 |
+
display: none;
|
6 |
+
}
|
7 |
+
td, th {
|
8 |
+
padding: 5px;
|
9 |
+
vertical-align: middle;
|
10 |
+
line-height: 1.5em;
|
11 |
+
}
|
12 |
+
th {
|
13 |
+
text-align: left;
|
14 |
+
font-weight: normal;
|
15 |
+
padding-left: 0;
|
16 |
+
}
|
17 |
+
td:last-child {
|
18 |
+
padding-right: 0;
|
19 |
+
}
|
20 |
+
tr:first-child {
|
21 |
+
td, th {
|
22 |
+
padding-top: 0;
|
23 |
+
}
|
24 |
+
}
|
25 |
+
tr:last-child {
|
26 |
+
td, th {
|
27 |
+
border-bottom: 0;
|
28 |
+
padding-bottom: 0;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
span.bar {
|
32 |
+
padding: 0 0 0 1px;
|
33 |
+
height: 1.5em;
|
34 |
+
float: left;
|
35 |
+
margin-right: 5px;
|
36 |
+
-moz-box-sizing: border-box;
|
37 |
+
-webkit-box-sizing: border-box;
|
38 |
+
box-sizing: border-box;
|
39 |
+
-moz-border-radius: 2px;
|
40 |
+
-webkit-border-radius: 2px;
|
41 |
+
border-radius: 2px;
|
42 |
+
bprder: 1px solid # #6e6e6e;
|
43 |
+
background: #6e6e6e;
|
44 |
+
background-image: -webkit-gradient(linear, left bottom, left top, from(#747474), to(#6e6e6e));
|
45 |
+
background-image: -webkit-linear-gradient(bottom, #747474, #6e6e6e);
|
46 |
+
background-image: -moz-linear-gradient(bottom, #747474, #6e6e6e);
|
47 |
+
background-image: -o-linear-gradient(bottom, #747474, #6e6e6e);
|
48 |
+
background-image: linear-gradient(to top, #747474, #6e6e6e);
|
49 |
+
}
|
50 |
}
|
assets/css/frontend.less
CHANGED
@@ -1,173 +1,187 @@
|
|
1 |
.download-box {
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
}
|
56 |
|
57 |
.download-button {
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
}
|
89 |
|
90 |
.filetype-icon {
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
}
|
|
|
96 |
.filetype-pdf {
|
97 |
-
|
98 |
}
|
|
|
99 |
.filetype-m4r, .filetype-au, .filetype-snd, .filetype-mid, .filetype-midi, .filetype-kar, .filetype-mpga, .filetype-mp2, .filetype-mp3, .filetype-aif, .filetype-aiff, .filetype-aifc, .filetype-m3u, .filetype-ram, .filetype-rm, .filetype-rpm, .filetype-ra, .filetype-wav, .filetype-wave {
|
100 |
-
|
101 |
}
|
|
|
102 |
.filetype-mpeg, .filetype-mpg, .filetype-mpe, .filetype-qt, .filetype-mov, .filetype-mxu, .filetype-avi, .filetype-movie, .filetype-mp4, .filetype-divx {
|
103 |
-
|
104 |
}
|
|
|
105 |
.filetype-zip, .filetype-gz, .filetype-rar, .filetype-sit, .filetype-tar, .filetype-7z {
|
106 |
-
|
107 |
}
|
|
|
108 |
.filetype-xls, .filetype-tsv, .filetype-csv {
|
109 |
-
|
110 |
}
|
111 |
-
|
112 |
-
|
|
|
113 |
}
|
|
|
114 |
.filetype-ai {
|
115 |
-
|
116 |
}
|
|
|
117 |
.filetype-swf {
|
118 |
-
|
119 |
}
|
|
|
120 |
.filetype-eps, .filetype-ps, .filetype-bmp, .filetype-gif, .filetype-ief, .filetype-jpeg, .filetype-jpg, .filetype-jpe, .filetype-png, .filetype-tiff, .filetype-tif, .filetype-djv, .filetype-wbmp, .filetype-ras, .filetype-pnm, .filetype-pbm, .filetype-pgm, .filetype-ppm, .filetype-rgb, .filetype-xbm, .filetype-xpm, .filetype-xwd {
|
121 |
-
|
122 |
}
|
|
|
123 |
.filetype-psd {
|
124 |
-
|
125 |
}
|
|
|
126 |
.filetype-ppt {
|
127 |
-
|
128 |
}
|
|
|
129 |
.filetype-js, .filetype-css, .filetype-as, .filetype-htm, .filetype-htaccess, .filetype-sql, .filetype-html, .filetype-php, .filetype-xml, .filetype-xsl {
|
130 |
-
|
131 |
}
|
|
|
132 |
.filetype-rtx, .filetype-rtf {
|
133 |
-
|
134 |
}
|
|
|
135 |
.filetype-txt {
|
136 |
-
|
137 |
}
|
138 |
|
139 |
nav.download-monitor-pagination, #content nav.download-monitor-pagination {
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
}
|
1 |
.download-box {
|
2 |
+
width: 250px;
|
3 |
+
border: 1px solid #ccc;
|
4 |
+
-moz-border-radius: 4px;
|
5 |
+
-webkit-border-radius: 4px;
|
6 |
+
border-radius: 4px;
|
7 |
+
text-align: center;
|
8 |
+
position: relative;
|
9 |
+
margin: 1em auto;
|
10 |
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
11 |
+
|
12 |
+
img.wp-post-image {
|
13 |
+
margin: 0;
|
14 |
+
padding: 0;
|
15 |
+
display: block;
|
16 |
+
width: 100%;
|
17 |
+
-moz-border-radius: 0;
|
18 |
+
-webkit-border-radius: 0;
|
19 |
+
-moz-border-top-left-radius: 3px;
|
20 |
+
-moz-border-top-right-radius: 3px;
|
21 |
+
-webkit-border-top-left-radius: 3px;
|
22 |
+
-webkit-border-top-right-radius: 3px;
|
23 |
+
border-radius: 0;
|
24 |
+
border-top-left-radius: 3px;
|
25 |
+
border-top-right-radius: 3px;
|
26 |
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
27 |
+
}
|
28 |
+
|
29 |
+
.download-box-content {
|
30 |
+
padding: 0 1em 1em;
|
31 |
+
}
|
32 |
+
|
33 |
+
.download-count {
|
34 |
+
-moz-border-radius: 1em;
|
35 |
+
-webkit-border-radius: 1em;
|
36 |
+
border-radius: 1em;
|
37 |
+
color: #777;
|
38 |
+
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
|
39 |
+
background: #ddd;
|
40 |
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
41 |
+
position: absolute;
|
42 |
+
top: 0;
|
43 |
+
right: 0;
|
44 |
+
padding: .5em;
|
45 |
+
height: 1em;
|
46 |
+
width: auto;
|
47 |
+
min-width: 1em;
|
48 |
+
font-size: 1em;
|
49 |
+
text-align: center;
|
50 |
+
vertical-align: middle;
|
51 |
+
line-height: 1em;
|
52 |
+
border: 1px solid #bbb;
|
53 |
+
margin: -.5em -.5em 0 0;
|
54 |
+
}
|
55 |
}
|
56 |
|
57 |
.download-button {
|
58 |
+
text-align: center;
|
59 |
+
text-decoration: none;
|
60 |
+
padding: 0.75em 1em;
|
61 |
+
color: #fff;
|
62 |
+
display: block;
|
63 |
+
font-size: 1.2em;
|
64 |
+
line-height: 1.5em;
|
65 |
+
background-color: #0099cc;
|
66 |
+
background-image: -webkit-linear-gradient(#009fd4, #0099cc, #0086b2);
|
67 |
+
background-image: -moz-linear-gradient(#009fd4, #0099cc, #0086b2);
|
68 |
+
-moz-border-radius: 4px;
|
69 |
+
-webkit-border-radius: 4px;
|
70 |
+
border-radius: 4px;
|
71 |
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.5);
|
72 |
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
73 |
+
border: 1px solid #0086b2;
|
74 |
+
cursor: pointer;
|
75 |
+
|
76 |
+
&:hover {
|
77 |
+
color: #fff;
|
78 |
+
background-color: #0099cc;
|
79 |
+
background-image: -webkit-linear-gradient(#0099cc, #0086b2);
|
80 |
+
background-image: -moz-linear-gradient(#0099cc, #0086b2);
|
81 |
+
}
|
82 |
+
|
83 |
+
small {
|
84 |
+
font-size: 0.8em;
|
85 |
+
opacity: 0.8;
|
86 |
+
display: block;
|
87 |
+
}
|
88 |
}
|
89 |
|
90 |
.filetype-icon {
|
91 |
+
padding-left: 19px;
|
92 |
+
background-repeat: no-repeat;
|
93 |
+
background-position: left;
|
94 |
+
background-image: url(../images/filetypes/document.png);
|
95 |
}
|
96 |
+
|
97 |
.filetype-pdf {
|
98 |
+
background-image: url(../images/filetypes/document-pdf.png);
|
99 |
}
|
100 |
+
|
101 |
.filetype-m4r, .filetype-au, .filetype-snd, .filetype-mid, .filetype-midi, .filetype-kar, .filetype-mpga, .filetype-mp2, .filetype-mp3, .filetype-aif, .filetype-aiff, .filetype-aifc, .filetype-m3u, .filetype-ram, .filetype-rm, .filetype-rpm, .filetype-ra, .filetype-wav, .filetype-wave {
|
102 |
+
background-image: url(../images/filetypes/document-music.png);
|
103 |
}
|
104 |
+
|
105 |
.filetype-mpeg, .filetype-mpg, .filetype-mpe, .filetype-qt, .filetype-mov, .filetype-mxu, .filetype-avi, .filetype-movie, .filetype-mp4, .filetype-divx {
|
106 |
+
background-image: url(../images/filetypes/document-film.png);
|
107 |
}
|
108 |
+
|
109 |
.filetype-zip, .filetype-gz, .filetype-rar, .filetype-sit, .filetype-tar, .filetype-7z {
|
110 |
+
background-image: url(../images/filetypes/document-zipper.png);
|
111 |
}
|
112 |
+
|
113 |
.filetype-xls, .filetype-tsv, .filetype-csv {
|
114 |
+
background-image: url(../images/filetypes/document-excel.png);
|
115 |
}
|
116 |
+
|
117 |
+
.filetype-doc, .filetype-docx {
|
118 |
+
background-image: url(../images/filetypes/document-word-text.png);
|
119 |
}
|
120 |
+
|
121 |
.filetype-ai {
|
122 |
+
background-image: url(../images/filetypes/document-illustrator.png);
|
123 |
}
|
124 |
+
|
125 |
.filetype-swf {
|
126 |
+
background-image: url(../images/filetypes/document-flash-movie.png);
|
127 |
}
|
128 |
+
|
129 |
.filetype-eps, .filetype-ps, .filetype-bmp, .filetype-gif, .filetype-ief, .filetype-jpeg, .filetype-jpg, .filetype-jpe, .filetype-png, .filetype-tiff, .filetype-tif, .filetype-djv, .filetype-wbmp, .filetype-ras, .filetype-pnm, .filetype-pbm, .filetype-pgm, .filetype-ppm, .filetype-rgb, .filetype-xbm, .filetype-xpm, .filetype-xwd {
|
130 |
+
background-image: url(../images/filetypes/document-image.png);
|
131 |
}
|
132 |
+
|
133 |
.filetype-psd {
|
134 |
+
background-image: url(../images/filetypes/document-photoshop.png);
|
135 |
}
|
136 |
+
|
137 |
.filetype-ppt {
|
138 |
+
background-image: url(../images/filetypes/document-powerpoint.png);
|
139 |
}
|
140 |
+
|
141 |
.filetype-js, .filetype-css, .filetype-as, .filetype-htm, .filetype-htaccess, .filetype-sql, .filetype-html, .filetype-php, .filetype-xml, .filetype-xsl {
|
142 |
+
background-image: url(../images/filetypes/document-code.png);
|
143 |
}
|
144 |
+
|
145 |
.filetype-rtx, .filetype-rtf {
|
146 |
+
background-image: url(../images/filetypes/document-text-image.png);
|
147 |
}
|
148 |
+
|
149 |
.filetype-txt {
|
150 |
+
background-image: url(../images/filetypes/document-text.png);
|
151 |
}
|
152 |
|
153 |
nav.download-monitor-pagination, #content nav.download-monitor-pagination {
|
154 |
+
text-align: center;
|
155 |
+
ul {
|
156 |
+
display: inline-block;
|
157 |
+
white-space: nowrap;
|
158 |
+
padding: 0;
|
159 |
+
clear: both;
|
160 |
+
border: 1px solid #eee;
|
161 |
+
border-right: 0;
|
162 |
+
margin: 1px;
|
163 |
+
li {
|
164 |
+
border-right: 1px solid #eee;
|
165 |
+
padding: 0;
|
166 |
+
margin: 0;
|
167 |
+
float: left;
|
168 |
+
display: inline;
|
169 |
+
overflow: hidden;
|
170 |
+
a, span {
|
171 |
+
margin: 0;
|
172 |
+
text-decoration: none;
|
173 |
+
padding: 0;
|
174 |
+
line-height: 1em;
|
175 |
+
font-size: 1em;
|
176 |
+
font-weight: normal;
|
177 |
+
padding: .5em;
|
178 |
+
min-width: 1em;
|
179 |
+
display: block;
|
180 |
+
}
|
181 |
+
span.current, a:hover, a:focus {
|
182 |
+
background: #eee;
|
183 |
+
color: darken(#eee, 40);
|
184 |
+
}
|
185 |
+
}
|
186 |
+
}
|
187 |
}
|
assets/css/menu.less
CHANGED
@@ -1,24 +1,24 @@
|
|
1 |
/* Menu */
|
2 |
#adminmenu {
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
}
|
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 |
}
|
assets/images/cross.png
DELETED
Binary file
|
assets/images/download_count_head.png
DELETED
Binary file
|
assets/images/downloads-icon.gif
DELETED
Binary file
|
assets/images/featured_head.png
DELETED
Binary file
|
assets/images/folder-horizontal-open.png
DELETED
Binary file
|
assets/images/folder-horizontal.png
DELETED
Binary file
|
assets/images/media-button-download.gif
DELETED
Binary file
|
assets/images/member_head.png
DELETED
Binary file
|
assets/images/menu_icon.png
DELETED
Binary file
|
assets/images/on.png
DELETED
Binary file
|
assets/images/redirect_head.png
DELETED
Binary file
|
assets/js/edit-download.js
ADDED
@@ -0,0 +1,235 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( function ( $ ) {
|
2 |
+
|
3 |
+
// Expand all files
|
4 |
+
jQuery( '.expand_all' ).click( function () {
|
5 |
+
jQuery( this ).closest( '.dlm-metaboxes-wrapper' ).find( '.dlm-metabox table' ).show();
|
6 |
+
return false;
|
7 |
+
} );
|
8 |
+
|
9 |
+
// Close all files
|
10 |
+
jQuery( '.close_all' ).click( function () {
|
11 |
+
jQuery( this ).closest( '.dlm-metaboxes-wrapper' ).find( '.dlm-metabox table' ).hide();
|
12 |
+
return false;
|
13 |
+
} );
|
14 |
+
|
15 |
+
// Open/close
|
16 |
+
jQuery( '.dlm-metaboxes-wrapper' ).on( 'click', '.dlm-metabox h3', function ( event ) {
|
17 |
+
// If the user clicks on some form input inside the h3, like a select list (for variations), the box should not be toggled
|
18 |
+
if ( jQuery( event.target ).filter( ':input, option' ).length ) return;
|
19 |
+
|
20 |
+
jQuery( this ).next( '.dlm-metabox-content' ).toggle();
|
21 |
+
} );
|
22 |
+
|
23 |
+
// Closes all to begin
|
24 |
+
jQuery( '.dlm-metabox.closed' ).each( function () {
|
25 |
+
jQuery( this ).find( '.dlm-metabox-content' ).hide();
|
26 |
+
} );
|
27 |
+
|
28 |
+
// Date picker
|
29 |
+
jQuery( ".date-picker-field" ).datepicker( {
|
30 |
+
dateFormat: "yy-mm-dd",
|
31 |
+
numberOfMonths: 1,
|
32 |
+
showButtonPanel: true,
|
33 |
+
} );
|
34 |
+
|
35 |
+
// Ordering
|
36 |
+
jQuery( '.downloadable_files' ).sortable( {
|
37 |
+
items: '.downloadable_file',
|
38 |
+
cursor: 'move',
|
39 |
+
axis: 'y',
|
40 |
+
handle: 'h3',
|
41 |
+
scrollSensitivity: 40,
|
42 |
+
forcePlaceholderSize: true,
|
43 |
+
helper: 'clone',
|
44 |
+
opacity: 0.65,
|
45 |
+
placeholder: 'dlm-metabox-sortable-placeholder',
|
46 |
+
start: function ( event, ui ) {
|
47 |
+
ui.item.css( 'background-color', '#f6f6f6' );
|
48 |
+
},
|
49 |
+
stop: function ( event, ui ) {
|
50 |
+
ui.item.removeAttr( 'style' );
|
51 |
+
downloadable_file_row_indexes();
|
52 |
+
}
|
53 |
+
} );
|
54 |
+
|
55 |
+
function downloadable_file_row_indexes() {
|
56 |
+
jQuery( '.downloadable_files .downloadable_file' ).each( function ( index, el ) {
|
57 |
+
jQuery( '.file_menu_order', el ).val( parseInt( jQuery( el ).index( '.downloadable_files .downloadable_file' ) ) );
|
58 |
+
} );
|
59 |
+
};
|
60 |
+
|
61 |
+
// Add a file
|
62 |
+
jQuery( '.download_monitor_files' ).on( 'click', 'a.add_file', function () {
|
63 |
+
|
64 |
+
jQuery( '.download_monitor_files' ).block( {
|
65 |
+
message: null,
|
66 |
+
overlayCSS: {
|
67 |
+
background: '#fff url(' + $( '#dlm-plugin-url' ).val() + '/assets/images/ajax-loader.gif) no-repeat center',
|
68 |
+
opacity: 0.6
|
69 |
+
}
|
70 |
+
} );
|
71 |
+
|
72 |
+
var size = jQuery( '.downloadable_files .downloadable_file' ).size();
|
73 |
+
|
74 |
+
var data = {
|
75 |
+
action: 'download_monitor_add_file',
|
76 |
+
post_id: $( '#dlm-post-id' ).val(),
|
77 |
+
size: size,
|
78 |
+
security: $( '#dlm-ajax-nonce-add-file' ).val()
|
79 |
+
};
|
80 |
+
|
81 |
+
jQuery.post( ajaxurl, data, function ( response ) {
|
82 |
+
|
83 |
+
jQuery( '.downloadable_files' ).prepend( response );
|
84 |
+
|
85 |
+
downloadable_file_row_indexes();
|
86 |
+
|
87 |
+
jQuery( '.download_monitor_files' ).unblock();
|
88 |
+
|
89 |
+
// Date picker
|
90 |
+
jQuery( ".date-picker-field" ).datepicker( {
|
91 |
+
dateFormat: "yy-mm-dd",
|
92 |
+
numberOfMonths: 1,
|
93 |
+
showButtonPanel: true
|
94 |
+
} );
|
95 |
+
} );
|
96 |
+
|
97 |
+
return false;
|
98 |
+
|
99 |
+
} );
|
100 |
+
|
101 |
+
// Remove a file
|
102 |
+
jQuery( '.download_monitor_files' ).on( 'click', 'button.remove_file', function ( e ) {
|
103 |
+
e.preventDefault();
|
104 |
+
var answer = confirm( dlm_ed_strings.confirm_delete );
|
105 |
+
if ( answer ) {
|
106 |
+
|
107 |
+
var el = jQuery( this ).closest( '.downloadable_file' );
|
108 |
+
var file_id = el.attr( 'data-file' );
|
109 |
+
|
110 |
+
if ( file_id > 0 ) {
|
111 |
+
|
112 |
+
jQuery( el ).block( {
|
113 |
+
message: null,
|
114 |
+
overlayCSS: {
|
115 |
+
background: '#fff url(' + $( '#dlm-plugin-url' ).val() + '/assets/images/ajax-loader.gif) no-repeat center',
|
116 |
+
opacity: 0.6
|
117 |
+
}
|
118 |
+
} );
|
119 |
+
|
120 |
+
var data = {
|
121 |
+
action: 'download_monitor_remove_file',
|
122 |
+
file_id: file_id,
|
123 |
+
download_id: $( '#dlm-post-id' ).val(),
|
124 |
+
security: $( '#dlm-ajax-nonce-remove-file' ).val()
|
125 |
+
};
|
126 |
+
|
127 |
+
jQuery.post( ajaxurl, data, function ( response ) {
|
128 |
+
jQuery( el ).fadeOut( '300' ).remove();
|
129 |
+
}
|
130 |
+
)
|
131 |
+
;
|
132 |
+
|
133 |
+
} else {
|
134 |
+
jQuery( el ).fadeOut( '300' ).remove();
|
135 |
+
}
|
136 |
+
}
|
137 |
+
return false;
|
138 |
+
} );
|
139 |
+
|
140 |
+
// Browse for file
|
141 |
+
jQuery( '.download_monitor_files' ).on( 'click', 'a.dlm_browse_for_file', function ( e ) {
|
142 |
+
|
143 |
+
downloadable_files_field = jQuery( this ).closest( '.downloadable_file' ).find( 'textarea[name^="downloadable_file_urls"]' );
|
144 |
+
|
145 |
+
window.send_to_editor = window.send_to_browse_file_url;
|
146 |
+
|
147 |
+
tb_show( dlm_ed_strings.browse_file, 'media-upload.php?post_id=' + $( '#dlm-post-id' ).val() + '&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true' );
|
148 |
+
|
149 |
+
return false;
|
150 |
+
} );
|
151 |
+
|
152 |
+
window.send_to_browse_file_url = function ( html ) {
|
153 |
+
|
154 |
+
if ( html ) {
|
155 |
+
old = jQuery.trim( jQuery( downloadable_files_field ).val() );
|
156 |
+
if ( old ) old = old + "\n";
|
157 |
+
jQuery( downloadable_files_field ).val( old + html );
|
158 |
+
}
|
159 |
+
|
160 |
+
tb_remove();
|
161 |
+
|
162 |
+
window.send_to_editor = window.send_to_editor_default;
|
163 |
+
}
|
164 |
+
|
165 |
+
// Uploading files
|
166 |
+
var dlm_upload_file_frame;
|
167 |
+
|
168 |
+
jQuery( document ).on( 'click', '.dlm_upload_file', function ( event ) {
|
169 |
+
|
170 |
+
var $el = $( this );
|
171 |
+
var $file_path_field = $el.parent().parent().find( '.downloadable_file_urls' );
|
172 |
+
var file_paths = $file_path_field.val();
|
173 |
+
|
174 |
+
event.preventDefault();
|
175 |
+
|
176 |
+
// If the media frame already exists, reopen it.
|
177 |
+
if ( dlm_upload_file_frame ) {
|
178 |
+
dlm_upload_file_frame.open();
|
179 |
+
return;
|
180 |
+
}
|
181 |
+
|
182 |
+
var downloadable_file_states = [
|
183 |
+
// Main states.
|
184 |
+
new wp.media.controller.Library( {
|
185 |
+
library: wp.media.query(),
|
186 |
+
multiple: true,
|
187 |
+
title: $el.data( 'choose' ),
|
188 |
+
priority: 20,
|
189 |
+
filterable: 'uploaded',
|
190 |
+
} )
|
191 |
+
];
|
192 |
+
|
193 |
+
// Create the media frame.
|
194 |
+
dlm_upload_file_frame = wp.media.frames.downloadable_file = wp.media( {
|
195 |
+
// Set the title of the modal.
|
196 |
+
title: $el.data( 'choose' ),
|
197 |
+
library: {
|
198 |
+
type: ''
|
199 |
+
},
|
200 |
+
button: {
|
201 |
+
text: $el.data( 'update' ),
|
202 |
+
},
|
203 |
+
multiple: true,
|
204 |
+
states: downloadable_file_states,
|
205 |
+
} );
|
206 |
+
|
207 |
+
// When an image is selected, run a callback.
|
208 |
+
dlm_upload_file_frame.on( 'select', function () {
|
209 |
+
|
210 |
+
var selection = dlm_upload_file_frame.state().get( 'selection' );
|
211 |
+
|
212 |
+
selection.map( function ( attachment ) {
|
213 |
+
|
214 |
+
attachment = attachment.toJSON();
|
215 |
+
|
216 |
+
if ( attachment.url )
|
217 |
+
file_paths = file_paths ? file_paths + "\n" + attachment.url : attachment.url
|
218 |
+
|
219 |
+
} );
|
220 |
+
|
221 |
+
$file_path_field.val( file_paths );
|
222 |
+
} );
|
223 |
+
|
224 |
+
// Set post to 0 and set our custom type
|
225 |
+
dlm_upload_file_frame.on( 'ready', function () {
|
226 |
+
dlm_upload_file_frame.uploader.options.uploader.params = {
|
227 |
+
type: 'dlm_download'
|
228 |
+
};
|
229 |
+
} );
|
230 |
+
|
231 |
+
// Finally, open the modal.
|
232 |
+
dlm_upload_file_frame.open();
|
233 |
+
} );
|
234 |
+
|
235 |
+
} );
|
assets/js/edit-download.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery(function(a){function b(){jQuery(".downloadable_files .downloadable_file").each(function(a,b){jQuery(".file_menu_order",b).val(parseInt(jQuery(b).index(".downloadable_files .downloadable_file")))})}jQuery(".expand_all").click(function(){return jQuery(this).closest(".dlm-metaboxes-wrapper").find(".dlm-metabox table").show(),!1}),jQuery(".close_all").click(function(){return jQuery(this).closest(".dlm-metaboxes-wrapper").find(".dlm-metabox table").hide(),!1}),jQuery(".dlm-metaboxes-wrapper").on("click",".dlm-metabox h3",function(a){jQuery(a.target).filter(":input, option").length||jQuery(this).next(".dlm-metabox-content").toggle()}),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(a,b){b.item.css("background-color","#f6f6f6")},stop:function(a,c){c.item.removeAttr("style"),b()}}),jQuery(".download_monitor_files").on("click","a.add_file",function(){jQuery(".download_monitor_files").block({message:null,overlayCSS:{background:"#fff url("+a("#dlm-plugin-url").val()+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var c=jQuery(".downloadable_files .downloadable_file").size(),d={action:"download_monitor_add_file",post_id:a("#dlm-post-id").val(),size:c,security:a("#dlm-ajax-nonce-add-file").val()};return jQuery.post(ajaxurl,d,function(a){jQuery(".downloadable_files").prepend(a),b(),jQuery(".download_monitor_files").unblock(),jQuery(".date-picker-field").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0})}),!1}),jQuery(".download_monitor_files").on("click","button.remove_file",function(b){b.preventDefault();var c=confirm(dlm_ed_strings.confirm_delete);if(c){var d=jQuery(this).closest(".downloadable_file"),e=d.attr("data-file");if(e>0){jQuery(d).block({message:null,overlayCSS:{background:"#fff url("+a("#dlm-plugin-url").val()+"/assets/images/ajax-loader.gif) no-repeat center",opacity:.6}});var f={action:"download_monitor_remove_file",file_id:e,download_id:a("#dlm-post-id").val(),security:a("#dlm-ajax-nonce-remove-file").val()};jQuery.post(ajaxurl,f,function(){jQuery(d).fadeOut("300").remove()})}else jQuery(d).fadeOut("300").remove()}return!1}),jQuery(".download_monitor_files").on("click","a.dlm_browse_for_file",function(){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="+a("#dlm-post-id").val()+"&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true"),!1}),window.send_to_browse_file_url=function(a){a&&(old=jQuery.trim(jQuery(downloadable_files_field).val()),old&&(old+="\n"),jQuery(downloadable_files_field).val(old+a)),tb_remove(),window.send_to_editor=window.send_to_editor_default};var c;jQuery(document).on("click",".dlm_upload_file",function(b){var d=a(this),e=d.parent().parent().find(".downloadable_file_urls"),f=e.val();if(b.preventDefault(),c)return void c.open();var g=[new wp.media.controller.Library({library:wp.media.query(),multiple:!0,title:d.data("choose"),priority:20,filterable:"uploaded"})];c=wp.media.frames.downloadable_file=wp.media({title:d.data("choose"),library:{type:""},button:{text:d.data("update")},multiple:!0,states:g}),c.on("select",function(){var a=c.state().get("selection");a.map(function(a){a=a.toJSON(),a.url&&(f=f?f+"\n"+a.url:a.url)}),e.val(f)}),c.on("ready",function(){c.uploader.options.uploader.params={type:"dlm_download"}}),c.open()})});
|
assets/js/edit-post.js
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( function ($) {
|
2 |
+
// Browse for file
|
3 |
+
jQuery( 'body' ).on( 'click', 'a.add_download', function () {
|
4 |
+
|
5 |
+
tb_show( dlm_ep_strings.insert_download, 'media-upload.php?post_id=' + $( this ).attr( 'rel' ) + '&type=add_download&from=wpdlm01&TB_iframe=true&height=200' );
|
6 |
+
|
7 |
+
return false;
|
8 |
+
} );
|
9 |
+
} );
|
assets/js/edit-post.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery(function(a){jQuery("body").on("click","a.add_download",function(){return tb_show(dlm_ep_strings.insert_download,"media-upload.php?post_id="+a(this).attr("rel")+"&type=add_download&from=wpdlm01&TB_iframe=true&height=200"),!1})});
|
assets/js/extensions.js
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( function ( $ ) {
|
2 |
+
$.each( $( '.extension_license a' ), function ( k, v ) {
|
3 |
+
$( v ).click( function () {
|
4 |
+
var wrap = $( v ).closest( '.extension_license' );
|
5 |
+
|
6 |
+
var ex_ac = ('inactive' == $( wrap ).find( '#status' ).val() ) ? 'activate' : 'deactivate';
|
7 |
+
|
8 |
+
$.post( ajaxurl, {
|
9 |
+
action: 'dlm_extension',
|
10 |
+
nonce: $( '#dlm-ajax-nonce' ).val(),
|
11 |
+
product_id: $( wrap ).find( '#product_id' ).val(),
|
12 |
+
key: $( wrap ).find( '#key' ).val(),
|
13 |
+
email: $( wrap ).find( '#email' ).val(),
|
14 |
+
extension_action: ex_ac
|
15 |
+
}, function ( response ) {
|
16 |
+
if ( response.result == 'failed' ) {
|
17 |
+
alert( response.message );
|
18 |
+
} else {
|
19 |
+
if ( 'activate' == ex_ac ) {
|
20 |
+
$( wrap ).find( '.license-status' ).addClass( 'active' ).html( 'ACTIVE' );
|
21 |
+
$( wrap ).find( '.button' ).html( 'Deactivate' );
|
22 |
+
$( wrap ).find( '#status' ).val( 'active' );
|
23 |
+
$( wrap ).find( '#key' ).attr('disabled', true);
|
24 |
+
$( wrap ).find( '#email' ).attr('disabled', true);
|
25 |
+
} else {
|
26 |
+
$( wrap ).find( '.license-status' ).removeClass( 'active' ).html( 'INACTIVE' );
|
27 |
+
$( wrap ).find( '.button' ).html( 'Activate' );
|
28 |
+
$( wrap ).find( '#status' ).val( 'inactive' );
|
29 |
+
$( wrap ).find( '#key' ).attr('disabled', false);
|
30 |
+
$( wrap ).find( '#email' ).attr('disabled', false);
|
31 |
+
}
|
32 |
+
}
|
33 |
+
} );
|
34 |
+
|
35 |
+
} );
|
36 |
+
} );
|
37 |
+
} );
|
assets/js/extensions.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery(function(a){a.each(a(".extension_license a"),function(b,c){a(c).click(function(){var b=a(c).closest(".extension_license"),d="inactive"==a(b).find("#status").val()?"activate":"deactivate";a.post(ajaxurl,{action:"dlm_extension",nonce:a("#dlm-ajax-nonce").val(),product_id:a(b).find("#product_id").val(),key:a(b).find("#key").val(),email:a(b).find("#email").val(),extension_action:d},function(c){"failed"==c.result?alert(c.message):"activate"==d?(a(b).find(".license-status").addClass("active").html("ACTIVE"),a(b).find(".button").html("Deactivate"),a(b).find("#status").val("active"),a(b).find("#key").attr("disabled",!0),a(b).find("#email").attr("disabled",!0)):(a(b).find(".license-status").removeClass("active").html("INACTIVE"),a(b).find(".button").html("Activate"),a(b).find("#status").val("inactive"),a(b).find("#key").attr("disabled",!1),a(b).find("#email").attr("disabled",!1))})})})});
|
assets/js/jqueryFileTree/jqueryFileTree.min.js
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
// jQuery File Tree Plugin
|
2 |
-
//
|
3 |
-
// Version 1.01
|
4 |
-
//
|
5 |
-
// Cory S.N. LaViska
|
6 |
-
// A Beautiful Site (http://abeautifulsite.net/)
|
7 |
-
// 24 March 2008
|
8 |
-
//
|
9 |
-
// Visit http://abeautifulsite.net/notebook.php?article=58 for more information
|
10 |
-
//
|
11 |
-
// Usage: $('.fileTreeDemo').fileTree( options, callback )
|
12 |
-
//
|
13 |
-
// Options: root - root folder to display; default = /
|
14 |
-
// script - location of the serverside AJAX file to use; default = jqueryFileTree.php
|
15 |
-
// folderEvent - event to trigger expand/collapse; default = click
|
16 |
-
// expandSpeed - default = 500 (ms); use -1 for no animation
|
17 |
-
// collapseSpeed - default = 500 (ms); use -1 for no animation
|
18 |
-
// expandEasing - easing function to use on expand (optional)
|
19 |
-
// collapseEasing - easing function to use on collapse (optional)
|
20 |
-
// multiFolder - whether or not to limit the browser to one subfolder at a time
|
21 |
-
// loadMessage - Message to display while initial tree loads (can be HTML)
|
22 |
-
//
|
23 |
-
// History:
|
24 |
-
//
|
25 |
-
// 1.01 - updated to work with foreign characters in directory/file names (12 April 2008)
|
26 |
-
// 1.00 - released (24 March 2008)
|
27 |
-
//
|
28 |
-
// TERMS OF USE
|
29 |
-
//
|
30 |
-
// This plugin is dual-licensed under the GNU General Public License and the MIT License and
|
31 |
-
// is copyright 2008 A Beautiful Site, LLC.
|
32 |
-
//
|
33 |
-
jQuery&&function(e){e.extend(e.fn,{fileTree:function(t,n){if(!t)var t={};t.root==undefined&&(t.root="/");t.script==undefined&&(t.script="jqueryFileTree.php");t.folderEvent==undefined&&(t.folderEvent="click");t.expandSpeed==undefined&&(t.expandSpeed=500);t.collapseSpeed==undefined&&(t.collapseSpeed=500);t.expandEasing==undefined&&(t.expandEasing=null);t.collapseEasing==undefined&&(t.collapseEasing=null);t.multiFolder==undefined&&(t.multiFolder=!0);t.loadMessage==undefined&&(t.loadMessage="Loading...");e(this).each(function(){function r(n,r){e(n).addClass("wait");e(".jqueryFileTree.start").remove();e.post(t.script,{dir:r},function(s){e(n).find(".start").html("");e(n).removeClass("wait").append(s);t.root==r?e(n).find("UL:hidden").show():e(n).find("UL:hidden").slideDown({duration:t.expandSpeed,easing:t.expandEasing});i(n)})}function i(i){e(i).find("LI A").bind(t.folderEvent,function(){if(e(this).parent().hasClass("directory"))if(e(this).parent().hasClass("collapsed")){if(!t.multiFolder){e(this).parent().parent().find("UL").slideUp({duration:t.collapseSpeed,easing:t.collapseEasing});e(this).parent().parent().find("LI.directory").removeClass("expanded").addClass("collapsed")}e(this).parent().find("UL").remove();r(e(this).parent(),escape(e(this).attr("rel").match(/.*\//)));e(this).parent().removeClass("collapsed").addClass("expanded")}else{e(this).parent().find("UL").slideUp({duration:t.collapseSpeed,easing:t.collapseEasing});e(this).parent().removeClass("expanded").addClass("collapsed")}else n(e(this).attr("rel"));return!1});t.folderEvent.toLowerCase!="click"&&e(i).find("LI A").bind("click",function(){return!1})}e(this).html('<ul class="jqueryFileTree start"><li class="wait">'+t.loadMessage+"<li></ul>");r(e(this),escape(t.root))})}})}(jQuery);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/settings.js
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( function ( $ ) {
|
2 |
+
$( '.nav-tab-wrapper a' ).click( function () {
|
3 |
+
$( '.settings_panel' ).hide();
|
4 |
+
$( '.nav-tab-active' ).removeClass( 'nav-tab-active' );
|
5 |
+
$( $( this ).attr( 'href' ) ).show();
|
6 |
+
$( this ).addClass( 'nav-tab-active' );
|
7 |
+
return false;
|
8 |
+
} );
|
9 |
+
$( '#setting-dlm_default_template' ).change( function () {
|
10 |
+
if ( $( this ).val() == 'custom' ) {
|
11 |
+
$( '#setting-dlm_custom_template' ).closest( 'tr' ).show();
|
12 |
+
} else {
|
13 |
+
$( '#setting-dlm_custom_template' ).closest( 'tr' ).hide();
|
14 |
+
}
|
15 |
+
} ).change();
|
16 |
+
|
17 |
+
$( '.nav-tab-wrapper a:first' ).click();
|
18 |
+
} );
|
assets/js/settings.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery(function(a){a(".nav-tab-wrapper a").click(function(){return a(".settings_panel").hide(),a(".nav-tab-active").removeClass("nav-tab-active"),a(a(this).attr("href")).show(),a(this).addClass("nav-tab-active"),!1}),a("#setting-dlm_default_template").change(function(){"custom"==a(this).val()?a("#setting-dlm_custom_template").closest("tr").show():a("#setting-dlm_custom_template").closest("tr").hide()}).change(),a(".nav-tab-wrapper a:first").click()});
|
download-monitor.php
CHANGED
@@ -1,685 +1,77 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
-
Plugin Name: Download Monitor
|
4 |
-
Plugin URI:
|
5 |
-
Description: A full solution for managing downloadable files, monitoring downloads and outputting download links and file information on your WordPress powered site.
|
6 |
-
Version: 1.
|
7 |
-
Author: Mike Jolley
|
8 |
-
Author URI: http://
|
9 |
-
Requires at least: 3.8
|
10 |
-
Tested up to:
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
*/
|
16 |
|
17 |
-
if ( ! defined( 'ABSPATH' ) )
|
18 |
-
|
19 |
-
|
20 |
-
* WP_DLM class.
|
21 |
-
*
|
22 |
-
* Main Class which inits the CPT and plugin
|
23 |
-
*/
|
24 |
-
class WP_DLM {
|
25 |
-
|
26 |
-
private $plugin_url;
|
27 |
-
private $plugin_path;
|
28 |
-
private $_inline_js;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* __construct function.
|
32 |
-
*
|
33 |
-
* @access public
|
34 |
-
* @return void
|
35 |
-
*/
|
36 |
-
public function __construct() {
|
37 |
-
global $wpdb;
|
38 |
-
|
39 |
-
// Define constants
|
40 |
-
define( 'DLM_VERSION', '1.5.0' );
|
41 |
-
|
42 |
-
// Table for logs
|
43 |
-
$wpdb->download_log = $wpdb->prefix . 'download_log';
|
44 |
-
|
45 |
-
// Include required files
|
46 |
-
if ( is_admin() ) {
|
47 |
-
include_once( 'includes/admin/class-dlm-admin.php' );
|
48 |
-
}
|
49 |
-
|
50 |
-
if ( defined('DOING_AJAX') ) {
|
51 |
-
include_once( 'includes/class-dlm-ajax-handler.php' );
|
52 |
-
}
|
53 |
-
|
54 |
-
if ( get_option( 'dlm_enable_logging' ) == 1 ) {
|
55 |
-
include_once( 'includes/class-dlm-logging.php' );
|
56 |
-
}
|
57 |
-
|
58 |
-
include_once( 'includes/download-functions.php' );
|
59 |
-
include_once( 'includes/class-dlm-download.php' );
|
60 |
-
include_once( 'includes/class-dlm-download-version.php' );
|
61 |
-
include_once( 'includes/class-dlm-download-handler.php' );
|
62 |
-
include_once( 'includes/class-dlm-shortcodes.php' );
|
63 |
-
|
64 |
-
// Activation
|
65 |
-
register_activation_hook( basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ), array( $this, 'init_user_roles' ), 10 );
|
66 |
-
register_activation_hook( basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ), array( $this, 'init_taxonomy' ), 10 );
|
67 |
-
register_activation_hook( basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ), array( $this, 'install_tables' ), 10 );
|
68 |
-
register_activation_hook( basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ), array( $this, 'directory_protection' ), 10 );
|
69 |
-
register_activation_hook( basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ), array( $GLOBALS['DLM_Download_Handler'], 'add_endpoint' ), 10 );
|
70 |
-
register_activation_hook( basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ), 'flush_rewrite_rules', 11 );
|
71 |
-
|
72 |
-
// Actions
|
73 |
-
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_links' ) );
|
74 |
-
add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
|
75 |
-
add_action( 'init', array( $this, 'register_globals' ) );
|
76 |
-
add_action( 'init', array( $this, 'init_taxonomy' ) );
|
77 |
-
add_action( 'after_setup_theme', array( $this, 'compatibility' ) );
|
78 |
-
add_action( 'the_post', array( $this, 'setup_download_data' ) );
|
79 |
-
add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ) );
|
80 |
-
add_action( 'wp_footer', array( $this, 'output_inline_js' ), 25 );
|
81 |
-
add_action( 'admin_footer', array( $this, 'output_inline_js' ), 25 );
|
82 |
-
add_action( 'widgets_init', array( $this, 'register_widgets' ) );
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Add links to admin plugins page.
|
87 |
-
* @param array $links
|
88 |
-
* @return array
|
89 |
-
*/
|
90 |
-
public function plugin_links( $links ) {
|
91 |
-
$plugin_links = array(
|
92 |
-
'<a href="' . admin_url( 'edit.php?post_type=dlm_download&page=download-monitor-settings' ) . '">' . __( 'Settings', 'download-monitor' ) . '</a>',
|
93 |
-
'<a href="http://mikejolley.com/projects/download-monitor/add-ons/">' . __( 'Add-ons', 'download-monitor' ) . '</a>',
|
94 |
-
'<a href="https://github.com/mikejolley/download-monitor/wiki">' . __( 'Docs', 'download-monitor' ) . '</a>',
|
95 |
-
);
|
96 |
-
return array_merge( $plugin_links, $links );
|
97 |
-
}
|
98 |
-
|
99 |
-
/**
|
100 |
-
* frontend_scripts function.
|
101 |
-
*
|
102 |
-
* @access public
|
103 |
-
* @return void
|
104 |
-
*/
|
105 |
-
public function frontend_scripts() {
|
106 |
-
wp_enqueue_style( 'dlm-frontend', $this->plugin_url() . '/assets/css/frontend.css' );
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Localisation
|
111 |
-
*
|
112 |
-
* @access private
|
113 |
-
* @return void
|
114 |
-
*/
|
115 |
-
public function load_plugin_textdomain() {
|
116 |
-
load_textdomain( 'download-monitor', WP_LANG_DIR . '/download-monitor/download_monitor-' . get_locale() . '.mo' );
|
117 |
-
load_plugin_textdomain( 'download-monitor', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Register environment globals
|
122 |
-
*
|
123 |
-
* @access private
|
124 |
-
* @return void
|
125 |
-
*/
|
126 |
-
public function register_globals() {
|
127 |
-
$GLOBALS['dlm_download'] = null;
|
128 |
-
}
|
129 |
-
|
130 |
-
/**
|
131 |
-
* When the_post is called, get product data too
|
132 |
-
*
|
133 |
-
* @access public
|
134 |
-
* @param mixed $post
|
135 |
-
* @return void
|
136 |
-
*/
|
137 |
-
public function setup_download_data( $post ) {
|
138 |
-
if ( is_int( $post ) )
|
139 |
-
$post = get_post( $post );
|
140 |
-
|
141 |
-
if ( $post->post_type !== 'dlm_download' )
|
142 |
-
return;
|
143 |
-
|
144 |
-
$GLOBALS['dlm_download'] = new DLM_Download( $post->ID );
|
145 |
-
}
|
146 |
-
|
147 |
-
/**
|
148 |
-
* Add Theme Compatibility
|
149 |
-
*
|
150 |
-
* @access public
|
151 |
-
* @return void
|
152 |
-
*/
|
153 |
-
public function compatibility() {
|
154 |
-
// Post thumbnail support
|
155 |
-
if ( ! current_theme_supports( 'post-thumbnails' ) ) {
|
156 |
-
add_theme_support( 'post-thumbnails' );
|
157 |
-
remove_post_type_support( 'post', 'thumbnail' );
|
158 |
-
remove_post_type_support( 'page', 'thumbnail' );
|
159 |
-
} else {
|
160 |
-
add_post_type_support( 'download', 'thumbnail' );
|
161 |
-
}
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* install_tables function.
|
166 |
-
*
|
167 |
-
* @access public
|
168 |
-
* @return void
|
169 |
-
*/
|
170 |
-
public function install_tables() {
|
171 |
-
global $wpdb;
|
172 |
-
|
173 |
-
$wpdb->hide_errors();
|
174 |
-
|
175 |
-
$collate = '';
|
176 |
-
|
177 |
-
if ( $wpdb->has_cap( 'collation' ) ) {
|
178 |
-
if( ! empty( $wpdb->charset ) )
|
179 |
-
$collate .= "DEFAULT CHARACTER SET $wpdb->charset";
|
180 |
-
if( ! empty( $wpdb->collate ) )
|
181 |
-
$collate .= " COLLATE $wpdb->collate";
|
182 |
-
}
|
183 |
-
|
184 |
-
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
185 |
-
|
186 |
-
$dlm_tables = "
|
187 |
-
CREATE TABLE {$wpdb->download_log} (
|
188 |
-
ID bigint(20) NOT NULL auto_increment,
|
189 |
-
type varchar(200) NOT NULL default 'download',
|
190 |
-
user_id bigint(20) NOT NULL,
|
191 |
-
user_ip varchar(200) NOT NULL,
|
192 |
-
user_agent varchar(200) NOT NULL,
|
193 |
-
download_id bigint(20) NOT NULL,
|
194 |
-
version_id bigint(20) NOT NULL,
|
195 |
-
version varchar(200) NOT NULL,
|
196 |
-
download_date datetime NOT NULL default '0000-00-00 00:00:00',
|
197 |
-
download_status varchar(200) NULL,
|
198 |
-
download_status_message varchar(200) NULL,
|
199 |
-
PRIMARY KEY (ID),
|
200 |
-
KEY attribute_name (download_id)
|
201 |
-
) $collate;
|
202 |
-
";
|
203 |
-
dbDelta( $dlm_tables );
|
204 |
-
}
|
205 |
-
|
206 |
-
/**
|
207 |
-
* Init user roles
|
208 |
-
*
|
209 |
-
* @access public
|
210 |
-
* @return void
|
211 |
-
*/
|
212 |
-
public function init_user_roles() {
|
213 |
-
global $wp_roles;
|
214 |
-
|
215 |
-
if ( class_exists('WP_Roles') && ! isset( $wp_roles ) )
|
216 |
-
$wp_roles = new WP_Roles();
|
217 |
-
|
218 |
-
if ( is_object( $wp_roles ) ) {
|
219 |
-
$wp_roles->add_cap( 'administrator', 'manage_downloads' );
|
220 |
-
}
|
221 |
-
}
|
222 |
-
|
223 |
-
/**
|
224 |
-
* Init taxonomies
|
225 |
-
*
|
226 |
-
* @access public
|
227 |
-
* @return void
|
228 |
-
*/
|
229 |
-
public function init_taxonomy() {
|
230 |
-
|
231 |
-
if ( post_type_exists( "dlm_download" ) )
|
232 |
-
return;
|
233 |
-
/**
|
234 |
-
* Taxonomies
|
235 |
-
*/
|
236 |
-
register_taxonomy( 'dlm_download_category',
|
237 |
-
array( 'dlm_download' ),
|
238 |
-
apply_filters( 'dlm_download_category_args', array(
|
239 |
-
'hierarchical' => true,
|
240 |
-
'update_count_callback' => '_update_post_term_count',
|
241 |
-
'label' => __( 'Categories', 'download-monitor'),
|
242 |
-
'labels' => array(
|
243 |
-
'name' => __( 'Categories', 'download-monitor'),
|
244 |
-
'singular_name' => __( 'Download Category', 'download-monitor'),
|
245 |
-
'search_items' => __( 'Search Download Categories', 'download-monitor'),
|
246 |
-
'all_items' => __( 'All Download Categories', 'download-monitor'),
|
247 |
-
'parent_item' => __( 'Parent Download Category', 'download-monitor'),
|
248 |
-
'parent_item_colon' => __( 'Parent Download Category:', 'download-monitor'),
|
249 |
-
'edit_item' => __( 'Edit Download Category', 'download-monitor'),
|
250 |
-
'update_item' => __( 'Update Download Category', 'download-monitor'),
|
251 |
-
'add_new_item' => __( 'Add New Download Category', 'download-monitor'),
|
252 |
-
'new_item_name' => __( 'New Download Category Name', 'download-monitor')
|
253 |
-
),
|
254 |
-
'show_ui' => true,
|
255 |
-
'query_var' => true,
|
256 |
-
'capabilities' => array(
|
257 |
-
'manage_terms' => 'manage_downloads',
|
258 |
-
'edit_terms' => 'manage_downloads',
|
259 |
-
'delete_terms' => 'manage_downloads',
|
260 |
-
'assign_terms' => 'manage_downloads',
|
261 |
-
),
|
262 |
-
'rewrite' => false,
|
263 |
-
'show_in_nav_menus' => false
|
264 |
-
) )
|
265 |
-
);
|
266 |
-
|
267 |
-
register_taxonomy( 'dlm_download_tag',
|
268 |
-
array( 'dlm_download' ),
|
269 |
-
apply_filters( 'dlm_download_tag_args', array(
|
270 |
-
'hierarchical' => false,
|
271 |
-
'label' => __( 'Tags', 'download-monitor'),
|
272 |
-
'labels' => array(
|
273 |
-
'name' => __( 'Tags', 'download-monitor'),
|
274 |
-
'singular_name' => __( 'Download Tag', 'download-monitor'),
|
275 |
-
'search_items' => __( 'Search Download Tags', 'download-monitor'),
|
276 |
-
'all_items' => __( 'All Download Tags', 'download-monitor'),
|
277 |
-
'parent_item' => __( 'Parent Download Tag', 'download-monitor'),
|
278 |
-
'parent_item_colon' => __( 'Parent Download Tag:', 'download-monitor'),
|
279 |
-
'edit_item' => __( 'Edit Download Tag', 'download-monitor'),
|
280 |
-
'update_item' => __( 'Update Download Tag', 'download-monitor'),
|
281 |
-
'add_new_item' => __( 'Add New Download Tag', 'download-monitor'),
|
282 |
-
'new_item_name' => __( 'New Download Tag Name', 'download-monitor')
|
283 |
-
),
|
284 |
-
'show_ui' => true,
|
285 |
-
'query_var' => true,
|
286 |
-
'capabilities' => array(
|
287 |
-
'manage_terms' => 'manage_downloads',
|
288 |
-
'edit_terms' => 'manage_downloads',
|
289 |
-
'delete_terms' => 'manage_downloads',
|
290 |
-
'assign_terms' => 'manage_downloads',
|
291 |
-
),
|
292 |
-
'rewrite' => false,
|
293 |
-
'show_in_nav_menus' => false
|
294 |
-
) )
|
295 |
-
);
|
296 |
-
|
297 |
-
/**
|
298 |
-
* Post Types
|
299 |
-
*/
|
300 |
-
register_post_type( "dlm_download",
|
301 |
-
apply_filters( 'dlm_cpt_dlm_download_args', array(
|
302 |
-
'labels' => array(
|
303 |
-
'all_items' => __( 'All Downloads', 'download-monitor' ),
|
304 |
-
'name' => __( 'Downloads', 'download-monitor' ),
|
305 |
-
'singular_name' => __( 'Download', 'download-monitor' ),
|
306 |
-
'add_new' => __( 'Add New', 'download-monitor' ),
|
307 |
-
'add_new_item' => __( 'Add Download', 'download-monitor' ),
|
308 |
-
'edit' => __( 'Edit', 'download-monitor' ),
|
309 |
-
'edit_item' => __( 'Edit Download', 'download-monitor' ),
|
310 |
-
'new_item' => __( 'New Download', 'download-monitor' ),
|
311 |
-
'view' => __( 'View Download', 'download-monitor' ),
|
312 |
-
'view_item' => __( 'View Download', 'download-monitor' ),
|
313 |
-
'search_items' => __( 'Search Downloads', 'download-monitor' ),
|
314 |
-
'not_found' => __( 'No Downloads found', 'download-monitor' ),
|
315 |
-
'not_found_in_trash' => __( 'No Downloads found in trash', 'download-monitor' ),
|
316 |
-
'parent' => __( 'Parent Download', 'download-monitor' )
|
317 |
-
),
|
318 |
-
'description' => __( 'This is where you can create and manage downloads for your site.', 'download-monitor' ),
|
319 |
-
'public' => false,
|
320 |
-
'show_ui' => true,
|
321 |
-
'capability_type' => 'post',
|
322 |
-
'capabilities' => array(
|
323 |
-
'publish_posts' => 'manage_downloads',
|
324 |
-
'edit_posts' => 'manage_downloads',
|
325 |
-
'edit_others_posts' => 'manage_downloads',
|
326 |
-
'delete_posts' => 'manage_downloads',
|
327 |
-
'delete_others_posts' => 'manage_downloads',
|
328 |
-
'read_private_posts' => 'manage_downloads',
|
329 |
-
'edit_post' => 'manage_downloads',
|
330 |
-
'delete_post' => 'manage_downloads',
|
331 |
-
'read_post' => 'manage_downloads'
|
332 |
-
),
|
333 |
-
'publicly_queryable' => false,
|
334 |
-
'exclude_from_search' => true,
|
335 |
-
'hierarchical' => false,
|
336 |
-
'rewrite' => false,
|
337 |
-
'query_var' => false,
|
338 |
-
'supports' => apply_filters( 'dlm_cpt_dlm_download_supports', array( 'title', 'editor', 'excerpt', 'thumbnail', 'custom-fields' ) ),
|
339 |
-
'has_archive' => false,
|
340 |
-
'show_in_nav_menus' => false
|
341 |
-
) )
|
342 |
-
);
|
343 |
-
|
344 |
-
register_post_type( "dlm_download_version",
|
345 |
-
apply_filters( 'dlm_cpt_dlm_download_version_args', array(
|
346 |
-
'public' => false,
|
347 |
-
'show_ui' => false,
|
348 |
-
'publicly_queryable' => false,
|
349 |
-
'exclude_from_search' => true,
|
350 |
-
'hierarchical' => false,
|
351 |
-
'rewrite' => false,
|
352 |
-
'query_var' => false,
|
353 |
-
'show_in_nav_menus' => false
|
354 |
-
) )
|
355 |
-
);
|
356 |
-
}
|
357 |
-
|
358 |
-
/**
|
359 |
-
* register_widgets function.
|
360 |
-
*
|
361 |
-
* @access public
|
362 |
-
* @return void
|
363 |
-
*/
|
364 |
-
function register_widgets() {
|
365 |
-
include_once( 'includes/widgets/class-dlm-widget-downloads.php' );
|
366 |
|
367 |
-
register_widget( 'DLM_Widget_Downloads' );
|
368 |
-
}
|
369 |
-
|
370 |
-
/** Helper functions *****************************************************/
|
371 |
-
|
372 |
-
/**
|
373 |
-
* get_template_part function.
|
374 |
-
*
|
375 |
-
* @access public
|
376 |
-
* @param mixed $slug
|
377 |
-
* @param string $name (default: '')
|
378 |
-
* @return void
|
379 |
-
*/
|
380 |
-
public function get_template_part( $slug, $name = '', $custom_dir = '' ) {
|
381 |
-
$template = '';
|
382 |
-
|
383 |
-
// Look in yourtheme/slug-name.php and yourtheme/download-monitor/slug-name.php
|
384 |
-
if ( $name )
|
385 |
-
$template = locate_template( array ( "{$slug}-{$name}.php", "download-monitor/{$slug}-{$name}.php" ) );
|
386 |
-
|
387 |
-
// Get default slug-name.php
|
388 |
-
if ( ! $template && $name && file_exists( $this->plugin_path() . "/templates/{$slug}-{$name}.php" ) )
|
389 |
-
$template = $this->plugin_path() . "/templates/{$slug}-{$name}.php";
|
390 |
-
|
391 |
-
// If a custom path was defined, check that next
|
392 |
-
if ( ! $template && $custom_dir && file_exists( trailingslashit( $custom_dir ) . "{$slug}-{$name}.php" ) )
|
393 |
-
$template = trailingslashit( $custom_dir ) . "{$slug}-{$name}.php";
|
394 |
|
395 |
-
|
396 |
-
if ( ! $template )
|
397 |
-
$template = locate_template( array( "{$slug}.php", "download-monitor/{$slug}.php" ) );
|
398 |
|
399 |
-
|
400 |
-
|
401 |
-
$template = trailingslashit( $custom_dir ) . "{$slug}.php";
|
402 |
|
403 |
-
|
404 |
-
|
405 |
-
$template = $this->plugin_path() . "/templates/{$slug}.php";
|
406 |
|
407 |
-
|
408 |
-
|
409 |
-
}
|
410 |
-
|
411 |
-
/**
|
412 |
-
* Get the plugin url
|
413 |
-
*
|
414 |
-
* @access public
|
415 |
-
* @return string
|
416 |
-
*/
|
417 |
-
public function plugin_url() {
|
418 |
-
if ( $this->plugin_url )
|
419 |
-
return $this->plugin_url;
|
420 |
-
|
421 |
-
return $this->plugin_url = plugins_url( basename( plugin_dir_path(__FILE__) ), basename( __FILE__ ) );
|
422 |
-
}
|
423 |
-
|
424 |
-
/**
|
425 |
-
* Get the plugin path
|
426 |
-
*
|
427 |
-
* @access public
|
428 |
-
* @return string
|
429 |
-
*/
|
430 |
-
public function plugin_path() {
|
431 |
-
if ( $this->plugin_path )
|
432 |
-
return $this->plugin_path;
|
433 |
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
/**
|
438 |
-
* Enqueue JS to be added to the footer.
|
439 |
-
*
|
440 |
-
* @access public
|
441 |
-
* @param mixed $code
|
442 |
-
* @return void
|
443 |
-
*/
|
444 |
-
public function add_inline_js( $code ) {
|
445 |
-
$this->_inline_js .= "\n" . $code . "\n";
|
446 |
-
}
|
447 |
-
|
448 |
-
/**
|
449 |
-
* Output enqueued JS
|
450 |
-
*
|
451 |
-
* @access public
|
452 |
-
* @return void
|
453 |
-
*/
|
454 |
-
public function output_inline_js() {
|
455 |
-
if ( $this->_inline_js ) {
|
456 |
-
echo "<!-- Download Monitor JavaScript-->\n<script type=\"text/javascript\">\njQuery(document).ready(function($) {";
|
457 |
-
echo $this->_inline_js;
|
458 |
-
echo "});\n</script>\n";
|
459 |
-
$this->_inline_js = '';
|
460 |
-
}
|
461 |
-
}
|
462 |
-
|
463 |
-
/**
|
464 |
-
* Returns a listing of all files in the specified folder and all subdirectories up to 100 levels deep.
|
465 |
-
* The depth of the recursiveness can be controlled by the $levels param.
|
466 |
-
*
|
467 |
-
* @access public
|
468 |
-
* @param string $folder (default: '')
|
469 |
-
* @return void
|
470 |
-
*/
|
471 |
-
function list_files( $folder = '' ) {
|
472 |
-
if ( empty($folder) )
|
473 |
-
return false;
|
474 |
-
|
475 |
-
$files = array();
|
476 |
-
if ( $dir = @opendir( $folder ) ) {
|
477 |
-
while (($file = readdir( $dir ) ) !== false ) {
|
478 |
-
if ( in_array($file, array('.', '..') ) )
|
479 |
-
continue;
|
480 |
-
if ( is_dir( $folder . '/' . $file ) ) {
|
481 |
-
|
482 |
-
$files[] = array(
|
483 |
-
'type' => 'folder',
|
484 |
-
'path' => $folder . '/' . $file
|
485 |
-
);
|
486 |
-
|
487 |
-
} else {
|
488 |
-
|
489 |
-
$files[] = array(
|
490 |
-
'type' => 'file',
|
491 |
-
'path' => $folder . '/' . $file
|
492 |
-
);
|
493 |
-
|
494 |
-
}
|
495 |
-
}
|
496 |
-
}
|
497 |
-
@closedir( $dir );
|
498 |
-
return $files;
|
499 |
-
}
|
500 |
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
* @access public
|
505 |
-
* @return void
|
506 |
-
*/
|
507 |
-
public function directory_protection() {
|
508 |
-
|
509 |
-
// Install files and folders for uploading files and prevent hotlinking
|
510 |
-
$upload_dir = wp_upload_dir();
|
511 |
-
|
512 |
-
$files = array(
|
513 |
-
array(
|
514 |
-
'base' => $upload_dir['basedir'] . '/dlm_uploads',
|
515 |
-
'file' => '.htaccess',
|
516 |
-
'content' => 'deny from all'
|
517 |
-
),
|
518 |
-
array(
|
519 |
-
'base' => $upload_dir['basedir'] . '/dlm_uploads',
|
520 |
-
'file' => 'index.html',
|
521 |
-
'content' => ''
|
522 |
-
)
|
523 |
-
);
|
524 |
-
|
525 |
-
foreach ( $files as $file ) {
|
526 |
-
if ( wp_mkdir_p( $file['base'] ) && ! file_exists( trailingslashit( $file['base'] ) . $file['file'] ) ) {
|
527 |
-
if ( $file_handle = @fopen( trailingslashit( $file['base'] ) . $file['file'], 'w' ) ) {
|
528 |
-
fwrite( $file_handle, $file['content'] );
|
529 |
-
fclose( $file_handle );
|
530 |
-
}
|
531 |
-
}
|
532 |
-
}
|
533 |
-
}
|
534 |
-
|
535 |
-
/**
|
536 |
-
* Parse a file path and return the new path and whether or not it's remote
|
537 |
-
* @param string $file_path
|
538 |
-
* @return array
|
539 |
-
*/
|
540 |
-
public function parse_file_path( $file_path ) {
|
541 |
-
$remote_file = true;
|
542 |
-
$parsed_file_path = parse_url( $file_path );
|
543 |
-
|
544 |
-
$wp_uploads = wp_upload_dir();
|
545 |
-
$wp_uploads_dir = $wp_uploads['basedir'];
|
546 |
-
$wp_uploads_url = $wp_uploads['baseurl'];
|
547 |
-
|
548 |
-
if ( ( ! isset( $parsed_file_path['scheme'] ) || ! in_array( $parsed_file_path['scheme'], array( 'http', 'https', 'ftp' ) ) ) && isset( $parsed_file_path['path'] ) && file_exists( $parsed_file_path['path'] ) ) {
|
549 |
-
|
550 |
-
/** This is an absolute path */
|
551 |
-
$remote_file = false;
|
552 |
-
|
553 |
-
} elseif( strpos( $file_path, $wp_uploads_url ) !== false ) {
|
554 |
-
|
555 |
-
/** This is a local file given by URL so we need to figure out the path */
|
556 |
-
$remote_file = false;
|
557 |
-
$file_path = str_replace( $wp_uploads_url, $wp_uploads_dir, $file_path );
|
558 |
-
$file_path = realpath( $file_path );
|
559 |
-
|
560 |
-
} elseif( is_multisite() && ( strpos( $file_path, network_site_url( '/', 'http' ) ) !== false || strpos( $file_path, network_site_url( '/', 'https' ) ) !== false ) ) {
|
561 |
-
|
562 |
-
/** This is a local file outside of wp-content so figure out the path */
|
563 |
-
$remote_file = false;
|
564 |
-
// Try to replace network url
|
565 |
-
$file_path = str_replace( network_site_url( '/', 'https' ), ABSPATH, $file_path );
|
566 |
-
$file_path = str_replace( network_site_url( '/', 'http' ), ABSPATH, $file_path );
|
567 |
-
// Try to replace upload URL
|
568 |
-
$file_path = str_replace( $wp_uploads_url, $wp_uploads_dir, $file_path );
|
569 |
-
$file_path = realpath( $file_path );
|
570 |
-
|
571 |
-
} elseif( strpos( $file_path, site_url( '/', 'http' ) ) !== false || strpos( $file_path, site_url( '/', 'https' ) ) !== false ) {
|
572 |
-
|
573 |
-
/** This is a local file outside of wp-content so figure out the path */
|
574 |
-
$remote_file = false;
|
575 |
-
$file_path = str_replace( site_url( '/', 'https' ), ABSPATH, $file_path );
|
576 |
-
$file_path = str_replace( site_url( '/', 'http' ), ABSPATH, $file_path );
|
577 |
-
$file_path = realpath( $file_path );
|
578 |
-
|
579 |
-
} elseif ( file_exists( ABSPATH . $file_path ) ) {
|
580 |
-
|
581 |
-
/** Path needs an abspath to work */
|
582 |
-
$remote_file = false;
|
583 |
-
$file_path = ABSPATH . $file_path;
|
584 |
-
$file_path = realpath( $file_path );
|
585 |
-
}
|
586 |
-
|
587 |
-
return array( $file_path, $remote_file );
|
588 |
-
}
|
589 |
-
|
590 |
-
/**
|
591 |
-
* Gets the filesize of a path or URL.
|
592 |
-
*
|
593 |
-
* @access public
|
594 |
-
* @return string size on success, -1 on failure
|
595 |
-
*/
|
596 |
-
public function get_filesize( $file_path ) {
|
597 |
-
if ( $file_path ) {
|
598 |
-
list( $file_path, $remote_file ) = $this->parse_file_path( $file_path );
|
599 |
|
600 |
-
|
601 |
-
|
602 |
-
$file = wp_remote_head( $file_path );
|
603 |
|
604 |
-
|
605 |
-
return $file['headers']['content-length'];
|
606 |
-
}
|
607 |
-
} else {
|
608 |
-
if ( file_exists( $file_path ) && ( $filesize = filesize( $file_path ) ) ) {
|
609 |
-
return $filesize;
|
610 |
-
}
|
611 |
-
}
|
612 |
-
}
|
613 |
-
}
|
614 |
|
615 |
-
|
616 |
-
}
|
617 |
|
618 |
-
|
619 |
-
|
620 |
-
*
|
621 |
-
* @access public
|
622 |
-
* @return array of sizes
|
623 |
-
*/
|
624 |
-
public function get_file_hashes( $file_path ) {
|
625 |
-
$md5 = false;
|
626 |
-
$sha1 = false;
|
627 |
-
$crc32 = false;
|
628 |
|
629 |
-
|
630 |
-
|
631 |
|
632 |
-
|
633 |
-
|
634 |
-
if ( get_option( 'dlm_generate_hash_md5' ) ) {
|
635 |
-
$md5 = hash_file( 'md5', $file_path );
|
636 |
-
}
|
637 |
-
if ( get_option( 'dlm_generate_hash_sha1' ) ) {
|
638 |
-
$sha1 = hash_file( 'sha1', $file_path );
|
639 |
-
}
|
640 |
-
if ( get_option( 'dlm_generate_hash_crc32b' ) ) {
|
641 |
-
$crc32 = hash_file( 'crc32b', $file_path );
|
642 |
-
}
|
643 |
-
}
|
644 |
-
}
|
645 |
-
}
|
646 |
|
647 |
-
|
648 |
-
|
649 |
|
650 |
-
/**
|
651 |
-
* Encode files for storage
|
652 |
-
* @param array $files
|
653 |
-
* @return string
|
654 |
-
*/
|
655 |
-
public function json_encode_files( $files ) {
|
656 |
-
if ( version_compare( phpversion(), "5.4.0", ">=" ) ) {
|
657 |
-
$files = json_encode( $files, JSON_UNESCAPED_UNICODE );
|
658 |
-
} else {
|
659 |
-
$files = json_encode( $files );
|
660 |
-
if ( function_exists( 'mb_convert_encoding' ) ) {
|
661 |
-
$files = preg_replace_callback( '/\\\\u([0-9a-f]{4})/i', array( $this, 'json_unscaped_unicode_fallback' ), $files );
|
662 |
-
}
|
663 |
-
}
|
664 |
-
return $files;
|
665 |
}
|
666 |
|
667 |
-
|
668 |
-
|
669 |
-
* @param array $matches
|
670 |
-
* @return string
|
671 |
-
*/
|
672 |
-
public function json_unscaped_unicode_fallback( $matches ) {
|
673 |
-
$sym = mb_convert_encoding(
|
674 |
-
pack( 'H*', $matches[1] ),
|
675 |
-
'UTF-8',
|
676 |
-
'UTF-16'
|
677 |
-
);
|
678 |
-
return $sym;
|
679 |
-
}
|
680 |
-
}
|
681 |
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
$GLOBALS['download_monitor'] = new WP_DLM();
|
1 |
<?php
|
2 |
/*
|
3 |
+
Plugin Name: Download Monitor
|
4 |
+
Plugin URI: https://www.download-monitor.com
|
5 |
+
Description: A full solution for managing downloadable files, monitoring downloads and outputting download links and file information on your WordPress powered site.
|
6 |
+
Version: 1.6.0
|
7 |
+
Author: Barry Kooij & Mike Jolley
|
8 |
+
Author URI: http://www.download-monitor.com
|
9 |
+
Requires at least: 3.8
|
10 |
+
Tested up to: 4.1
|
11 |
+
|
12 |
+
License: GPL v3
|
13 |
+
|
14 |
+
This program is free software: you can redistribute it and/or modify
|
15 |
+
it under the terms of the GNU General Public License as published by
|
16 |
+
the Free Software Foundation, either version 3 of the License, or
|
17 |
+
(at your option) any later version.
|
18 |
+
|
19 |
+
This program is distributed in the hope that it will be useful,
|
20 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
21 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
22 |
+
GNU General Public License for more details.
|
23 |
+
|
24 |
+
You should have received a copy of the GNU General Public License
|
25 |
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
26 |
*/
|
27 |
|
28 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
29 |
+
exit;
|
30 |
+
} // Exit if accessed directly
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
+
function __download_monitor_main() {
|
|
|
|
|
34 |
|
35 |
+
// Define DLM Version
|
36 |
+
define( 'DLM_VERSION', '1.6.0' );
|
|
|
37 |
|
38 |
+
// Define DLM FILE
|
39 |
+
define( 'DLM_PLUGIN_FILE', __FILE__ );
|
|
|
40 |
|
41 |
+
// Require class file
|
42 |
+
require_once plugin_dir_path( DLM_PLUGIN_FILE ) . 'includes/class-wp-dlm.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
+
// Create DLM object
|
45 |
+
$dlm = new WP_DLM();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
|
47 |
+
// Backwards compatibility
|
48 |
+
$GLOBALS['download_monitor'] = $dlm;
|
49 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
+
// Init plugin
|
52 |
+
add_action( 'plugins_loaded', '__download_monitor_main', 10 );
|
|
|
53 |
|
54 |
+
if ( is_admin() && ! is_multisite() && ( false === defined( 'DOING_AJAX' ) || false === DOING_AJAX ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
56 |
+
define( 'DLM_PLUGIN_FILE_INSTALLER', __FILE__ );
|
|
|
57 |
|
58 |
+
// Installer function
|
59 |
+
function __download_monitor_install() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
+
// Load installer functions
|
62 |
+
require_once plugin_dir_path( DLM_PLUGIN_FILE_INSTALLER ) . 'includes/class-dlm-installer.php';
|
63 |
|
64 |
+
// DLM Installer
|
65 |
+
$installer = new DLM_Installer();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
|
67 |
+
// Install DLM
|
68 |
+
$installer->install();
|
69 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
|
72 |
+
// Activation hook
|
73 |
+
register_activation_hook( DLM_PLUGIN_FILE_INSTALLER, '__download_monitor_install' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
+
// Flush Rewrites on Activation
|
76 |
+
register_activation_hook( DLM_PLUGIN_FILE_INSTALLER, 'flush_rewrite_rules', 11 );
|
77 |
+
}
|
|
includes/admin/class-dlm-addons.php
DELETED
@@ -1,59 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Addons Page
|
4 |
-
*/
|
5 |
-
|
6 |
-
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
7 |
-
|
8 |
-
if ( ! class_exists( 'DLM_Addons' ) ) :
|
9 |
-
|
10 |
-
/**
|
11 |
-
* DLM_Addons Class
|
12 |
-
*/
|
13 |
-
class DLM_Addons {
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Handles output of the reports page in admin.
|
17 |
-
*/
|
18 |
-
public function output() {
|
19 |
-
|
20 |
-
if ( false === ( $addons = get_transient( 'download_monitor_addons_html' ) ) ) {
|
21 |
-
|
22 |
-
$raw_addons = wp_remote_get( 'http://mikejolley.com/projects/download-monitor/add-ons/' );
|
23 |
-
|
24 |
-
if ( ! is_wp_error( $raw_addons ) ) {
|
25 |
-
|
26 |
-
$raw_addons = wp_remote_retrieve_body( $raw_addons );
|
27 |
-
|
28 |
-
// Get Products
|
29 |
-
$dom = new DOMDocument();
|
30 |
-
libxml_use_internal_errors(true);
|
31 |
-
$dom->loadHTML( $raw_addons );
|
32 |
-
|
33 |
-
$xpath = new DOMXPath( $dom );
|
34 |
-
$tags = $xpath->query('//ul[@class="items"]');
|
35 |
-
foreach ( $tags as $tag ) {
|
36 |
-
$addons = $tag->ownerDocument->saveXML( $tag );
|
37 |
-
break;
|
38 |
-
}
|
39 |
-
|
40 |
-
$addons = wp_kses_post( $addons );
|
41 |
-
|
42 |
-
if ( $addons )
|
43 |
-
set_transient( 'download_monitor_addons_html', $addons, 60*60*24*7 ); // Cached for a week
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
?>
|
48 |
-
<div class="wrap dlm_addons_wrap">
|
49 |
-
<div class="icon32 icon32-posts-dlm_download" id="icon-edit"><br /></div>
|
50 |
-
<h2><?php _e( 'Download Monitor Add-ons', 'download-monitor' ); ?></h2>
|
51 |
-
<?php echo $addons; ?>
|
52 |
-
</div>
|
53 |
-
<?php
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
endif;
|
58 |
-
|
59 |
-
return new DLM_Addons();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/admin/class-dlm-admin-cpt.php
CHANGED
@@ -1,9 +1,14 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Admin_CPT class.
|
|
|
|
|
|
|
7 |
*/
|
8 |
class DLM_Admin_CPT {
|
9 |
|
@@ -11,7 +16,6 @@ class DLM_Admin_CPT {
|
|
11 |
* __construct function.
|
12 |
*
|
13 |
* @access public
|
14 |
-
* @return void
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
add_action( "restrict_manage_posts", array( $this, "downloads_by_category" ) );
|
@@ -28,42 +32,48 @@ class DLM_Admin_CPT {
|
|
28 |
* downloads_by_category function.
|
29 |
*
|
30 |
* @access public
|
|
|
31 |
* @param int $show_counts (default: 1)
|
32 |
* @param int $hierarchical (default: 1)
|
33 |
* @param int $show_uncategorized (default: 1)
|
34 |
* @param string $orderby (default: '')
|
|
|
35 |
* @return void
|
36 |
*/
|
37 |
public function downloads_by_category( $show_counts = 1, $hierarchical = 1, $show_uncategorized = 1, $orderby = '' ) {
|
38 |
global $typenow, $wp_query;
|
39 |
|
40 |
-
|
41 |
-
|
|
|
42 |
|
43 |
include_once( 'class-dlm-category-walker.php' );
|
44 |
|
45 |
-
$r
|
46 |
-
$r['pad_counts']
|
47 |
-
$r['hierarchical']
|
48 |
-
$r['hide_empty']
|
49 |
-
$r['show_count']
|
50 |
-
$r['selected']
|
51 |
|
52 |
$r['menu_order'] = false;
|
53 |
|
54 |
-
if ( $orderby == 'order' )
|
55 |
$r['menu_order'] = 'asc';
|
56 |
-
elseif ( $orderby )
|
57 |
$r['orderby'] = $orderby;
|
|
|
58 |
|
59 |
$terms = get_terms( 'dlm_download_category', $r );
|
60 |
|
61 |
-
if (
|
|
|
|
|
62 |
|
63 |
-
$output
|
64 |
-
$output .= '<option value="" ' .
|
65 |
$output .= $this->walk_category_dropdown_tree( $terms, 0, $r );
|
66 |
-
$output .="</select>";
|
67 |
|
68 |
echo $output;
|
69 |
}
|
@@ -78,37 +88,45 @@ class DLM_Admin_CPT {
|
|
78 |
$args = func_get_args();
|
79 |
|
80 |
// the user's options are the third parameter
|
81 |
-
if ( empty($args[2]['walker']) || !is_a($args[2]['walker'], 'Walker') )
|
82 |
-
$walker = new DLM_Category_Walker;
|
83 |
-
else
|
84 |
$walker = $args[2]['walker'];
|
|
|
85 |
|
86 |
return call_user_func_array( array( $walker, 'walk' ), $args );
|
87 |
}
|
|
|
88 |
/**
|
89 |
* delete_post function.
|
90 |
*
|
91 |
* @access public
|
|
|
92 |
* @param mixed $id
|
|
|
93 |
* @return void
|
94 |
*/
|
95 |
public function delete_post( $id ) {
|
96 |
global $wpdb;
|
97 |
|
98 |
-
if ( ! current_user_can( 'delete_posts' ) )
|
99 |
return;
|
|
|
100 |
|
101 |
if ( $id > 0 ) {
|
102 |
|
103 |
$post_type = get_post_type( $id );
|
104 |
|
105 |
-
switch( $post_type ) {
|
106 |
case 'dlm_download' :
|
107 |
-
if ( $versions =& get_children( 'post_parent=' . $id . '&post_type=dlm_download_version' ) )
|
108 |
-
if ( $versions )
|
109 |
-
foreach ( $versions as $child )
|
110 |
wp_delete_post( $child->ID, true );
|
111 |
-
|
|
|
|
|
|
|
112 |
}
|
113 |
}
|
114 |
}
|
@@ -120,8 +138,10 @@ class DLM_Admin_CPT {
|
|
120 |
* @return void
|
121 |
*/
|
122 |
public function enter_title_here( $text, $post ) {
|
123 |
-
if ( $post->post_type
|
124 |
return __( 'Download title', 'download-monitor' );
|
|
|
|
|
125 |
return $text;
|
126 |
}
|
127 |
|
@@ -129,25 +149,27 @@ class DLM_Admin_CPT {
|
|
129 |
* post_updated_messages function.
|
130 |
*
|
131 |
* @access public
|
|
|
132 |
* @param mixed $messages
|
|
|
133 |
* @return void
|
134 |
*/
|
135 |
public function post_updated_messages( $messages ) {
|
136 |
-
global $post
|
137 |
|
138 |
$messages['dlm_download'] = array(
|
139 |
-
0
|
140 |
-
1
|
141 |
-
2
|
142 |
-
3
|
143 |
-
4
|
144 |
-
5
|
145 |
-
6
|
146 |
-
7
|
147 |
-
8
|
148 |
-
9
|
149 |
-
|
150 |
-
10 => __('Download draft updated.', 'download-monitor'),
|
151 |
);
|
152 |
|
153 |
return $messages;
|
@@ -157,25 +179,27 @@ class DLM_Admin_CPT {
|
|
157 |
* columns function.
|
158 |
*
|
159 |
* @access public
|
|
|
160 |
* @param mixed $columns
|
161 |
-
*
|
|
|
162 |
*/
|
163 |
public function columns( $columns ) {
|
164 |
$columns = array();
|
165 |
|
166 |
$columns["cb"] = "<input type=\"checkbox\" />";
|
167 |
-
$columns["thumb"] = '<span>' . __("Image", 'download-monitor') . '</span>';
|
168 |
-
$columns["title"] = __("Title", 'download-monitor');
|
169 |
-
$columns["download_id"] = __("ID", 'download-monitor');
|
170 |
-
$columns["file"] = __("File", 'download-monitor');
|
171 |
-
$columns["version"] = __("Version", 'download-monitor');
|
172 |
-
$columns["download_cat"] = __("Categories", 'download-monitor');
|
173 |
-
$columns["download_tag"] = __("Tags", 'download-monitor');
|
174 |
$columns["download_count"] = __( "Download count", 'download-monitor' );
|
175 |
$columns["featured"] = __( "Featured", 'download-monitor' );
|
176 |
$columns["members_only"] = __( "Members only", 'download-monitor' );
|
177 |
$columns["redirect_only"] = __( "Redirect only", 'download-monitor' );
|
178 |
-
$columns["date"] = __("Date posted", 'download-monitor');
|
179 |
|
180 |
return $columns;
|
181 |
}
|
@@ -184,78 +208,87 @@ class DLM_Admin_CPT {
|
|
184 |
* custom_columns function.
|
185 |
*
|
186 |
* @access public
|
|
|
187 |
* @param mixed $column
|
|
|
188 |
* @return void
|
189 |
*/
|
190 |
public function custom_columns( $column ) {
|
191 |
-
global $post
|
192 |
|
193 |
-
$download
|
194 |
-
$file
|
195 |
|
196 |
-
switch ($column) {
|
197 |
case "thumb" :
|
198 |
echo $download->get_the_image();
|
199 |
-
|
200 |
case "download_id" :
|
201 |
echo $post->ID;
|
202 |
-
|
203 |
case "download_cat" :
|
204 |
-
if ( ! $terms = get_the_term_list( $post->ID, 'dlm_download_category', '', ', ', '' ) )
|
205 |
-
|
|
|
|
|
|
|
|
|
206 |
case "download_tag" :
|
207 |
-
if ( ! $terms = get_the_term_list( $post->ID, 'dlm_download_tag', '', ', ', '' ) )
|
208 |
-
|
|
|
|
|
|
|
|
|
209 |
case "featured" :
|
210 |
-
|
211 |
-
if ( $download->is_featured() )
|
212 |
echo '<span class="yes">' . __( 'Yes', 'download-monitor' ) . '</span>';
|
213 |
-
else
|
214 |
echo '<span class="na">–</span>';
|
215 |
-
|
216 |
-
|
217 |
case "members_only" :
|
218 |
-
|
219 |
-
if ( $download->is_members_only() )
|
220 |
echo '<span class="yes">' . __( 'Yes', 'download-monitor' ) . '</span>';
|
221 |
-
else
|
222 |
echo '<span class="na">–</span>';
|
223 |
-
|
224 |
-
|
225 |
case "redirect_only" :
|
226 |
-
|
227 |
-
if ( $download->redirect_only() )
|
228 |
echo '<span class="yes">' . __( 'Yes', 'download-monitor' ) . '</span>';
|
229 |
-
else
|
230 |
echo '<span class="na">–</span>';
|
231 |
-
|
232 |
-
|
233 |
case "file" :
|
234 |
if ( $file ) {
|
235 |
echo '<a href="' . $download->get_the_download_link() . '"><code>' . $file->filename;
|
236 |
-
if ( $size = $download->get_the_filesize() )
|
237 |
echo ' – ' . $size;
|
|
|
238 |
echo '</code></a>';
|
239 |
-
} else
|
240 |
echo '<span class="na">–</span>';
|
241 |
-
|
|
|
242 |
case "version" :
|
243 |
-
if ( $file && $file->version )
|
244 |
echo $file->version;
|
245 |
-
else
|
246 |
echo '<span class="na">–</span>';
|
247 |
-
|
|
|
248 |
case "download_count" :
|
249 |
echo number_format( $download->get_the_download_count(), 0, '.', ',' );
|
250 |
-
|
251 |
case "featured" :
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
else
|
256 |
echo '<span class="na">–</span>';
|
257 |
-
|
258 |
-
|
259 |
}
|
260 |
}
|
261 |
|
@@ -263,7 +296,9 @@ class DLM_Admin_CPT {
|
|
263 |
* sortable_columns function.
|
264 |
*
|
265 |
* @access public
|
|
|
266 |
* @param mixed $columns
|
|
|
267 |
* @return void
|
268 |
*/
|
269 |
public function sortable_columns( $columns ) {
|
@@ -274,6 +309,7 @@ class DLM_Admin_CPT {
|
|
274 |
'members_only' => 'members_only',
|
275 |
'redirect_only' => 'redirect_only',
|
276 |
);
|
|
|
277 |
return wp_parse_args( $custom, $columns );
|
278 |
}
|
279 |
|
@@ -281,40 +317,42 @@ class DLM_Admin_CPT {
|
|
281 |
* sort_columns function.
|
282 |
*
|
283 |
* @access public
|
|
|
284 |
* @param mixed $vars
|
|
|
285 |
* @return void
|
286 |
*/
|
287 |
public function sort_columns( $vars ) {
|
288 |
if ( isset( $vars['orderby'] ) ) {
|
289 |
-
if ( 'download_id' == $vars['orderby'] )
|
290 |
$vars['orderby'] = 'ID';
|
291 |
-
|
292 |
-
elseif ( 'download_count' == $vars['orderby'] )
|
293 |
$vars = array_merge( $vars, array(
|
294 |
-
'meta_key'
|
295 |
-
'orderby'
|
296 |
) );
|
297 |
|
298 |
-
elseif ( 'featured' == $vars['orderby'] )
|
299 |
$vars = array_merge( $vars, array(
|
300 |
-
'meta_key'
|
301 |
-
'orderby'
|
302 |
) );
|
303 |
|
304 |
-
elseif ( 'members_only' == $vars['orderby'] )
|
305 |
$vars = array_merge( $vars, array(
|
306 |
-
'meta_key'
|
307 |
-
'orderby'
|
308 |
) );
|
309 |
|
310 |
-
elseif ( 'redirect_only' == $vars['orderby'] )
|
311 |
$vars = array_merge( $vars, array(
|
312 |
-
'meta_key'
|
313 |
-
'orderby'
|
314 |
) );
|
|
|
315 |
}
|
|
|
316 |
return $vars;
|
317 |
}
|
318 |
-
}
|
319 |
|
320 |
-
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Admin_CPT class.
|
9 |
+
*
|
10 |
+
* Add/modify CPT screen
|
11 |
+
*
|
12 |
*/
|
13 |
class DLM_Admin_CPT {
|
14 |
|
16 |
* __construct function.
|
17 |
*
|
18 |
* @access public
|
|
|
19 |
*/
|
20 |
public function __construct() {
|
21 |
add_action( "restrict_manage_posts", array( $this, "downloads_by_category" ) );
|
32 |
* downloads_by_category function.
|
33 |
*
|
34 |
* @access public
|
35 |
+
*
|
36 |
* @param int $show_counts (default: 1)
|
37 |
* @param int $hierarchical (default: 1)
|
38 |
* @param int $show_uncategorized (default: 1)
|
39 |
* @param string $orderby (default: '')
|
40 |
+
*
|
41 |
* @return void
|
42 |
*/
|
43 |
public function downloads_by_category( $show_counts = 1, $hierarchical = 1, $show_uncategorized = 1, $orderby = '' ) {
|
44 |
global $typenow, $wp_query;
|
45 |
|
46 |
+
if ( $typenow != 'dlm_download' ) {
|
47 |
+
return;
|
48 |
+
}
|
49 |
|
50 |
include_once( 'class-dlm-category-walker.php' );
|
51 |
|
52 |
+
$r = array();
|
53 |
+
$r['pad_counts'] = 1;
|
54 |
+
$r['hierarchical'] = $hierarchical;
|
55 |
+
$r['hide_empty'] = 1;
|
56 |
+
$r['show_count'] = $show_counts;
|
57 |
+
$r['selected'] = ( isset( $wp_query->query['dlm_download_category'] ) ) ? $wp_query->query['dlm_download_category'] : '';
|
58 |
|
59 |
$r['menu_order'] = false;
|
60 |
|
61 |
+
if ( $orderby == 'order' ) {
|
62 |
$r['menu_order'] = 'asc';
|
63 |
+
} elseif ( $orderby ) {
|
64 |
$r['orderby'] = $orderby;
|
65 |
+
}
|
66 |
|
67 |
$terms = get_terms( 'dlm_download_category', $r );
|
68 |
|
69 |
+
if ( ! $terms ) {
|
70 |
+
return;
|
71 |
+
}
|
72 |
|
73 |
+
$output = "<select name='dlm_download_category' id='dropdown_dlm_download_category'>";
|
74 |
+
$output .= '<option value="" ' . selected( isset( $_GET['dlm_download_category'] ) ? $_GET['dlm_download_category'] : '', '', false ) . '>' . __( 'Select a category', 'download-monitor' ) . '</option>';
|
75 |
$output .= $this->walk_category_dropdown_tree( $terms, 0, $r );
|
76 |
+
$output .= "</select>";
|
77 |
|
78 |
echo $output;
|
79 |
}
|
88 |
$args = func_get_args();
|
89 |
|
90 |
// the user's options are the third parameter
|
91 |
+
if ( empty( $args[2]['walker'] ) || ! is_a( $args[2]['walker'], 'Walker' ) ) {
|
92 |
+
$walker = new DLM_Category_Walker();
|
93 |
+
} else {
|
94 |
$walker = $args[2]['walker'];
|
95 |
+
}
|
96 |
|
97 |
return call_user_func_array( array( $walker, 'walk' ), $args );
|
98 |
}
|
99 |
+
|
100 |
/**
|
101 |
* delete_post function.
|
102 |
*
|
103 |
* @access public
|
104 |
+
*
|
105 |
* @param mixed $id
|
106 |
+
*
|
107 |
* @return void
|
108 |
*/
|
109 |
public function delete_post( $id ) {
|
110 |
global $wpdb;
|
111 |
|
112 |
+
if ( ! current_user_can( 'delete_posts' ) ) {
|
113 |
return;
|
114 |
+
}
|
115 |
|
116 |
if ( $id > 0 ) {
|
117 |
|
118 |
$post_type = get_post_type( $id );
|
119 |
|
120 |
+
switch ( $post_type ) {
|
121 |
case 'dlm_download' :
|
122 |
+
if ( $versions =& get_children( 'post_parent=' . $id . '&post_type=dlm_download_version' ) ) {
|
123 |
+
if ( $versions ) {
|
124 |
+
foreach ( $versions as $child ) {
|
125 |
wp_delete_post( $child->ID, true );
|
126 |
+
}
|
127 |
+
}
|
128 |
+
}
|
129 |
+
break;
|
130 |
}
|
131 |
}
|
132 |
}
|
138 |
* @return void
|
139 |
*/
|
140 |
public function enter_title_here( $text, $post ) {
|
141 |
+
if ( 'dlm_download' == $post->post_type ) {
|
142 |
return __( 'Download title', 'download-monitor' );
|
143 |
+
}
|
144 |
+
|
145 |
return $text;
|
146 |
}
|
147 |
|
149 |
* post_updated_messages function.
|
150 |
*
|
151 |
* @access public
|
152 |
+
*
|
153 |
* @param mixed $messages
|
154 |
+
*
|
155 |
* @return void
|
156 |
*/
|
157 |
public function post_updated_messages( $messages ) {
|
158 |
+
global $post;
|
159 |
|
160 |
$messages['dlm_download'] = array(
|
161 |
+
0 => '', // Unused. Messages start at index 1.
|
162 |
+
1 => __( 'Download updated.', 'download-monitor' ),
|
163 |
+
2 => __( 'Custom field updated.', 'download-monitor' ),
|
164 |
+
3 => __( 'Custom field deleted.', 'download-monitor' ),
|
165 |
+
4 => __( 'Download updated.', 'download-monitor' ),
|
166 |
+
5 => isset( $_GET['revision'] ) ? sprintf( __( 'Download restored to revision from %s', 'download-monitor' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
|
167 |
+
6 => __( 'Download published.', 'download-monitor' ),
|
168 |
+
7 => __( 'Download saved.', 'download-monitor' ),
|
169 |
+
8 => __( 'Download submitted.', 'download-monitor' ),
|
170 |
+
9 => sprintf( __( 'Download scheduled for: <strong>%1$s</strong>.', 'download-monitor' ),
|
171 |
+
date_i18n( __( 'M j, Y @ G:i', 'download-monitor' ), strtotime( $post->post_date ) ) ),
|
172 |
+
10 => __( 'Download draft updated.', 'download-monitor' ),
|
173 |
);
|
174 |
|
175 |
return $messages;
|
179 |
* columns function.
|
180 |
*
|
181 |
* @access public
|
182 |
+
*
|
183 |
* @param mixed $columns
|
184 |
+
*
|
185 |
+
* @return array
|
186 |
*/
|
187 |
public function columns( $columns ) {
|
188 |
$columns = array();
|
189 |
|
190 |
$columns["cb"] = "<input type=\"checkbox\" />";
|
191 |
+
$columns["thumb"] = '<span>' . __( "Image", 'download-monitor' ) . '</span>';
|
192 |
+
$columns["title"] = __( "Title", 'download-monitor' );
|
193 |
+
$columns["download_id"] = __( "ID", 'download-monitor' );
|
194 |
+
$columns["file"] = __( "File", 'download-monitor' );
|
195 |
+
$columns["version"] = __( "Version", 'download-monitor' );
|
196 |
+
$columns["download_cat"] = __( "Categories", 'download-monitor' );
|
197 |
+
$columns["download_tag"] = __( "Tags", 'download-monitor' );
|
198 |
$columns["download_count"] = __( "Download count", 'download-monitor' );
|
199 |
$columns["featured"] = __( "Featured", 'download-monitor' );
|
200 |
$columns["members_only"] = __( "Members only", 'download-monitor' );
|
201 |
$columns["redirect_only"] = __( "Redirect only", 'download-monitor' );
|
202 |
+
$columns["date"] = __( "Date posted", 'download-monitor' );
|
203 |
|
204 |
return $columns;
|
205 |
}
|
208 |
* custom_columns function.
|
209 |
*
|
210 |
* @access public
|
211 |
+
*
|
212 |
* @param mixed $column
|
213 |
+
*
|
214 |
* @return void
|
215 |
*/
|
216 |
public function custom_columns( $column ) {
|
217 |
+
global $post;
|
218 |
|
219 |
+
$download = new DLM_Download( $post->ID );
|
220 |
+
$file = $download->get_file_version();
|
221 |
|
222 |
+
switch ( $column ) {
|
223 |
case "thumb" :
|
224 |
echo $download->get_the_image();
|
225 |
+
break;
|
226 |
case "download_id" :
|
227 |
echo $post->ID;
|
228 |
+
break;
|
229 |
case "download_cat" :
|
230 |
+
if ( ! $terms = get_the_term_list( $post->ID, 'dlm_download_category', '', ', ', '' ) ) {
|
231 |
+
echo '<span class="na">–</span>';
|
232 |
+
} else {
|
233 |
+
echo $terms;
|
234 |
+
}
|
235 |
+
break;
|
236 |
case "download_tag" :
|
237 |
+
if ( ! $terms = get_the_term_list( $post->ID, 'dlm_download_tag', '', ', ', '' ) ) {
|
238 |
+
echo '<span class="na">–</span>';
|
239 |
+
} else {
|
240 |
+
echo $terms;
|
241 |
+
}
|
242 |
+
break;
|
243 |
case "featured" :
|
244 |
+
if ( $download->is_featured() ) {
|
|
|
245 |
echo '<span class="yes">' . __( 'Yes', 'download-monitor' ) . '</span>';
|
246 |
+
} else {
|
247 |
echo '<span class="na">–</span>';
|
248 |
+
}
|
249 |
+
break;
|
250 |
case "members_only" :
|
251 |
+
if ( $download->is_members_only() ) {
|
|
|
252 |
echo '<span class="yes">' . __( 'Yes', 'download-monitor' ) . '</span>';
|
253 |
+
} else {
|
254 |
echo '<span class="na">–</span>';
|
255 |
+
}
|
256 |
+
break;
|
257 |
case "redirect_only" :
|
258 |
+
if ( $download->redirect_only() ) {
|
|
|
259 |
echo '<span class="yes">' . __( 'Yes', 'download-monitor' ) . '</span>';
|
260 |
+
} else {
|
261 |
echo '<span class="na">–</span>';
|
262 |
+
}
|
263 |
+
break;
|
264 |
case "file" :
|
265 |
if ( $file ) {
|
266 |
echo '<a href="' . $download->get_the_download_link() . '"><code>' . $file->filename;
|
267 |
+
if ( $size = $download->get_the_filesize() ) {
|
268 |
echo ' – ' . $size;
|
269 |
+
}
|
270 |
echo '</code></a>';
|
271 |
+
} else {
|
272 |
echo '<span class="na">–</span>';
|
273 |
+
}
|
274 |
+
break;
|
275 |
case "version" :
|
276 |
+
if ( $file && $file->version ) {
|
277 |
echo $file->version;
|
278 |
+
} else {
|
279 |
echo '<span class="na">–</span>';
|
280 |
+
}
|
281 |
+
break;
|
282 |
case "download_count" :
|
283 |
echo number_format( $download->get_the_download_count(), 0, '.', ',' );
|
284 |
+
break;
|
285 |
case "featured" :
|
286 |
+
if ( $download->is_featured() ) {
|
287 |
+
echo '<img src="' . WP_DLM::get_plugin_url() . '/assets/images/on.png" alt="yes" />';
|
288 |
+
} else {
|
|
|
289 |
echo '<span class="na">–</span>';
|
290 |
+
}
|
291 |
+
break;
|
292 |
}
|
293 |
}
|
294 |
|
296 |
* sortable_columns function.
|
297 |
*
|
298 |
* @access public
|
299 |
+
*
|
300 |
* @param mixed $columns
|
301 |
+
*
|
302 |
* @return void
|
303 |
*/
|
304 |
public function sortable_columns( $columns ) {
|
309 |
'members_only' => 'members_only',
|
310 |
'redirect_only' => 'redirect_only',
|
311 |
);
|
312 |
+
|
313 |
return wp_parse_args( $custom, $columns );
|
314 |
}
|
315 |
|
317 |
* sort_columns function.
|
318 |
*
|
319 |
* @access public
|
320 |
+
*
|
321 |
* @param mixed $vars
|
322 |
+
*
|
323 |
* @return void
|
324 |
*/
|
325 |
public function sort_columns( $vars ) {
|
326 |
if ( isset( $vars['orderby'] ) ) {
|
327 |
+
if ( 'download_id' == $vars['orderby'] ) {
|
328 |
$vars['orderby'] = 'ID';
|
329 |
+
} elseif ( 'download_count' == $vars['orderby'] ) {
|
|
|
330 |
$vars = array_merge( $vars, array(
|
331 |
+
'meta_key' => '_download_count',
|
332 |
+
'orderby' => 'meta_value_num'
|
333 |
) );
|
334 |
|
335 |
+
} elseif ( 'featured' == $vars['orderby'] ) {
|
336 |
$vars = array_merge( $vars, array(
|
337 |
+
'meta_key' => '_featured',
|
338 |
+
'orderby' => 'meta_value'
|
339 |
) );
|
340 |
|
341 |
+
} elseif ( 'members_only' == $vars['orderby'] ) {
|
342 |
$vars = array_merge( $vars, array(
|
343 |
+
'meta_key' => '_members_only',
|
344 |
+
'orderby' => 'meta_value'
|
345 |
) );
|
346 |
|
347 |
+
} elseif ( 'redirect_only' == $vars['orderby'] ) {
|
348 |
$vars = array_merge( $vars, array(
|
349 |
+
'meta_key' => '_redirect_only',
|
350 |
+
'orderby' => 'meta_value'
|
351 |
) );
|
352 |
+
}
|
353 |
}
|
354 |
+
|
355 |
return $vars;
|
356 |
}
|
|
|
357 |
|
358 |
+
}
|
includes/admin/class-dlm-admin-dashboard.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Admin_Dashboard class.
|
@@ -11,14 +13,17 @@ class DLM_Admin_Dashboard {
|
|
11 |
* __construct function.
|
12 |
*
|
13 |
* @access public
|
14 |
-
* @return void
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
|
18 |
-
if ( ! current_user_can( 'manage_downloads' ) )
|
19 |
return;
|
|
|
20 |
|
21 |
-
wp_add_dashboard_widget( 'dlm_popular_downloads', __( 'Popular Downloads', 'download-monitor' ), array(
|
|
|
|
|
|
|
22 |
}
|
23 |
|
24 |
/**
|
@@ -30,64 +35,66 @@ class DLM_Admin_Dashboard {
|
|
30 |
public function popular_downloads() {
|
31 |
|
32 |
$args = array(
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
|
|
|
|
73 |
<tbody>
|
74 |
-
|
75 |
-
|
76 |
-
|
|
|
77 |
|
78 |
-
|
79 |
|
80 |
-
|
81 |
<th scope="row" style="width:25%;"><a href="' . admin_url( 'post.php?post=' . $download_id . '&action=edit' ) . '">' . $download->get_the_title() . '</a></th>
|
82 |
<td><span class="bar" style="width:' . $width . '%;"></span>' . number_format( $count, 0, '.', ',' ) . '</td>
|
83 |
</tr>';
|
84 |
-
|
85 |
-
|
|
|
86 |
</tbody>
|
87 |
-
|
88 |
-
|
89 |
}
|
90 |
|
91 |
-
}
|
92 |
-
|
93 |
-
new DLM_Admin_Dashboard();
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Admin_Dashboard class.
|
13 |
* __construct function.
|
14 |
*
|
15 |
* @access public
|
|
|
16 |
*/
|
17 |
public function __construct() {
|
18 |
|
19 |
+
if ( ! current_user_can( 'manage_downloads' ) ) {
|
20 |
return;
|
21 |
+
}
|
22 |
|
23 |
+
wp_add_dashboard_widget( 'dlm_popular_downloads', __( 'Popular Downloads', 'download-monitor' ), array(
|
24 |
+
$this,
|
25 |
+
'popular_downloads'
|
26 |
+
) );
|
27 |
}
|
28 |
|
29 |
/**
|
35 |
public function popular_downloads() {
|
36 |
|
37 |
$args = array(
|
38 |
+
'post_status' => 'publish',
|
39 |
+
'post_type' => 'dlm_download',
|
40 |
+
'no_found_rows' => 1,
|
41 |
+
'posts_per_page' => 10,
|
42 |
+
'orderby' => 'meta_value_num',
|
43 |
+
'order' => 'desc',
|
44 |
+
'meta_query' => array(
|
45 |
+
array(
|
46 |
+
'key' => '_download_count',
|
47 |
+
'value' => '0',
|
48 |
+
'compare' => '>'
|
49 |
+
)
|
50 |
+
),
|
51 |
+
'meta_key' => '_download_count',
|
52 |
+
'fields' => 'ids'
|
53 |
+
);
|
54 |
+
|
55 |
+
$download_ids = get_posts( $args );
|
56 |
+
|
57 |
+
if ( empty( $download_ids ) ) {
|
58 |
+
echo '<p>' . __( 'There are no stats available yet!', 'download-monitor' ) . '</p>';
|
59 |
+
|
60 |
+
return;
|
61 |
+
}
|
62 |
+
|
63 |
+
$downloads = array();
|
64 |
+
|
65 |
+
foreach ( $download_ids as $download_id ) {
|
66 |
+
$downloads[ $download_id ] = get_post_meta( $download_id, '_download_count', true );
|
67 |
+
}
|
68 |
+
|
69 |
+
if ( $downloads ) {
|
70 |
+
$max_count = max( $downloads );
|
71 |
+
}
|
72 |
+
?>
|
73 |
+
<table class="download_chart" cellpadding="0" cellspacing="0">
|
74 |
+
<thead>
|
75 |
+
<tr>
|
76 |
+
<th scope="col"><?php _e( 'Download', "download_monitor" ); ?></th>
|
77 |
+
<th scope="col"><?php _e( 'Download count', "download_monitor" ); ?></th>
|
78 |
+
</tr>
|
79 |
+
</thead>
|
80 |
<tbody>
|
81 |
+
<?php
|
82 |
+
if ( $downloads ) {
|
83 |
+
foreach ( $downloads as $download_id => $count ) {
|
84 |
+
$download = new DLM_Download( $download_id );
|
85 |
|
86 |
+
$width = $count / ( $max_count ? $max_count : 1 ) * 67;
|
87 |
|
88 |
+
echo '<tr>
|
89 |
<th scope="row" style="width:25%;"><a href="' . admin_url( 'post.php?post=' . $download_id . '&action=edit' ) . '">' . $download->get_the_title() . '</a></th>
|
90 |
<td><span class="bar" style="width:' . $width . '%;"></span>' . number_format( $count, 0, '.', ',' ) . '</td>
|
91 |
</tr>';
|
92 |
+
}
|
93 |
+
}
|
94 |
+
?>
|
95 |
</tbody>
|
96 |
+
</table>
|
97 |
+
<?php
|
98 |
}
|
99 |
|
100 |
+
}
|
|
|
|
includes/admin/class-dlm-admin-extensions.php
ADDED
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Addons Page
|
4 |
+
*/
|
5 |
+
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
7 |
+
exit;
|
8 |
+
} // Exit if accessed directly
|
9 |
+
|
10 |
+
|
11 |
+
/**
|
12 |
+
* DLM_Admin_Extensions Class
|
13 |
+
*/
|
14 |
+
class DLM_Admin_Extensions {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Handles output of the reports page in admin.
|
18 |
+
*/
|
19 |
+
public function output() {
|
20 |
+
|
21 |
+
// Allow user to reload extensions
|
22 |
+
if ( isset( $_GET['dlm-force-recheck'] ) ) {
|
23 |
+
delete_transient( 'dlm_extension_json' );
|
24 |
+
}
|
25 |
+
|
26 |
+
// Load extension json
|
27 |
+
if ( false === ( $extension_json = get_transient( 'dlm_extension_json' ) ) ) {
|
28 |
+
|
29 |
+
// Extension request
|
30 |
+
$extension_request = wp_remote_get( 'https://download-monitor.com/?dlm-extensions=true' );
|
31 |
+
|
32 |
+
if ( ! is_wp_error( $extension_request ) ) {
|
33 |
+
|
34 |
+
// The extension json from server
|
35 |
+
$extension_json = wp_remote_retrieve_body( $extension_request );
|
36 |
+
|
37 |
+
// Set Transient
|
38 |
+
set_transient( 'dlm_extension_json', $extension_json, DAY_IN_SECONDS );
|
39 |
+
}
|
40 |
+
}
|
41 |
+
|
42 |
+
?>
|
43 |
+
<div class="wrap dlm_extensions_wrap">
|
44 |
+
<div class="icon32 icon32-posts-dlm_download" id="icon-edit"><br/></div>
|
45 |
+
<h2><?php _e( 'Download Monitor Extensions', 'download-monitor' ); ?> <a href="<?php echo add_query_arg( 'dlm-force-recheck', '1' ); ?>" class="button dlm-reload-button">Reload Extensions</a></h2>
|
46 |
+
<?php
|
47 |
+
|
48 |
+
if ( false !== $extension_json ) {
|
49 |
+
|
50 |
+
// Get all extensions
|
51 |
+
$response = json_decode( $extension_json );
|
52 |
+
|
53 |
+
// Display message if it's there
|
54 |
+
if ( isset( $response->message ) && '' !== $response->message ) {
|
55 |
+
echo '<div id="message" class="updated">' . $response->message . '</div>' . PHP_EOL;
|
56 |
+
}
|
57 |
+
|
58 |
+
if ( count( $response ) > 0 && isset( $response->extensions ) && count( $response->extensions ) > 0 ) {
|
59 |
+
|
60 |
+
// Extensions
|
61 |
+
$extensions = $response->extensions;
|
62 |
+
|
63 |
+
// Get products
|
64 |
+
$products = DLM_Product_Manager::get()->get_products();
|
65 |
+
|
66 |
+
// Loop through extensions
|
67 |
+
$installed_extensions = array();
|
68 |
+
|
69 |
+
foreach ( $extensions as $extension_key => $extension ) {
|
70 |
+
if ( isset( $products[ $extension->product_id ] ) ) {
|
71 |
+
$installed_extensions[] = $extension;
|
72 |
+
unset( $extensions[ $extension_key ] );
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
echo "<p>Extend Download Monitor with it's powerful free and paid extensions.</p>" . PHP_EOL;
|
77 |
+
?>
|
78 |
+
<h2 class="nav-tab-wrapper">
|
79 |
+
<a href="#available-extensions" class="nav-tab nav-tab-active">Available Extensions</a>
|
80 |
+
<?php if ( count( $installed_extensions ) > 0 ) { ?><a href="#installed-extensions" class="nav-tab">Installed Extensions</a><?php } ?>
|
81 |
+
</h2>
|
82 |
+
<?php
|
83 |
+
|
84 |
+
|
85 |
+
// Available Extensions
|
86 |
+
if ( count( $extensions ) > 0 ) {
|
87 |
+
|
88 |
+
echo '<div id="available-extensions" class="settings_panel">' . PHP_EOL;
|
89 |
+
echo '<div class="theme-browser dlm_extensions">';
|
90 |
+
|
91 |
+
foreach ( $extensions as $extension ) {
|
92 |
+
|
93 |
+
$sale = false;
|
94 |
+
if ( $extension->price > 0 ) {
|
95 |
+
$price_display = '$' . $extension->price;
|
96 |
+
if ( '' != $extension->sale_price && $extension->sale_price > 0 ) {
|
97 |
+
$price_display = '<strike>$' . $extension->price . '</strike> $' . $extension->sale_price;
|
98 |
+
$sale = true;
|
99 |
+
}
|
100 |
+
} else {
|
101 |
+
$price_display = 'FREE';
|
102 |
+
}
|
103 |
+
|
104 |
+
//$price_display = ( ( $extension->price > 0 ) ? '$' . $extension->price : 'FREE' );
|
105 |
+
|
106 |
+
echo '<div class="theme dlm_extension">';
|
107 |
+
echo '<a href="' . $extension->url . '" target="_blank">';
|
108 |
+
echo '<div class="dlm_extension_img_wrapper"><img src="' . $extension->image . '" alt="' . $extension->name . '" /></div>' . PHP_EOL;
|
109 |
+
echo '<h3>' . $extension->name . '</h3>' . PHP_EOL;
|
110 |
+
echo '<p class="extension-desc">' . $extension->desc . '</p>';
|
111 |
+
echo '<div class="product_footer">';
|
112 |
+
echo '<span class="loop_price' . ( ( $sale ) ? ' sale' : '' ) . '">' . $price_display . '</span>';
|
113 |
+
echo '<span class="loop_more">Get This Extension</span>';
|
114 |
+
echo '</div>';
|
115 |
+
echo '</a>';
|
116 |
+
echo '</div>';
|
117 |
+
}
|
118 |
+
|
119 |
+
echo '</div>';
|
120 |
+
echo '</div>';
|
121 |
+
|
122 |
+
|
123 |
+
}else if ( count( $installed_extensions ) > 0 ) {
|
124 |
+
echo '<p>Wow, looks like you installed all our extensions. Thanks, you rock!</p>';
|
125 |
+
}
|
126 |
+
|
127 |
+
// Installed Extensions
|
128 |
+
if ( count( $installed_extensions ) > 0 ) {
|
129 |
+
|
130 |
+
echo '<div id="installed-extensions" class="settings_panel">' . PHP_EOL;
|
131 |
+
|
132 |
+
echo '<div class="theme-browser dlm_extensions">';
|
133 |
+
foreach ( $installed_extensions as $extension ) {
|
134 |
+
|
135 |
+
// Get the product
|
136 |
+
$license = $products[ $extension->product_id ]->get_license();
|
137 |
+
|
138 |
+
echo '<div class="theme dlm_extension">';
|
139 |
+
|
140 |
+
echo '<div class="dlm_extension_img_wrapper"><img src="' . $extension->image . '" alt="' . $extension->name . '" /></div>' . PHP_EOL;
|
141 |
+
echo '<h3>' . $extension->name . '</h3>' . PHP_EOL;
|
142 |
+
|
143 |
+
echo '<div class="extension_license">' . PHP_EOL;
|
144 |
+
echo '<p class="license-status' . ( ( $license->is_active() ) ? ' active' : '' ) . '">' . strtoupper( $license->get_status() ) . '</p>' . PHP_EOL;
|
145 |
+
echo '<input type="hidden" id="dlm-ajax-nonce" value="' . wp_create_nonce( 'dlm-ajax-nonce' ) . '" />' . PHP_EOL;
|
146 |
+
echo '<input type="hidden" id="status" value="' . $license->get_status() . '" />' . PHP_EOL;
|
147 |
+
echo '<input type="hidden" id="product_id" value="' . $extension->product_id . '" />' . PHP_EOL;
|
148 |
+
echo '<input type="text" name="key" id="key" value="' . $license->get_key() . '" placeholder="License Key"' . ( ( $license->is_active() ) ? ' disabled="disabled"' : '' ) . ' />' . PHP_EOL;
|
149 |
+
echo '<input type="text" name="email" id="email" value="' . $license->get_email() . '" placeholder="License Email"' . ( ( $license->is_active() ) ? ' disabled="disabled"' : '' ) . ' />' . PHP_EOL;
|
150 |
+
echo '<a href="javscript:;" class="button button-primary">' . ( ( $license->is_active() ) ? 'Deactivate' : 'Activate' ) . '</a>';
|
151 |
+
echo '</div>' . PHP_EOL;
|
152 |
+
|
153 |
+
echo '</div>';
|
154 |
+
}
|
155 |
+
echo '</div>';
|
156 |
+
echo '</div>'.PHP_EOL;
|
157 |
+
|
158 |
+
}
|
159 |
+
|
160 |
+
}
|
161 |
+
|
162 |
+
} else {
|
163 |
+
echo "<p>Couldn't load extensions, please try again later.</p>" . PHP_EOL;
|
164 |
+
}
|
165 |
+
?>
|
166 |
+
</div>
|
167 |
+
<?php
|
168 |
+
}
|
169 |
+
}
|
includes/admin/class-dlm-admin-media-browser.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Admin_Media_Browser class.
|
@@ -11,7 +13,6 @@ class DLM_Admin_Media_Browser {
|
|
11 |
* __construct function.
|
12 |
*
|
13 |
* @access public
|
14 |
-
* @return void
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
add_action( 'media_upload_downloadable_file_browser', array( $this, 'media_browser' ) );
|
@@ -24,13 +25,15 @@ class DLM_Admin_Media_Browser {
|
|
24 |
* @return void
|
25 |
*/
|
26 |
public function media_browser() {
|
27 |
-
|
|
|
28 |
|
29 |
-
|
|
|
30 |
|
31 |
echo '<!DOCTYPE html><html lang="en"><head><title>' . __( 'Browse for a file', 'download-monitor' ) . '</title>';
|
32 |
|
33 |
-
wp_enqueue_style( 'download_monitor_admin_css',
|
34 |
do_action( 'admin_print_styles' );
|
35 |
do_action( 'admin_print_scripts' );
|
36 |
do_action( 'admin_head' );
|
@@ -39,23 +42,27 @@ class DLM_Admin_Media_Browser {
|
|
39 |
|
40 |
echo '<ul class="download_monitor_file_browser">';
|
41 |
|
42 |
-
foreach( $files as $found_file ) {
|
43 |
|
44 |
$file = pathinfo( $found_file['path'] );
|
45 |
|
46 |
if ( $found_file['type'] == 'folder' ) {
|
47 |
|
48 |
-
echo '<li><a href="#" class="folder" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename']
|
49 |
|
50 |
} else {
|
51 |
|
52 |
-
$filename
|
53 |
$extension = ( empty( $file['extension'] ) ) ? '' : $file['extension'];
|
54 |
|
55 |
-
if ( substr( $filename, 0, 1 ) == '.' )
|
56 |
-
|
|
|
|
|
|
|
|
|
57 |
|
58 |
-
echo '<li><a href="#" class="file filetype-' . sanitize_title( $extension ) . '" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename']
|
59 |
|
60 |
}
|
61 |
|
@@ -64,54 +71,52 @@ class DLM_Admin_Media_Browser {
|
|
64 |
echo '</ul>';
|
65 |
?>
|
66 |
<script type="text/javascript">
|
67 |
-
jQuery(function() {
|
68 |
-
jQuery('.download_monitor_file_browser').on('click', 'a', function(){
|
69 |
|
70 |
-
var $link = jQuery(this);
|
71 |
-
var $parent = $link.closest('li');
|
72 |
|
73 |
-
if ( $link.is('.file') ) {
|
74 |
|
75 |
var win = window.dialogArguments || opener || parent || top;
|
76 |
|
77 |
-
win.send_to_editor( $link.attr('data-path') );
|
78 |
|
79 |
-
} else if ( $link.is('.folder_open') ) {
|
80 |
|
81 |
-
$parent.find('ul').remove();
|
82 |
-
$link.removeClass('folder_open');
|
83 |
|
84 |
} else {
|
85 |
|
86 |
-
$link.after('<ul class="load_tree loading"></ul>');
|
87 |
|
88 |
var data = {
|
89 |
-
action:
|
90 |
-
path:
|
91 |
-
security:
|
92 |
};
|
93 |
|
94 |
-
jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', data, function(response) {
|
95 |
|
96 |
-
$link.addClass('folder_open');
|
97 |
|
98 |
if ( response ) {
|
99 |
-
$parent.find('.load_tree').html( response );
|
100 |
} else {
|
101 |
-
$parent.find('.load_tree').html( '<li class="nofiles"><?php _e('No files found', 'download-monitor'); ?></li>' );
|
102 |
}
|
103 |
-
$parent.find('.load_tree').removeClass('load_tree loading');
|
104 |
|
105 |
-
});
|
106 |
}
|
107 |
return false;
|
108 |
-
});
|
109 |
-
});
|
110 |
</script>
|
111 |
<?php
|
112 |
echo '</body></html>';
|
113 |
}
|
114 |
|
115 |
-
}
|
116 |
-
|
117 |
-
new DLM_Admin_Media_Browser();
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Admin_Media_Browser class.
|
13 |
* __construct function.
|
14 |
*
|
15 |
* @access public
|
|
|
16 |
*/
|
17 |
public function __construct() {
|
18 |
add_action( 'media_upload_downloadable_file_browser', array( $this, 'media_browser' ) );
|
25 |
* @return void
|
26 |
*/
|
27 |
public function media_browser() {
|
28 |
+
// File Manager
|
29 |
+
$file_manager = new DLM_File_Manager();
|
30 |
|
31 |
+
// Files
|
32 |
+
$files = $file_manager->list_files( ABSPATH, 1 );
|
33 |
|
34 |
echo '<!DOCTYPE html><html lang="en"><head><title>' . __( 'Browse for a file', 'download-monitor' ) . '</title>';
|
35 |
|
36 |
+
wp_enqueue_style( 'download_monitor_admin_css', WP_DLM::get_plugin_url() . '/assets/css/admin.css', array( 'dashicons' ) );
|
37 |
do_action( 'admin_print_styles' );
|
38 |
do_action( 'admin_print_scripts' );
|
39 |
do_action( 'admin_head' );
|
42 |
|
43 |
echo '<ul class="download_monitor_file_browser">';
|
44 |
|
45 |
+
foreach ( $files as $found_file ) {
|
46 |
|
47 |
$file = pathinfo( $found_file['path'] );
|
48 |
|
49 |
if ( $found_file['type'] == 'folder' ) {
|
50 |
|
51 |
+
echo '<li><a href="#" class="folder" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename'] . '">' . $file['basename'] . '</a></li>';
|
52 |
|
53 |
} else {
|
54 |
|
55 |
+
$filename = $file['basename'];
|
56 |
$extension = ( empty( $file['extension'] ) ) ? '' : $file['extension'];
|
57 |
|
58 |
+
if ( substr( $filename, 0, 1 ) == '.' ) {
|
59 |
+
continue;
|
60 |
+
} // Ignore files starting with . like htaccess
|
61 |
+
if ( in_array( $extension, array( '', 'php', 'html', 'htm', 'tmp' ) ) ) {
|
62 |
+
continue;
|
63 |
+
} // Ignored file types
|
64 |
|
65 |
+
echo '<li><a href="#" class="file filetype-' . sanitize_title( $extension ) . '" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename'] . '">' . $file['basename'] . '</a></li>';
|
66 |
|
67 |
}
|
68 |
|
71 |
echo '</ul>';
|
72 |
?>
|
73 |
<script type="text/javascript">
|
74 |
+
jQuery( function () {
|
75 |
+
jQuery( '.download_monitor_file_browser' ).on( 'click', 'a', function () {
|
76 |
|
77 |
+
var $link = jQuery( this );
|
78 |
+
var $parent = $link.closest( 'li' );
|
79 |
|
80 |
+
if ( $link.is( '.file' ) ) {
|
81 |
|
82 |
var win = window.dialogArguments || opener || parent || top;
|
83 |
|
84 |
+
win.send_to_editor( $link.attr( 'data-path' ) );
|
85 |
|
86 |
+
} else if ( $link.is( '.folder_open' ) ) {
|
87 |
|
88 |
+
$parent.find( 'ul' ).remove();
|
89 |
+
$link.removeClass( 'folder_open' );
|
90 |
|
91 |
} else {
|
92 |
|
93 |
+
$link.after( '<ul class="load_tree loading"></ul>' );
|
94 |
|
95 |
var data = {
|
96 |
+
action: 'download_monitor_list_files',
|
97 |
+
path: jQuery( this ).attr( 'data-path' ),
|
98 |
+
security: '<?php echo wp_create_nonce("list-files"); ?>'
|
99 |
};
|
100 |
|
101 |
+
jQuery.post( '<?php echo admin_url('admin-ajax.php'); ?>', data, function ( response ) {
|
102 |
|
103 |
+
$link.addClass( 'folder_open' );
|
104 |
|
105 |
if ( response ) {
|
106 |
+
$parent.find( '.load_tree' ).html( response );
|
107 |
} else {
|
108 |
+
$parent.find( '.load_tree' ).html( '<li class="nofiles"><?php _e('No files found', 'download-monitor'); ?></li>' );
|
109 |
}
|
110 |
+
$parent.find( '.load_tree' ).removeClass( 'load_tree loading' );
|
111 |
|
112 |
+
} );
|
113 |
}
|
114 |
return false;
|
115 |
+
} );
|
116 |
+
} );
|
117 |
</script>
|
118 |
<?php
|
119 |
echo '</body></html>';
|
120 |
}
|
121 |
|
122 |
+
}
|
|
|
|
includes/admin/{class-dlm-admin-insert.php → class-dlm-admin-media-insert.php}
RENAMED
@@ -1,16 +1,17 @@
|
|
1 |
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
3 |
|
4 |
/**
|
5 |
* DLM_Admin_Insert class.
|
6 |
*/
|
7 |
-
class
|
8 |
|
9 |
/**
|
10 |
* __construct function.
|
11 |
*
|
12 |
* @access public
|
13 |
-
* @return void
|
14 |
*/
|
15 |
public function __construct() {
|
16 |
add_action( 'media_buttons', array( $this, 'media_buttons' ), 20 );
|
@@ -20,32 +21,19 @@ class DLM_Admin_Insert {
|
|
20 |
/**
|
21 |
* media_buttons function.
|
22 |
*
|
|
|
|
|
23 |
* @access public
|
24 |
* @return void
|
25 |
*/
|
26 |
public function media_buttons( $editor_id = 'content' ) {
|
27 |
-
global $
|
28 |
|
29 |
-
if ( $post
|
30 |
return;
|
|
|
31 |
|
32 |
-
echo '<a href="#" class="button insert-download add_download" data-editor="' . esc_attr( $editor_id ) . '" title="' . esc_attr__( 'Insert Download', 'download-monitor' ) . '">' . __( 'Insert Download', 'download-monitor' ) . '</a>';
|
33 |
-
|
34 |
-
ob_start();
|
35 |
-
?>
|
36 |
-
jQuery(function(){
|
37 |
-
// Browse for file
|
38 |
-
jQuery('body').on('click', 'a.add_download', function(e){
|
39 |
-
|
40 |
-
tb_show('<?php esc_attr_e( 'Insert Download', 'download-monitor' ); ?>', 'media-upload.php?post_id=<?php echo $post->ID; ?>&type=add_download&from=wpdlm01&TB_iframe=true&height=200');
|
41 |
-
|
42 |
-
return false;
|
43 |
-
});
|
44 |
-
});
|
45 |
-
<?php
|
46 |
-
|
47 |
-
$js_code = ob_get_clean();
|
48 |
-
$download_monitor->add_inline_js( $js_code );
|
49 |
}
|
50 |
|
51 |
/**
|
@@ -55,10 +43,9 @@ class DLM_Admin_Insert {
|
|
55 |
* @return void
|
56 |
*/
|
57 |
public function media_browser() {
|
58 |
-
global $download_monitor;
|
59 |
|
60 |
// Enqueue scripts and styles for panel
|
61 |
-
wp_enqueue_style( 'download_monitor_admin_css',
|
62 |
wp_enqueue_script( 'common' );
|
63 |
wp_enqueue_style( 'global' );
|
64 |
wp_enqueue_style( 'wp-admin' );
|
@@ -75,12 +62,14 @@ class DLM_Admin_Insert {
|
|
75 |
|
76 |
?>
|
77 |
<h2 class="nav-tab-wrapper">
|
78 |
-
<a href="#insert-shortcode"
|
|
|
|
|
79 |
</h2>
|
80 |
<?php
|
81 |
|
82 |
// Handle quick-add form
|
83 |
-
if ( ! empty( $_POST['download_url'] ) && ! empty( $_POST['download_title'] ) && wp_verify_nonce( $_POST['quick-add-nonce'], 'quick-add') ) {
|
84 |
|
85 |
$url = stripslashes( $_POST['download_url'] );
|
86 |
$title = sanitize_text_field( stripslashes( $_POST['download_title'] ) );
|
@@ -118,26 +107,35 @@ class DLM_Admin_Insert {
|
|
118 |
|
119 |
$file_id = wp_insert_post( $file );
|
120 |
|
121 |
-
if ( ! $file_id )
|
122 |
throw new Exception( __( 'Error: File was not created.', 'download-monitor' ) );
|
|
|
|
|
|
|
|
|
123 |
|
124 |
// Meta
|
125 |
update_post_meta( $file_id, '_version', $version );
|
126 |
-
update_post_meta( $file_id, '_filesize', $
|
127 |
-
update_post_meta( $file_id, '_files', $
|
128 |
|
129 |
-
|
|
|
130 |
|
|
|
131 |
update_post_meta( $file_id, '_md5', $hashes['md5'] );
|
132 |
update_post_meta( $file_id, '_sha1', $hashes['sha1'] );
|
133 |
update_post_meta( $file_id, '_crc32', $hashes['crc32'] );
|
134 |
|
|
|
135 |
echo '<div class="updated"><p>' . __( 'Download successfully created.', 'download-monitor' ) . '</p></div>';
|
136 |
|
137 |
-
} else
|
|
|
|
|
138 |
|
139 |
} catch ( Exception $e ) {
|
140 |
-
echo '<div class="error"><p>' .
|
141 |
}
|
142 |
|
143 |
}
|
@@ -147,7 +145,7 @@ class DLM_Admin_Insert {
|
|
147 |
'post_status' => 'publish',
|
148 |
'post_type' => 'dlm_download',
|
149 |
'orderby' => 'ID',
|
150 |
-
'posts_per_page' => -1
|
151 |
) );
|
152 |
?>
|
153 |
<form id="insert-shortcode">
|
@@ -155,47 +153,50 @@ class DLM_Admin_Insert {
|
|
155 |
<fieldset>
|
156 |
<legend><?php _e( 'Choose a download', 'download-monitor' ); ?>:</legend>
|
157 |
<?php
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
?>
|
188 |
</fieldset>
|
189 |
-
|
190 |
<p>
|
191 |
<label for="template_name"><?php _e( 'Template', 'download-monitor' ); ?>:</label>
|
192 |
-
<input type="text" id="template_name" value="" class="input"
|
|
|
193 |
<span class="description">
|
194 |
<?php _e( 'Leaving this blank will use the default <code>content-download.php</code> template file. If you enter, for example, <code>image</code>, the <code>content-download-image.php</code> template will be used instead.', 'download-monitor' ); ?>
|
195 |
</span>
|
196 |
</p>
|
|
|
197 |
<p>
|
198 |
-
<input type="button" class="button insert_download button-primary button-large"
|
|
|
199 |
</p>
|
200 |
|
201 |
</form>
|
@@ -207,27 +208,39 @@ class DLM_Admin_Insert {
|
|
207 |
<div id="drag-drop-area" style="height:240px">
|
208 |
<div class="drag-drop-inside">
|
209 |
<p class="drag-drop-info"><?php _e( 'Drop file here', 'download-monitor' ); ?></p>
|
|
|
210 |
<p><?php echo _x( 'or', 'Drop file here *or* select file', 'download-monitor' ); ?></p>
|
211 |
-
|
|
|
|
|
|
|
212 |
</div>
|
213 |
</div>
|
214 |
-
<p><a href="#" class="add_manually"><?php _e( 'Enter URL manually', 'download-monitor' ); ?> →</a
|
|
|
215 |
</div>
|
216 |
<div id="quick-add-details" style="display:none">
|
217 |
<p>
|
218 |
<label for="download_url"><?php _e( 'Download URL', 'download-monitor' ); ?>:</label>
|
219 |
-
<input type="text" name="download_url" id="download_url" value="" class="download_url input"
|
|
|
220 |
</p>
|
|
|
221 |
<p>
|
222 |
<label for="download_title"><?php _e( 'Download Title', 'download-monitor' ); ?>:</label>
|
223 |
-
<input type="text" name="download_title" id="download_title" value="" class="download_title input"
|
|
|
224 |
</p>
|
|
|
225 |
<p>
|
226 |
<label for="download_version"><?php _e( 'Version', 'download-monitor' ); ?>:</label>
|
227 |
-
<input type="text" name="download_version" id="download_version" value="" class="input"
|
|
|
228 |
</p>
|
|
|
229 |
<p>
|
230 |
-
<input type="submit" class="button button-primary button-large"
|
|
|
231 |
<?php wp_nonce_field( 'quick-add', 'quick-add-nonce' ) ?>
|
232 |
</p>
|
233 |
</div>
|
@@ -235,25 +248,25 @@ class DLM_Admin_Insert {
|
|
235 |
</form>
|
236 |
|
237 |
<script type="text/javascript">
|
238 |
-
jQuery(function() {
|
239 |
|
240 |
-
jQuery('.nav-tab-wrapper a').click(function() {
|
241 |
-
jQuery('#insert-shortcode, #quick-add').hide();
|
242 |
-
jQuery(jQuery(this).attr('href')).show();
|
243 |
-
jQuery('a.nav-tab-active').removeClass('nav-tab-active');
|
244 |
-
jQuery(this).addClass('nav-tab-active');
|
245 |
return false;
|
246 |
-
});
|
247 |
|
248 |
-
jQuery('#quick-add').hide();
|
249 |
|
250 |
-
jQuery('body').on('click', '.insert_download', function(){
|
251 |
|
252 |
var win = window.dialogArguments || opener || parent || top;
|
253 |
|
254 |
-
var download_id = jQuery('input[name="download_id"]:checked').val();
|
255 |
-
var template
|
256 |
-
var shortcode
|
257 |
|
258 |
if ( template )
|
259 |
shortcode = shortcode + ' template="' + template + '"';
|
@@ -263,13 +276,13 @@ class DLM_Admin_Insert {
|
|
263 |
win.send_to_editor( shortcode );
|
264 |
|
265 |
return false;
|
266 |
-
});
|
267 |
|
268 |
-
jQuery('.add_manually').click(function() {
|
269 |
-
jQuery('#plupload-upload-ui').slideUp();
|
270 |
-
jQuery('#quick-add-details').slideDown();
|
271 |
return false;
|
272 |
-
});
|
273 |
|
274 |
<?php
|
275 |
$plupload_init = array(
|
@@ -300,64 +313,62 @@ class DLM_Admin_Insert {
|
|
300 |
?>
|
301 |
|
302 |
// create the uploader and pass the config from above
|
303 |
-
var uploader = new plupload.Uploader(<?php echo json_encode( $plupload_init ); ?>);
|
304 |
|
305 |
// checks if browser supports drag and drop upload, makes some css adjustments if necessary
|
306 |
-
uploader.bind('Init', function(up){
|
307 |
-
var uploaddiv = jQuery('#plupload-upload-ui');
|
308 |
|
309 |
if ( up.features.dragdrop ) {
|
310 |
-
uploaddiv.addClass('drag-drop');
|
311 |
|
312 |
-
jQuery('#drag-drop-area')
|
313 |
-
.bind('dragover.wp-uploader', function() {
|
314 |
-
uploaddiv.addClass('drag-over');
|
315 |
-
})
|
316 |
-
.bind('dragleave.wp-uploader, drop.wp-uploader', function() {
|
317 |
-
uploaddiv.removeClass('drag-over');
|
318 |
-
});
|
319 |
|
320 |
} else {
|
321 |
-
uploaddiv.removeClass('drag-drop');
|
322 |
-
jQuery('#drag-drop-area').unbind('.wp-uploader');
|
323 |
}
|
324 |
-
});
|
325 |
|
326 |
uploader.init();
|
327 |
|
328 |
// a file was added in the queue
|
329 |
-
uploader.bind('FilesAdded', function(up, files) {
|
330 |
-
var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10);
|
331 |
|
332 |
-
plupload.each(files, function(file) {
|
333 |
if ( max > hundredmb && file.size > hundredmb && up.runtime != 'html5' ) {
|
334 |
// file size error?
|
335 |
} else {
|
336 |
-
jQuery('.drag-drop-inside').html('<p><?php _e( 'Please wait...', 'download-monitor' ); ?></p>');
|
337 |
}
|
338 |
-
});
|
339 |
|
340 |
up.refresh();
|
341 |
up.start();
|
342 |
-
});
|
343 |
|
344 |
// a file was uploaded
|
345 |
-
uploader.bind('FileUploaded', function( up, file, response ) {
|
346 |
-
jQuery('#quick-add-details').find('input.download_url').val( response.response );
|
347 |
-
jQuery('#quick-add-details').find('input.download_title').val( basename( response.response ) );
|
348 |
-
jQuery('#plupload-upload-ui').slideUp();
|
349 |
-
jQuery('#quick-add-details').slideDown();
|
350 |
-
});
|
351 |
-
|
352 |
-
function basename(path) {
|
353 |
-
|
354 |
}
|
355 |
|
356 |
-
});
|
357 |
</script>
|
358 |
<?php
|
359 |
echo '</body></html>';
|
360 |
}
|
361 |
-
}
|
362 |
-
|
363 |
-
new DLM_Admin_Insert();
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
} // Exit if accessed directly
|
5 |
|
6 |
/**
|
7 |
* DLM_Admin_Insert class.
|
8 |
*/
|
9 |
+
class DLM_Admin_Media_Insert {
|
10 |
|
11 |
/**
|
12 |
* __construct function.
|
13 |
*
|
14 |
* @access public
|
|
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
add_action( 'media_buttons', array( $this, 'media_buttons' ), 20 );
|
21 |
/**
|
22 |
* media_buttons function.
|
23 |
*
|
24 |
+
* @param String $editor_id
|
25 |
+
*
|
26 |
* @access public
|
27 |
* @return void
|
28 |
*/
|
29 |
public function media_buttons( $editor_id = 'content' ) {
|
30 |
+
global $post;
|
31 |
|
32 |
+
if ( empty( $post ) || 'dlm_download' === $post->post_type ) {
|
33 |
return;
|
34 |
+
}
|
35 |
|
36 |
+
echo '<a href="#" class="button insert-download add_download" data-editor="' . esc_attr( $editor_id ) . '" title="' . esc_attr__( 'Insert Download', 'download-monitor' ) . '" rel="' . $post->ID . '" >' . __( 'Insert Download', 'download-monitor' ) . '</a>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
}
|
38 |
|
39 |
/**
|
43 |
* @return void
|
44 |
*/
|
45 |
public function media_browser() {
|
|
|
46 |
|
47 |
// Enqueue scripts and styles for panel
|
48 |
+
wp_enqueue_style( 'download_monitor_admin_css', WP_DLM::get_plugin_url() . '/assets/css/admin.css', array( 'dashicons' ) );
|
49 |
wp_enqueue_script( 'common' );
|
50 |
wp_enqueue_style( 'global' );
|
51 |
wp_enqueue_style( 'wp-admin' );
|
62 |
|
63 |
?>
|
64 |
<h2 class="nav-tab-wrapper">
|
65 |
+
<a href="#insert-shortcode"
|
66 |
+
class="nav-tab nav-tab-active"><?php _e( 'Insert Shortcode', 'download-monitor' ); ?></a><a
|
67 |
+
href="#quick-add" class="nav-tab"><?php _e( 'Quick-add download', 'download-monitor' ); ?></a>
|
68 |
</h2>
|
69 |
<?php
|
70 |
|
71 |
// Handle quick-add form
|
72 |
+
if ( ! empty( $_POST['download_url'] ) && ! empty( $_POST['download_title'] ) && wp_verify_nonce( $_POST['quick-add-nonce'], 'quick-add' ) ) {
|
73 |
|
74 |
$url = stripslashes( $_POST['download_url'] );
|
75 |
$title = sanitize_text_field( stripslashes( $_POST['download_title'] ) );
|
107 |
|
108 |
$file_id = wp_insert_post( $file );
|
109 |
|
110 |
+
if ( ! $file_id ) {
|
111 |
throw new Exception( __( 'Error: File was not created.', 'download-monitor' ) );
|
112 |
+
}
|
113 |
+
|
114 |
+
// File Manager
|
115 |
+
$file_manager = new DLM_File_Manager();
|
116 |
|
117 |
// Meta
|
118 |
update_post_meta( $file_id, '_version', $version );
|
119 |
+
update_post_meta( $file_id, '_filesize', $file_manager->get_file_size( $url ) );
|
120 |
+
update_post_meta( $file_id, '_files', $file_manager->json_encode_files( array( $url ) ) );
|
121 |
|
122 |
+
// Hashes
|
123 |
+
$hashes = $file_manager->get_file_hashes( $url );
|
124 |
|
125 |
+
// Set hashes
|
126 |
update_post_meta( $file_id, '_md5', $hashes['md5'] );
|
127 |
update_post_meta( $file_id, '_sha1', $hashes['sha1'] );
|
128 |
update_post_meta( $file_id, '_crc32', $hashes['crc32'] );
|
129 |
|
130 |
+
// Success message
|
131 |
echo '<div class="updated"><p>' . __( 'Download successfully created.', 'download-monitor' ) . '</p></div>';
|
132 |
|
133 |
+
} else {
|
134 |
+
throw new Exception( __( 'Error: Download was not created.', 'download-monitor' ) );
|
135 |
+
}
|
136 |
|
137 |
} catch ( Exception $e ) {
|
138 |
+
echo '<div class="error"><p>' . $e->getMessage() . "</p></div>";
|
139 |
}
|
140 |
|
141 |
}
|
145 |
'post_status' => 'publish',
|
146 |
'post_type' => 'dlm_download',
|
147 |
'orderby' => 'ID',
|
148 |
+
'posts_per_page' => - 1
|
149 |
) );
|
150 |
?>
|
151 |
<form id="insert-shortcode">
|
153 |
<fieldset>
|
154 |
<legend><?php _e( 'Choose a download', 'download-monitor' ); ?>:</legend>
|
155 |
<?php
|
156 |
+
$limit = 10;
|
157 |
+
$page = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
|
158 |
+
|
159 |
+
$dlm_query = new WP_Query( array(
|
160 |
+
'post_status' => 'publish',
|
161 |
+
'post_type' => 'dlm_download',
|
162 |
+
'posts_per_page' => $limit,
|
163 |
+
'offset' => ( $page - 1 ) * $limit
|
164 |
+
) );
|
165 |
+
|
166 |
+
while ( $dlm_query->have_posts() ) {
|
167 |
+
$dlm_query->the_post();
|
168 |
+
$download = new DLM_Download( $dlm_query->post->ID );
|
169 |
+
echo '<label><input name="download_id" class="radio" type="radio" value="' . absint( $download->id ) . '" /> #' . $download->id . ' – ' . $download->get_the_title() . ' – ' . $download->get_the_filename() . '</label>';
|
170 |
+
}
|
171 |
+
|
172 |
+
if ( $dlm_query->max_num_pages > 1 ) {
|
173 |
+
echo paginate_links( apply_filters( 'download_monitor_pagination_args', array(
|
174 |
+
'base' => str_replace( 999999999, '%#%', get_pagenum_link( 999999999 ) ),
|
175 |
+
'format' => '',
|
176 |
+
'current' => $page,
|
177 |
+
'total' => $dlm_query->max_num_pages,
|
178 |
+
'prev_text' => '←',
|
179 |
+
'next_text' => '→',
|
180 |
+
'type' => 'list',
|
181 |
+
'end_size' => 3,
|
182 |
+
'mid_size' => 3
|
183 |
+
) ) );
|
184 |
+
}
|
185 |
?>
|
186 |
</fieldset>
|
187 |
+
|
188 |
<p>
|
189 |
<label for="template_name"><?php _e( 'Template', 'download-monitor' ); ?>:</label>
|
190 |
+
<input type="text" id="template_name" value="" class="input"
|
191 |
+
placeholder="<?php _e( 'Template Name', 'download-monitor' ); ?>"/>
|
192 |
<span class="description">
|
193 |
<?php _e( 'Leaving this blank will use the default <code>content-download.php</code> template file. If you enter, for example, <code>image</code>, the <code>content-download-image.php</code> template will be used instead.', 'download-monitor' ); ?>
|
194 |
</span>
|
195 |
</p>
|
196 |
+
|
197 |
<p>
|
198 |
+
<input type="button" class="button insert_download button-primary button-large"
|
199 |
+
value="<?php _e( 'Insert Shortcode', 'download-monitor' ); ?>"/>
|
200 |
</p>
|
201 |
|
202 |
</form>
|
208 |
<div id="drag-drop-area" style="height:240px">
|
209 |
<div class="drag-drop-inside">
|
210 |
<p class="drag-drop-info"><?php _e( 'Drop file here', 'download-monitor' ); ?></p>
|
211 |
+
|
212 |
<p><?php echo _x( 'or', 'Drop file here *or* select file', 'download-monitor' ); ?></p>
|
213 |
+
|
214 |
+
<p class="drag-drop-buttons"><input id="plupload-browse-button" type="button"
|
215 |
+
value="<?php esc_attr_e( 'Select File', 'download-monitor' ); ?>"
|
216 |
+
class="button"/></p>
|
217 |
</div>
|
218 |
</div>
|
219 |
+
<p><a href="#" class="add_manually"><?php _e( 'Enter URL manually', 'download-monitor' ); ?> →</a>
|
220 |
+
</p>
|
221 |
</div>
|
222 |
<div id="quick-add-details" style="display:none">
|
223 |
<p>
|
224 |
<label for="download_url"><?php _e( 'Download URL', 'download-monitor' ); ?>:</label>
|
225 |
+
<input type="text" name="download_url" id="download_url" value="" class="download_url input"
|
226 |
+
placeholder="<?php _e( 'Required URL', 'download-monitor' ); ?>"/>
|
227 |
</p>
|
228 |
+
|
229 |
<p>
|
230 |
<label for="download_title"><?php _e( 'Download Title', 'download-monitor' ); ?>:</label>
|
231 |
+
<input type="text" name="download_title" id="download_title" value="" class="download_title input"
|
232 |
+
placeholder="<?php _e( 'Required title', 'download-monitor' ); ?>"/>
|
233 |
</p>
|
234 |
+
|
235 |
<p>
|
236 |
<label for="download_version"><?php _e( 'Version', 'download-monitor' ); ?>:</label>
|
237 |
+
<input type="text" name="download_version" id="download_version" value="" class="input"
|
238 |
+
placeholder="<?php _e( 'Optional version number', 'download-monitor' ); ?>"/>
|
239 |
</p>
|
240 |
+
|
241 |
<p>
|
242 |
+
<input type="submit" class="button button-primary button-large"
|
243 |
+
value="<?php _e( 'Save Download', 'download-monitor' ); ?>"/>
|
244 |
<?php wp_nonce_field( 'quick-add', 'quick-add-nonce' ) ?>
|
245 |
</p>
|
246 |
</div>
|
248 |
</form>
|
249 |
|
250 |
<script type="text/javascript">
|
251 |
+
jQuery( function () {
|
252 |
|
253 |
+
jQuery( '.nav-tab-wrapper a' ).click( function () {
|
254 |
+
jQuery( '#insert-shortcode, #quick-add' ).hide();
|
255 |
+
jQuery( jQuery( this ).attr( 'href' ) ).show();
|
256 |
+
jQuery( 'a.nav-tab-active' ).removeClass( 'nav-tab-active' );
|
257 |
+
jQuery( this ).addClass( 'nav-tab-active' );
|
258 |
return false;
|
259 |
+
} );
|
260 |
|
261 |
+
jQuery( '#quick-add' ).hide();
|
262 |
|
263 |
+
jQuery( 'body' ).on( 'click', '.insert_download', function () {
|
264 |
|
265 |
var win = window.dialogArguments || opener || parent || top;
|
266 |
|
267 |
+
var download_id = jQuery( 'input[name="download_id"]:checked' ).val();
|
268 |
+
var template = jQuery( '#template_name' ).val();
|
269 |
+
var shortcode = '[download id="' + download_id + '"';
|
270 |
|
271 |
if ( template )
|
272 |
shortcode = shortcode + ' template="' + template + '"';
|
276 |
win.send_to_editor( shortcode );
|
277 |
|
278 |
return false;
|
279 |
+
} );
|
280 |
|
281 |
+
jQuery( '.add_manually' ).click( function () {
|
282 |
+
jQuery( '#plupload-upload-ui' ).slideUp();
|
283 |
+
jQuery( '#quick-add-details' ).slideDown();
|
284 |
return false;
|
285 |
+
} );
|
286 |
|
287 |
<?php
|
288 |
$plupload_init = array(
|
313 |
?>
|
314 |
|
315 |
// create the uploader and pass the config from above
|
316 |
+
var uploader = new plupload.Uploader( <?php echo json_encode( $plupload_init ); ?> );
|
317 |
|
318 |
// checks if browser supports drag and drop upload, makes some css adjustments if necessary
|
319 |
+
uploader.bind( 'Init', function ( up ) {
|
320 |
+
var uploaddiv = jQuery( '#plupload-upload-ui' );
|
321 |
|
322 |
if ( up.features.dragdrop ) {
|
323 |
+
uploaddiv.addClass( 'drag-drop' );
|
324 |
|
325 |
+
jQuery( '#drag-drop-area' )
|
326 |
+
.bind( 'dragover.wp-uploader', function () {
|
327 |
+
uploaddiv.addClass( 'drag-over' );
|
328 |
+
} )
|
329 |
+
.bind( 'dragleave.wp-uploader, drop.wp-uploader', function () {
|
330 |
+
uploaddiv.removeClass( 'drag-over' );
|
331 |
+
} );
|
332 |
|
333 |
} else {
|
334 |
+
uploaddiv.removeClass( 'drag-drop' );
|
335 |
+
jQuery( '#drag-drop-area' ).unbind( '.wp-uploader' );
|
336 |
}
|
337 |
+
} );
|
338 |
|
339 |
uploader.init();
|
340 |
|
341 |
// a file was added in the queue
|
342 |
+
uploader.bind( 'FilesAdded', function ( up, files ) {
|
343 |
+
var hundredmb = 100 * 1024 * 1024, max = parseInt( up.settings.max_file_size, 10 );
|
344 |
|
345 |
+
plupload.each( files, function ( file ) {
|
346 |
if ( max > hundredmb && file.size > hundredmb && up.runtime != 'html5' ) {
|
347 |
// file size error?
|
348 |
} else {
|
349 |
+
jQuery( '.drag-drop-inside' ).html( '<p><?php _e( 'Please wait...', 'download-monitor' ); ?></p>' );
|
350 |
}
|
351 |
+
} );
|
352 |
|
353 |
up.refresh();
|
354 |
up.start();
|
355 |
+
} );
|
356 |
|
357 |
// a file was uploaded
|
358 |
+
uploader.bind( 'FileUploaded', function ( up, file, response ) {
|
359 |
+
jQuery( '#quick-add-details' ).find( 'input.download_url' ).val( response.response );
|
360 |
+
jQuery( '#quick-add-details' ).find( 'input.download_title' ).val( basename( response.response ) );
|
361 |
+
jQuery( '#plupload-upload-ui' ).slideUp();
|
362 |
+
jQuery( '#quick-add-details' ).slideDown();
|
363 |
+
} );
|
364 |
+
|
365 |
+
function basename( path ) {
|
366 |
+
return path.split( '/' ).reverse()[ 0 ];
|
367 |
}
|
368 |
|
369 |
+
} );
|
370 |
</script>
|
371 |
<?php
|
372 |
echo '</body></html>';
|
373 |
}
|
374 |
+
}
|
|
|
|
includes/admin/class-dlm-admin-scripts.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_Admin_Scripts {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Setup hooks
|
11 |
+
*/
|
12 |
+
public function setup() {
|
13 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Enqueue admin scripts
|
18 |
+
*/
|
19 |
+
public function enqueue_scripts() {
|
20 |
+
global $pagenow, $post;
|
21 |
+
|
22 |
+
if ( $pagenow == 'post.php' || $pagenow == 'post-new.php' ) {
|
23 |
+
|
24 |
+
// Enqueue Edit Post JS
|
25 |
+
wp_enqueue_script(
|
26 |
+
'dlm_edit_post',
|
27 |
+
plugins_url( '/assets/js/edit-post' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', WP_DLM::get_plugin_file() ),
|
28 |
+
array( 'jquery' ),
|
29 |
+
DLM_VERSION
|
30 |
+
);
|
31 |
+
|
32 |
+
// Make JavaScript strings translatable
|
33 |
+
wp_localize_script( 'dlm_edit_post', 'dlm_ep_strings', $this->get_strings( 'edit-post' ) );
|
34 |
+
|
35 |
+
// Enqueue Downloadable Files Metabox JS
|
36 |
+
if ( ( $pagenow == 'post.php' && isset( $post ) && 'dlm_download' === $post->post_type ) || ( $pagenow == 'post-new.php' && isset( $_GET['post_type'] ) && 'dlm_download' == $_GET['post_type'] ) ) {
|
37 |
+
|
38 |
+
// Enqueue Edit Download JS
|
39 |
+
wp_enqueue_script(
|
40 |
+
'dlm_edit_download',
|
41 |
+
plugins_url( '/assets/js/edit-download' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', WP_DLM::get_plugin_file() ),
|
42 |
+
array( 'jquery' ),
|
43 |
+
DLM_VERSION
|
44 |
+
);
|
45 |
+
|
46 |
+
// Make JavaScript strings translatable
|
47 |
+
wp_localize_script( 'dlm_edit_download', 'dlm_ed_strings', $this->get_strings( 'edit-download' ) );
|
48 |
+
}
|
49 |
+
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
if ( 'edit.php' == $pagenow && isset( $_GET['page'] ) && ( 'download-monitor-settings' === $_GET['page'] || 'dlm-extensions' === $_GET['page'] ) ) {
|
54 |
+
|
55 |
+
// Enqueue Settings JS
|
56 |
+
wp_enqueue_script(
|
57 |
+
'dlm_settings',
|
58 |
+
plugins_url( '/assets/js/settings' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', WP_DLM::get_plugin_file() ),
|
59 |
+
array( 'jquery' ),
|
60 |
+
DLM_VERSION
|
61 |
+
);
|
62 |
+
|
63 |
+
|
64 |
+
if ( 'dlm-extensions' === $_GET['page'] ) {
|
65 |
+
// Enqueue Extesions JS
|
66 |
+
wp_enqueue_script(
|
67 |
+
'dlm_extensions',
|
68 |
+
plugins_url( '/assets/js/extensions' . ( ( ! SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', WP_DLM::get_plugin_file() ),
|
69 |
+
array( 'jquery' ),
|
70 |
+
DLM_VERSION
|
71 |
+
);
|
72 |
+
}
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Get JS strings
|
81 |
+
*
|
82 |
+
* @param $file
|
83 |
+
*
|
84 |
+
* @return array
|
85 |
+
*/
|
86 |
+
private function get_strings( $file ) {
|
87 |
+
switch ( $file ) {
|
88 |
+
case 'edit-post':
|
89 |
+
$strings = array(
|
90 |
+
'insert_download' => __( 'Insert Download', 'download-monitor' )
|
91 |
+
);
|
92 |
+
break;
|
93 |
+
case 'edit-download':
|
94 |
+
$strings = array(
|
95 |
+
'confirm_delete' => __( 'Are you sure you want to delete this file ? ', 'download - monitor' ),
|
96 |
+
'browse_file' => __( 'Browse for a file', 'download - monitor' ),
|
97 |
+
);
|
98 |
+
break;
|
99 |
+
default:
|
100 |
+
$strings = array();
|
101 |
+
}
|
102 |
+
|
103 |
+
return $strings;
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
includes/admin/class-dlm-admin-writepanels.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Admin class.
|
@@ -11,7 +13,6 @@ class DLM_Admin_Writepanels {
|
|
11 |
* __construct function.
|
12 |
*
|
13 |
* @access public
|
14 |
-
* @return void
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
|
@@ -26,13 +27,22 @@ class DLM_Admin_Writepanels {
|
|
26 |
* @return void
|
27 |
*/
|
28 |
public function add_meta_boxes() {
|
29 |
-
add_meta_box( 'download-monitor-options', __( 'Download Options', 'download-monitor' ), array(
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
// Excerpt
|
33 |
-
if ( function_exists('wp_editor') ) {
|
34 |
remove_meta_box( 'postexcerpt', 'dlm_download', 'normal' );
|
35 |
-
add_meta_box( 'postexcerpt', __('Short Description', 'download-monitor'), array(
|
|
|
|
|
|
|
36 |
}
|
37 |
}
|
38 |
|
@@ -40,7 +50,9 @@ class DLM_Admin_Writepanels {
|
|
40 |
* download_options function.
|
41 |
*
|
42 |
* @access public
|
|
|
43 |
* @param mixed $post
|
|
|
44 |
* @return void
|
45 |
*/
|
46 |
public function download_options( $post ) {
|
@@ -82,27 +94,34 @@ class DLM_Admin_Writepanels {
|
|
82 |
* @return void
|
83 |
*/
|
84 |
public function download_files() {
|
85 |
-
global $post
|
86 |
|
87 |
wp_nonce_field( 'save_meta_data', 'dlm_nonce' );
|
88 |
?>
|
89 |
<div class="download_monitor_files dlm-metaboxes-wrapper">
|
90 |
|
|
|
|
|
|
|
|
|
|
|
91 |
<?php do_action( 'dlm_download_monitor_files_writepanel_start' ); ?>
|
92 |
|
93 |
<p class="toolbar">
|
94 |
-
<a href="#" class="button plus add_file"><?php _e('Add file', 'download-monitor'); ?></a>
|
95 |
-
<a href="#" class="close_all"><?php _e('Close all', 'download-monitor'
|
|
|
96 |
</p>
|
97 |
|
98 |
<div class="dlm-metaboxes downloadable_files">
|
99 |
<?php
|
100 |
-
|
101 |
-
|
102 |
|
103 |
-
|
|
|
104 |
|
105 |
-
$i++;
|
106 |
$file_id = $file->ID;
|
107 |
$file_version = ( $file_version = get_post_meta( $file->ID, '_version', true ) ) ? $file_version : '';
|
108 |
$file_post_date = $file->post_date;
|
@@ -119,6 +138,7 @@ class DLM_Admin_Writepanels {
|
|
119 |
|
120 |
include( 'html-downloadable-file-version.php' );
|
121 |
}
|
|
|
122 |
?>
|
123 |
</div>
|
124 |
|
@@ -126,249 +146,25 @@ class DLM_Admin_Writepanels {
|
|
126 |
|
127 |
</div>
|
128 |
<?php
|
129 |
-
ob_start();
|
130 |
-
?>
|
131 |
-
jQuery(function(){
|
132 |
-
|
133 |
-
// Expand all files
|
134 |
-
jQuery('.expand_all').click(function(){
|
135 |
-
jQuery(this).closest('.dlm-metaboxes-wrapper').find('.dlm-metabox table').show();
|
136 |
-
return false;
|
137 |
-
});
|
138 |
-
|
139 |
-
// Close all files
|
140 |
-
jQuery('.close_all').click(function(){
|
141 |
-
jQuery(this).closest('.dlm-metaboxes-wrapper').find('.dlm-metabox table').hide();
|
142 |
-
return false;
|
143 |
-
});
|
144 |
-
|
145 |
-
// Open/close
|
146 |
-
jQuery('.dlm-metaboxes-wrapper').on('click', '.dlm-metabox h3', function(event){
|
147 |
-
// If the user clicks on some form input inside the h3, like a select list (for variations), the box should not be toggled
|
148 |
-
if (jQuery(event.target).filter(':input, option').length) return;
|
149 |
-
|
150 |
-
jQuery(this).next('.dlm-metabox-content').toggle();
|
151 |
-
});
|
152 |
-
|
153 |
-
// Closes all to begin
|
154 |
-
jQuery('.dlm-metabox.closed').each(function(){
|
155 |
-
jQuery(this).find('.dlm-metabox-content').hide();
|
156 |
-
});
|
157 |
-
|
158 |
-
// Date picker
|
159 |
-
jQuery( ".date-picker-field" ).datepicker({
|
160 |
-
dateFormat: "yy-mm-dd",
|
161 |
-
numberOfMonths: 1,
|
162 |
-
showButtonPanel: true,
|
163 |
-
});
|
164 |
-
|
165 |
-
// Ordering
|
166 |
-
jQuery('.downloadable_files').sortable({
|
167 |
-
items:'.downloadable_file',
|
168 |
-
cursor:'move',
|
169 |
-
axis:'y',
|
170 |
-
handle: 'h3',
|
171 |
-
scrollSensitivity:40,
|
172 |
-
forcePlaceholderSize: true,
|
173 |
-
helper: 'clone',
|
174 |
-
opacity: 0.65,
|
175 |
-
placeholder: 'dlm-metabox-sortable-placeholder',
|
176 |
-
start:function(event,ui){
|
177 |
-
ui.item.css('background-color','#f6f6f6');
|
178 |
-
},
|
179 |
-
stop:function(event,ui){
|
180 |
-
ui.item.removeAttr('style');
|
181 |
-
downloadable_file_row_indexes();
|
182 |
-
}
|
183 |
-
});
|
184 |
-
|
185 |
-
function downloadable_file_row_indexes() {
|
186 |
-
jQuery('.downloadable_files .downloadable_file').each(function(index, el){
|
187 |
-
jQuery('.file_menu_order', el).val( parseInt( jQuery(el).index('.downloadable_files .downloadable_file') ) );
|
188 |
-
});
|
189 |
-
};
|
190 |
-
|
191 |
-
// Add a file
|
192 |
-
jQuery('.download_monitor_files').on('click', 'a.add_file', function(){
|
193 |
-
|
194 |
-
jQuery('.download_monitor_files').block({ message: null, overlayCSS: { background: '#fff url(<?php echo $download_monitor->plugin_url(); ?>/assets/images/ajax-loader.gif) no-repeat center', opacity: 0.6 } });
|
195 |
-
|
196 |
-
var size = jQuery('.downloadable_files .downloadable_file').size();
|
197 |
-
|
198 |
-
var data = {
|
199 |
-
action: 'download_monitor_add_file',
|
200 |
-
post_id: <?php echo $post->ID; ?>,
|
201 |
-
size: size,
|
202 |
-
security: '<?php echo wp_create_nonce("add-file"); ?>'
|
203 |
-
};
|
204 |
-
|
205 |
-
jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', data, function(response) {
|
206 |
-
|
207 |
-
jQuery('.downloadable_files').prepend( response );
|
208 |
-
|
209 |
-
downloadable_file_row_indexes();
|
210 |
-
|
211 |
-
jQuery('.download_monitor_files').unblock();
|
212 |
-
|
213 |
-
// Date picker
|
214 |
-
jQuery( ".date-picker-field" ).datepicker({
|
215 |
-
dateFormat: "yy-mm-dd",
|
216 |
-
numberOfMonths: 1,
|
217 |
-
showButtonPanel: true,
|
218 |
-
});
|
219 |
-
});
|
220 |
-
|
221 |
-
return false;
|
222 |
-
|
223 |
-
});
|
224 |
-
|
225 |
-
// Remove a file
|
226 |
-
jQuery('.download_monitor_files').on('click', 'button.remove_file', function(e){
|
227 |
-
e.preventDefault();
|
228 |
-
var answer = confirm('<?php _e( 'Are you sure you want to delete this file?', 'download-monitor' ); ?>');
|
229 |
-
if ( answer ) {
|
230 |
-
|
231 |
-
var el = jQuery(this).closest('.downloadable_file');
|
232 |
-
var file_id = el.attr('data-file');
|
233 |
-
|
234 |
-
if ( file_id > 0 ) {
|
235 |
-
|
236 |
-
jQuery(el).block({ message: null, overlayCSS: { background: '#fff url(<?php echo $download_monitor->plugin_url(); ?>/assets/images/ajax-loader.gif) no-repeat center', opacity: 0.6 } });
|
237 |
-
|
238 |
-
var data = {
|
239 |
-
action: 'download_monitor_remove_file',
|
240 |
-
file_id: file_id,
|
241 |
-
download_id: '<?php echo $post->ID; ?>',
|
242 |
-
security: '<?php echo wp_create_nonce( "remove-file" ); ?>'
|
243 |
-
};
|
244 |
-
|
245 |
-
jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', data, function(response) {
|
246 |
-
jQuery(el).fadeOut('300').remove();
|
247 |
-
});
|
248 |
-
|
249 |
-
} else {
|
250 |
-
jQuery(el).fadeOut('300').remove();
|
251 |
-
}
|
252 |
-
}
|
253 |
-
return false;
|
254 |
-
});
|
255 |
-
|
256 |
-
// Browse for file
|
257 |
-
jQuery('.download_monitor_files').on('click', 'a.dlm_browse_for_file', function(e){
|
258 |
-
|
259 |
-
downloadable_files_field = jQuery(this).closest('.downloadable_file').find('textarea[name^="downloadable_file_urls"]');
|
260 |
-
|
261 |
-
window.send_to_editor = window.send_to_browse_file_url;
|
262 |
-
|
263 |
-
tb_show('<?php esc_attr_e( 'Browse for a file', 'download-monitor' ); ?>', 'media-upload.php?post_id=<?php echo $post->ID; ?>&type=downloadable_file_browser&from=wpdlm01&TB_iframe=true');
|
264 |
-
|
265 |
-
return false;
|
266 |
-
});
|
267 |
-
|
268 |
-
window.send_to_browse_file_url = function(html) {
|
269 |
-
|
270 |
-
if ( html ) {
|
271 |
-
old = jQuery.trim( jQuery(downloadable_files_field).val() );
|
272 |
-
if ( old ) old = old + "\n";
|
273 |
-
jQuery(downloadable_files_field).val( old + html );
|
274 |
-
}
|
275 |
-
|
276 |
-
tb_remove();
|
277 |
-
|
278 |
-
window.send_to_editor = window.send_to_editor_default;
|
279 |
-
}
|
280 |
-
|
281 |
-
// Uploading files
|
282 |
-
var dlm_upload_file_frame;
|
283 |
-
|
284 |
-
jQuery(document).on( 'click', '.dlm_upload_file', function( event ){
|
285 |
-
|
286 |
-
var $el = $(this);
|
287 |
-
var $file_path_field = $el.parent().parent().find('.downloadable_file_urls');
|
288 |
-
var file_paths = $file_path_field.val();
|
289 |
-
|
290 |
-
event.preventDefault();
|
291 |
-
|
292 |
-
// If the media frame already exists, reopen it.
|
293 |
-
if ( dlm_upload_file_frame ) {
|
294 |
-
dlm_upload_file_frame.open();
|
295 |
-
return;
|
296 |
-
}
|
297 |
-
|
298 |
-
var downloadable_file_states = [
|
299 |
-
// Main states.
|
300 |
-
new wp.media.controller.Library({
|
301 |
-
library: wp.media.query(),
|
302 |
-
multiple: true,
|
303 |
-
title: $el.data('choose'),
|
304 |
-
priority: 20,
|
305 |
-
filterable: 'uploaded',
|
306 |
-
})
|
307 |
-
];
|
308 |
-
|
309 |
-
// Create the media frame.
|
310 |
-
dlm_upload_file_frame = wp.media.frames.downloadable_file = wp.media({
|
311 |
-
// Set the title of the modal.
|
312 |
-
title: $el.data('choose'),
|
313 |
-
library: {
|
314 |
-
type: ''
|
315 |
-
},
|
316 |
-
button: {
|
317 |
-
text: $el.data('update'),
|
318 |
-
},
|
319 |
-
multiple: true,
|
320 |
-
states: downloadable_file_states,
|
321 |
-
});
|
322 |
-
|
323 |
-
// When an image is selected, run a callback.
|
324 |
-
dlm_upload_file_frame.on( 'select', function() {
|
325 |
-
|
326 |
-
var selection = dlm_upload_file_frame.state().get('selection');
|
327 |
-
|
328 |
-
selection.map( function( attachment ) {
|
329 |
-
|
330 |
-
attachment = attachment.toJSON();
|
331 |
-
|
332 |
-
if ( attachment.url )
|
333 |
-
file_paths = file_paths ? file_paths + "\n" + attachment.url : attachment.url
|
334 |
-
|
335 |
-
} );
|
336 |
-
|
337 |
-
$file_path_field.val( file_paths );
|
338 |
-
});
|
339 |
-
|
340 |
-
// Set post to 0 and set our custom type
|
341 |
-
dlm_upload_file_frame.on( 'ready', function() {
|
342 |
-
dlm_upload_file_frame.uploader.options.uploader.params = {
|
343 |
-
type: 'dlm_download'
|
344 |
-
};
|
345 |
-
});
|
346 |
-
|
347 |
-
// Finally, open the modal.
|
348 |
-
dlm_upload_file_frame.open();
|
349 |
-
});
|
350 |
-
|
351 |
-
});
|
352 |
-
<?php
|
353 |
-
$js_code = ob_get_clean();
|
354 |
-
$download_monitor->add_inline_js( $js_code );
|
355 |
}
|
356 |
|
357 |
/**
|
358 |
* short_description function.
|
359 |
*
|
360 |
* @access public
|
|
|
361 |
* @param mixed $post
|
|
|
362 |
* @return void
|
363 |
*/
|
364 |
public function short_description( $post ) {
|
365 |
$settings = array(
|
366 |
-
'quicktags'
|
367 |
-
'textarea_name'
|
368 |
-
'quicktags'
|
369 |
-
'tinymce'
|
370 |
-
'editor_css'
|
371 |
-
|
372 |
|
373 |
wp_editor( htmlspecialchars_decode( $post->post_excerpt ), 'excerpt', $settings );
|
374 |
}
|
@@ -377,18 +173,34 @@ class DLM_Admin_Writepanels {
|
|
377 |
* save_post function.
|
378 |
*
|
379 |
* @access public
|
|
|
380 |
* @param mixed $post_id
|
381 |
* @param mixed $post
|
|
|
382 |
* @return void
|
383 |
*/
|
384 |
public function save_post( $post_id, $post ) {
|
385 |
-
if ( empty( $post_id ) || empty( $post ) || empty( $_POST ) )
|
386 |
-
|
387 |
-
|
388 |
-
if (
|
389 |
-
|
390 |
-
|
391 |
-
if ( $post
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
392 |
|
393 |
do_action( 'dlm_save_meta_boxes', $post_id, $post );
|
394 |
}
|
@@ -397,16 +209,18 @@ class DLM_Admin_Writepanels {
|
|
397 |
* save function.
|
398 |
*
|
399 |
* @access public
|
|
|
400 |
* @param mixed $post_id
|
401 |
* @param mixed $post
|
|
|
402 |
* @return void
|
403 |
*/
|
404 |
public function save_meta_boxes( $post_id, $post ) {
|
405 |
-
global $wpdb
|
406 |
|
407 |
// Update options
|
408 |
-
$_featured
|
409 |
-
$_members_only
|
410 |
$_redirect_only = ( isset( $_POST['_redirect_only'] ) ) ? 'yes' : 'no';
|
411 |
|
412 |
update_post_meta( $post_id, '_featured', $_featured );
|
@@ -418,19 +232,20 @@ class DLM_Admin_Writepanels {
|
|
418 |
// Process files
|
419 |
if ( isset( $_POST['downloadable_file_id'] ) ) {
|
420 |
|
421 |
-
$downloadable_file_id
|
422 |
-
$downloadable_file_menu_order
|
423 |
-
$downloadable_file_version
|
424 |
-
$downloadable_file_urls
|
425 |
-
$downloadable_file_date
|
426 |
-
$downloadable_file_date_hour
|
427 |
-
$downloadable_file_date_minute
|
428 |
-
$downloadable_file_download_count
|
429 |
|
430 |
for ( $i = 0; $i <= max( array_keys( $downloadable_file_id ) ); $i ++ ) {
|
431 |
|
432 |
-
if ( ! isset( $downloadable_file_id[ $i ] ) )
|
433 |
continue;
|
|
|
434 |
|
435 |
$file_id = absint( $downloadable_file_id[ $i ] );
|
436 |
$file_menu_order = absint( $downloadable_file_menu_order[ $i ] );
|
@@ -441,15 +256,16 @@ class DLM_Admin_Writepanels {
|
|
441 |
$file_download_count = sanitize_text_field( $downloadable_file_download_count[ $i ] );
|
442 |
$files = array_filter( array_map( 'trim', explode( "\n", $downloadable_file_urls[ $i ] ) ) );
|
443 |
|
444 |
-
if ( ! $file_id )
|
445 |
continue;
|
|
|
446 |
|
447 |
// Generate a useful post title
|
448 |
$file_post_title = 'Download #' . $post_id . ' File Version';
|
449 |
|
450 |
// Generate date
|
451 |
if ( empty( $file_date ) ) {
|
452 |
-
$date = current_time('timestamp');
|
453 |
} else {
|
454 |
$date = strtotime( $file_date . ' ' . $file_date_hour . ':' . $file_date_minute . ':00' );
|
455 |
}
|
@@ -462,16 +278,19 @@ class DLM_Admin_Writepanels {
|
|
462 |
'post_date' => date( 'Y-m-d H:i:s', $date )
|
463 |
), array( 'ID' => $file_id ) );
|
464 |
|
|
|
|
|
|
|
465 |
// Update post meta
|
466 |
update_post_meta( $file_id, '_version', $file_version );
|
467 |
-
update_post_meta( $file_id, '_files', $
|
468 |
|
469 |
-
$filesize = -1;
|
470 |
$main_file_path = current( $files );
|
471 |
|
472 |
if ( $main_file_path ) {
|
473 |
-
$filesize = $
|
474 |
-
$hashes = $
|
475 |
update_post_meta( $file_id, '_filesize', $filesize );
|
476 |
update_post_meta( $file_id, '_md5', $hashes['md5'] );
|
477 |
update_post_meta( $file_id, '_sha1', $hashes['sha1'] );
|
@@ -497,8 +316,9 @@ class DLM_Admin_Writepanels {
|
|
497 |
// Sync download_count
|
498 |
update_post_meta( $post_id, '_download_count', $total_download_count );
|
499 |
|
|
|
|
|
|
|
500 |
do_action( 'dlm_save_metabox', $post_id, $post );
|
501 |
}
|
502 |
-
}
|
503 |
-
|
504 |
-
new DLM_Admin_Writepanels();
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Admin class.
|
13 |
* __construct function.
|
14 |
*
|
15 |
* @access public
|
|
|
16 |
*/
|
17 |
public function __construct() {
|
18 |
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
|
27 |
* @return void
|
28 |
*/
|
29 |
public function add_meta_boxes() {
|
30 |
+
add_meta_box( 'download-monitor-options', __( 'Download Options', 'download-monitor' ), array(
|
31 |
+
$this,
|
32 |
+
'download_options'
|
33 |
+
), 'dlm_download', 'side', 'high' );
|
34 |
+
add_meta_box( 'download-monitor-file', __( 'Downloadable Files/Versions', 'download-monitor' ), array(
|
35 |
+
$this,
|
36 |
+
'download_files'
|
37 |
+
), 'dlm_download', 'normal', 'high' );
|
38 |
|
39 |
// Excerpt
|
40 |
+
if ( function_exists( 'wp_editor' ) ) {
|
41 |
remove_meta_box( 'postexcerpt', 'dlm_download', 'normal' );
|
42 |
+
add_meta_box( 'postexcerpt', __( 'Short Description', 'download-monitor' ), array(
|
43 |
+
$this,
|
44 |
+
'short_description'
|
45 |
+
), 'dlm_download', 'normal', 'high' );
|
46 |
}
|
47 |
}
|
48 |
|
50 |
* download_options function.
|
51 |
*
|
52 |
* @access public
|
53 |
+
*
|
54 |
* @param mixed $post
|
55 |
+
*
|
56 |
* @return void
|
57 |
*/
|
58 |
public function download_options( $post ) {
|
94 |
* @return void
|
95 |
*/
|
96 |
public function download_files() {
|
97 |
+
global $post;
|
98 |
|
99 |
wp_nonce_field( 'save_meta_data', 'dlm_nonce' );
|
100 |
?>
|
101 |
<div class="download_monitor_files dlm-metaboxes-wrapper">
|
102 |
|
103 |
+
<input type="hidden" name="dlm_post_id" id="dlm-post-id" value="<?php echo $post->ID; ?>" />
|
104 |
+
<input type="hidden" name="dlm_post_id" id="dlm-plugin-url" value="<?php echo WP_DLM::get_plugin_url(); ?>" />
|
105 |
+
<input type="hidden" name="dlm_post_id" id="dlm-ajax-nonce-add-file" value="<?php echo wp_create_nonce( "add-file" ); ?>" />
|
106 |
+
<input type="hidden" name="dlm_post_id" id="dlm-ajax-nonce-remove-file" value="<?php wp_create_nonce( "remove-file" ); ?>" />
|
107 |
+
|
108 |
<?php do_action( 'dlm_download_monitor_files_writepanel_start' ); ?>
|
109 |
|
110 |
<p class="toolbar">
|
111 |
+
<a href="#" class="button plus add_file"><?php _e( 'Add file', 'download-monitor' ); ?></a>
|
112 |
+
<a href="#" class="close_all"><?php _e( 'Close all', 'download-monitor' ); ?></a>
|
113 |
+
<a href="#" class="expand_all"><?php _e( 'Expand all', 'download-monitor' ); ?></a>
|
114 |
</p>
|
115 |
|
116 |
<div class="dlm-metaboxes downloadable_files">
|
117 |
<?php
|
118 |
+
$i = - 1;
|
119 |
+
$files = get_posts( 'post_parent=' . $post->ID . '&post_type=dlm_download_version&orderby=menu_order&order=ASC&post_status=any&numberposts=-1' );
|
120 |
|
121 |
+
if ( $files ) {
|
122 |
+
foreach ( $files as $file ) {
|
123 |
|
124 |
+
$i ++;
|
125 |
$file_id = $file->ID;
|
126 |
$file_version = ( $file_version = get_post_meta( $file->ID, '_version', true ) ) ? $file_version : '';
|
127 |
$file_post_date = $file->post_date;
|
138 |
|
139 |
include( 'html-downloadable-file-version.php' );
|
140 |
}
|
141 |
+
}
|
142 |
?>
|
143 |
</div>
|
144 |
|
146 |
|
147 |
</div>
|
148 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
}
|
150 |
|
151 |
/**
|
152 |
* short_description function.
|
153 |
*
|
154 |
* @access public
|
155 |
+
*
|
156 |
* @param mixed $post
|
157 |
+
*
|
158 |
* @return void
|
159 |
*/
|
160 |
public function short_description( $post ) {
|
161 |
$settings = array(
|
162 |
+
'quicktags' => array( 'buttons' => 'em,strong,link' ),
|
163 |
+
'textarea_name' => 'excerpt',
|
164 |
+
'quicktags' => true,
|
165 |
+
'tinymce' => true,
|
166 |
+
'editor_css' => '<style>#wp-excerpt-editor-container .wp-editor-area{height:200px; width:100%;}</style>'
|
167 |
+
);
|
168 |
|
169 |
wp_editor( htmlspecialchars_decode( $post->post_excerpt ), 'excerpt', $settings );
|
170 |
}
|
173 |
* save_post function.
|
174 |
*
|
175 |
* @access public
|
176 |
+
*
|
177 |
* @param mixed $post_id
|
178 |
* @param mixed $post
|
179 |
+
*
|
180 |
* @return void
|
181 |
*/
|
182 |
public function save_post( $post_id, $post ) {
|
183 |
+
if ( empty( $post_id ) || empty( $post ) || empty( $_POST ) ) {
|
184 |
+
return;
|
185 |
+
}
|
186 |
+
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
187 |
+
return;
|
188 |
+
}
|
189 |
+
if ( is_int( wp_is_post_revision( $post ) ) ) {
|
190 |
+
return;
|
191 |
+
}
|
192 |
+
if ( is_int( wp_is_post_autosave( $post ) ) ) {
|
193 |
+
return;
|
194 |
+
}
|
195 |
+
if ( empty( $_POST['dlm_nonce'] ) || ! wp_verify_nonce( $_POST['dlm_nonce'], 'save_meta_data' ) ) {
|
196 |
+
return;
|
197 |
+
}
|
198 |
+
if ( ! current_user_can( 'edit_post', $post_id ) ) {
|
199 |
+
return;
|
200 |
+
}
|
201 |
+
if ( $post->post_type != 'dlm_download' ) {
|
202 |
+
return;
|
203 |
+
}
|
204 |
|
205 |
do_action( 'dlm_save_meta_boxes', $post_id, $post );
|
206 |
}
|
209 |
* save function.
|
210 |
*
|
211 |
* @access public
|
212 |
+
*
|
213 |
* @param mixed $post_id
|
214 |
* @param mixed $post
|
215 |
+
*
|
216 |
* @return void
|
217 |
*/
|
218 |
public function save_meta_boxes( $post_id, $post ) {
|
219 |
+
global $wpdb;
|
220 |
|
221 |
// Update options
|
222 |
+
$_featured = ( isset( $_POST['_featured'] ) ) ? 'yes' : 'no';
|
223 |
+
$_members_only = ( isset( $_POST['_members_only'] ) ) ? 'yes' : 'no';
|
224 |
$_redirect_only = ( isset( $_POST['_redirect_only'] ) ) ? 'yes' : 'no';
|
225 |
|
226 |
update_post_meta( $post_id, '_featured', $_featured );
|
232 |
// Process files
|
233 |
if ( isset( $_POST['downloadable_file_id'] ) ) {
|
234 |
|
235 |
+
$downloadable_file_id = $_POST['downloadable_file_id'];
|
236 |
+
$downloadable_file_menu_order = $_POST['downloadable_file_menu_order'];
|
237 |
+
$downloadable_file_version = $_POST['downloadable_file_version'];
|
238 |
+
$downloadable_file_urls = $_POST['downloadable_file_urls'];
|
239 |
+
$downloadable_file_date = $_POST['downloadable_file_date'];
|
240 |
+
$downloadable_file_date_hour = $_POST['downloadable_file_date_hour'];
|
241 |
+
$downloadable_file_date_minute = $_POST['downloadable_file_date_minute'];
|
242 |
+
$downloadable_file_download_count = $_POST['downloadable_file_download_count'];
|
243 |
|
244 |
for ( $i = 0; $i <= max( array_keys( $downloadable_file_id ) ); $i ++ ) {
|
245 |
|
246 |
+
if ( ! isset( $downloadable_file_id[ $i ] ) ) {
|
247 |
continue;
|
248 |
+
}
|
249 |
|
250 |
$file_id = absint( $downloadable_file_id[ $i ] );
|
251 |
$file_menu_order = absint( $downloadable_file_menu_order[ $i ] );
|
256 |
$file_download_count = sanitize_text_field( $downloadable_file_download_count[ $i ] );
|
257 |
$files = array_filter( array_map( 'trim', explode( "\n", $downloadable_file_urls[ $i ] ) ) );
|
258 |
|
259 |
+
if ( ! $file_id ) {
|
260 |
continue;
|
261 |
+
}
|
262 |
|
263 |
// Generate a useful post title
|
264 |
$file_post_title = 'Download #' . $post_id . ' File Version';
|
265 |
|
266 |
// Generate date
|
267 |
if ( empty( $file_date ) ) {
|
268 |
+
$date = current_time( 'timestamp' );
|
269 |
} else {
|
270 |
$date = strtotime( $file_date . ' ' . $file_date_hour . ':' . $file_date_minute . ':00' );
|
271 |
}
|
278 |
'post_date' => date( 'Y-m-d H:i:s', $date )
|
279 |
), array( 'ID' => $file_id ) );
|
280 |
|
281 |
+
// File Manager
|
282 |
+
$file_manager = new DLM_File_Manager();
|
283 |
+
|
284 |
// Update post meta
|
285 |
update_post_meta( $file_id, '_version', $file_version );
|
286 |
+
update_post_meta( $file_id, '_files', $file_manager->json_encode_files( $files ) );
|
287 |
|
288 |
+
$filesize = - 1;
|
289 |
$main_file_path = current( $files );
|
290 |
|
291 |
if ( $main_file_path ) {
|
292 |
+
$filesize = $file_manager->get_file_size( $main_file_path );
|
293 |
+
$hashes = $file_manager->get_file_hashes( $main_file_path );
|
294 |
update_post_meta( $file_id, '_filesize', $filesize );
|
295 |
update_post_meta( $file_id, '_md5', $hashes['md5'] );
|
296 |
update_post_meta( $file_id, '_sha1', $hashes['sha1'] );
|
316 |
// Sync download_count
|
317 |
update_post_meta( $post_id, '_download_count', $total_download_count );
|
318 |
|
319 |
+
// Delete transients
|
320 |
+
delete_transient( 'dlm_file_version_ids_' . $post_id );
|
321 |
+
|
322 |
do_action( 'dlm_save_metabox', $post_id, $post );
|
323 |
}
|
324 |
+
}
|
|
|
|
includes/admin/class-dlm-admin.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Admin class.
|
@@ -10,17 +12,9 @@ class DLM_Admin {
|
|
10 |
private $settings;
|
11 |
|
12 |
/**
|
13 |
-
*
|
14 |
-
*
|
15 |
-
* @access public
|
16 |
-
* @return void
|
17 |
*/
|
18 |
-
public function
|
19 |
-
include_once( 'class-dlm-admin-writepanels.php' );
|
20 |
-
include_once( 'class-dlm-admin-media-browser.php' );
|
21 |
-
include_once( 'class-dlm-admin-cpt.php' );
|
22 |
-
include_once( 'class-dlm-admin-insert.php' );
|
23 |
-
|
24 |
// Directory protection
|
25 |
add_filter( 'mod_rewrite_rules', array( $this, 'ms_files_protection' ) );
|
26 |
add_filter( 'upload_dir', array( $this, 'upload_dir' ) );
|
@@ -37,16 +31,18 @@ class DLM_Admin {
|
|
37 |
* ms_files_protection function.
|
38 |
*
|
39 |
* @access public
|
|
|
40 |
* @param mixed $rewrite
|
|
|
41 |
* @return void
|
42 |
*/
|
43 |
public function ms_files_protection( $rewrite ) {
|
44 |
-
global $wp_rewrite;
|
45 |
|
46 |
-
|
47 |
-
|
|
|
48 |
|
49 |
-
$rule
|
50 |
$rule .= "<IfModule mod_rewrite.c>\n";
|
51 |
$rule .= "RewriteEngine On\n";
|
52 |
$rule .= "RewriteCond %{QUERY_STRING} file=dlm_uploads/ [NC]\n";
|
@@ -60,15 +56,17 @@ class DLM_Admin {
|
|
60 |
* upload_dir function.
|
61 |
*
|
62 |
* @access public
|
|
|
63 |
* @param mixed $pathdata
|
|
|
64 |
* @return void
|
65 |
*/
|
66 |
public function upload_dir( $pathdata ) {
|
67 |
|
68 |
-
if ( isset( $_POST['type'] ) && $_POST['type']
|
69 |
if ( empty( $pathdata['subdir'] ) ) {
|
70 |
$pathdata['path'] = $pathdata['path'] . '/dlm_uploads';
|
71 |
-
$pathdata['url'] = $pathdata['url']. '/dlm_uploads';
|
72 |
$pathdata['subdir'] = '/dlm_uploads';
|
73 |
} else {
|
74 |
$new_subdir = '/dlm_uploads' . $pathdata['subdir'];
|
@@ -91,16 +89,16 @@ class DLM_Admin {
|
|
91 |
private function init_settings() {
|
92 |
$this->settings = apply_filters( 'download_monitor_settings',
|
93 |
array(
|
94 |
-
'general'
|
95 |
__( 'General', 'download-monitor' ),
|
96 |
array(
|
97 |
array(
|
98 |
-
'name'
|
99 |
-
'std'
|
100 |
-
'label'
|
101 |
-
'desc'
|
102 |
-
'type'
|
103 |
-
'options'
|
104 |
'' => __( 'Default - Title and count', 'download-monitor' ),
|
105 |
'button' => __( 'Button - CSS styled button showing title and count', 'download-monitor' ),
|
106 |
'box' => __( 'Box - Box showing thumbnail, title, count, filename and filesize.', 'download-monitor' ),
|
@@ -111,34 +109,34 @@ class DLM_Admin {
|
|
111 |
)
|
112 |
),
|
113 |
array(
|
114 |
-
'name'
|
115 |
-
'std'
|
116 |
-
'label'
|
117 |
-
'desc'
|
118 |
),
|
119 |
array(
|
120 |
-
'name'
|
121 |
-
'std'
|
122 |
-
'label'
|
123 |
-
'cb_label'
|
124 |
-
'desc'
|
125 |
-
'type'
|
126 |
),
|
127 |
array(
|
128 |
-
'name'
|
129 |
-
'std'
|
130 |
-
'label'
|
131 |
-
'cb_label'
|
132 |
-
'desc'
|
133 |
-
'type'
|
134 |
),
|
135 |
array(
|
136 |
-
'name'
|
137 |
-
'std'
|
138 |
-
'label'
|
139 |
-
'cb_label'
|
140 |
-
'desc'
|
141 |
-
'type'
|
142 |
),
|
143 |
),
|
144 |
),
|
@@ -146,67 +144,67 @@ class DLM_Admin {
|
|
146 |
__( 'Endpoint', 'download-monitor' ),
|
147 |
array(
|
148 |
array(
|
149 |
-
'name'
|
150 |
-
'std'
|
151 |
-
'placeholder'
|
152 |
-
'label'
|
153 |
-
'desc'
|
154 |
),
|
155 |
array(
|
156 |
-
'name'
|
157 |
-
'std'
|
158 |
-
'label'
|
159 |
-
'desc'
|
160 |
-
'type'
|
161 |
-
'options'
|
162 |
'ID' => __( 'Download ID', 'download-monitor' ),
|
163 |
'slug' => __( 'Download slug', 'download-monitor' )
|
164 |
)
|
165 |
),
|
166 |
array(
|
167 |
-
'name'
|
168 |
-
'std'
|
169 |
-
'label'
|
170 |
-
'cb_label'
|
171 |
-
'desc'
|
172 |
-
'type'
|
173 |
),
|
174 |
array(
|
175 |
-
'name'
|
176 |
-
'std'
|
177 |
-
'label'
|
178 |
-
'cb_label'
|
179 |
-
'desc'
|
180 |
-
'type'
|
181 |
)
|
182 |
)
|
183 |
),
|
184 |
-
'logging'
|
185 |
__( 'Logging', 'download-monitor' ),
|
186 |
array(
|
187 |
array(
|
188 |
-
'name'
|
189 |
-
'cb_label'
|
190 |
-
'std'
|
191 |
-
'label'
|
192 |
-
'desc'
|
193 |
-
'type'
|
194 |
),
|
195 |
array(
|
196 |
-
'name'
|
197 |
-
'std'
|
198 |
-
'label'
|
199 |
-
'desc'
|
200 |
-
'placeholder'
|
201 |
-
'type'
|
202 |
),
|
203 |
array(
|
204 |
-
'name'
|
205 |
-
'std'
|
206 |
-
'label'
|
207 |
-
'desc'
|
208 |
'placeholder' => '',
|
209 |
-
'type'
|
210 |
),
|
211 |
)
|
212 |
)
|
@@ -225,8 +223,9 @@ class DLM_Admin {
|
|
225 |
|
226 |
foreach ( $this->settings as $section ) {
|
227 |
foreach ( $section[1] as $option ) {
|
228 |
-
if ( isset( $option['std'] ) )
|
229 |
add_option( $option['name'], $option['std'] );
|
|
|
230 |
register_setting( 'download-monitor', $option['name'] );
|
231 |
}
|
232 |
}
|
@@ -239,33 +238,39 @@ class DLM_Admin {
|
|
239 |
* @return void
|
240 |
*/
|
241 |
public function admin_enqueue_scripts( $hook ) {
|
242 |
-
global $
|
243 |
|
244 |
-
wp_enqueue_style( 'download_monitor_menu_css',
|
245 |
|
246 |
-
if ( $hook == 'index.php' )
|
247 |
-
wp_enqueue_style( 'download_monitor_dashboard_css',
|
|
|
248 |
|
249 |
$enqueue = false;
|
250 |
|
251 |
-
if ( $hook == 'post-new.php' || $hook == 'post.php' || $hook == 'edit.php' )
|
252 |
-
if ( ( ! empty( $_GET['post_type'] ) && $_GET['post_type'] == 'dlm_download' ) || ( ! empty( $post->post_type ) && 'dlm_download' === $post->post_type ) )
|
253 |
$enqueue = true;
|
|
|
|
|
254 |
|
255 |
-
if ( strstr( $hook, 'dlm_download_page' ) )
|
256 |
$enqueue = true;
|
|
|
257 |
|
258 |
-
if ( $hook == 'edit-tags.php' && strstr( $_GET['taxonomy'], 'dlm_download' ) )
|
259 |
$enqueue = true;
|
|
|
260 |
|
261 |
-
|
262 |
-
|
|
|
263 |
|
264 |
-
wp_enqueue_script( 'jquery-blockui',
|
265 |
wp_enqueue_script( 'jquery-ui-sortable' );
|
266 |
wp_enqueue_script( 'jquery-ui-datepicker' );
|
267 |
-
wp_enqueue_style( 'jquery-ui-style', (is_ssl()) ? 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' : 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' );
|
268 |
-
wp_enqueue_style( 'download_monitor_admin_css',
|
269 |
}
|
270 |
|
271 |
/**
|
@@ -275,21 +280,38 @@ class DLM_Admin {
|
|
275 |
* @return void
|
276 |
*/
|
277 |
public function admin_menu() {
|
278 |
-
if ( get_option( 'dlm_enable_logging' ) == 1 )
|
279 |
-
add_submenu_page( 'edit.php?post_type=dlm_download', __( 'Logs', 'download-monitor' ), __( 'Logs', 'download-monitor' ), 'manage_options', 'download-monitor-logs', array( $this, 'log_viewer' ) );
|
280 |
|
281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
|
283 |
-
if ( apply_filters( 'dlm_show_addons_page', true ) )
|
284 |
-
add_submenu_page( 'edit.php?post_type=dlm_download', __( 'Download Monitor Add-ons', 'download-monitor' ), __( 'Add-ons', 'download-monitor' ) , 'manage_options', 'dlm-addons', array( $this, 'addons_page' ) );
|
285 |
}
|
286 |
|
287 |
/**
|
288 |
-
* Output
|
289 |
*/
|
290 |
-
public function
|
291 |
-
$
|
292 |
-
$
|
293 |
}
|
294 |
|
295 |
/**
|
@@ -299,8 +321,6 @@ class DLM_Admin {
|
|
299 |
* @return void
|
300 |
*/
|
301 |
public function settings_page() {
|
302 |
-
global $download_monitor;
|
303 |
-
|
304 |
$this->init_settings();
|
305 |
?>
|
306 |
<div class="wrap">
|
@@ -309,108 +329,105 @@ class DLM_Admin {
|
|
309 |
<?php settings_fields( 'download-monitor' ); ?>
|
310 |
<?php screen_icon(); ?>
|
311 |
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
|
320 |
<?php
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
|
326 |
-
|
327 |
|
328 |
-
|
329 |
|
330 |
-
|
331 |
|
332 |
-
|
333 |
|
334 |
-
|
335 |
|
336 |
-
|
337 |
|
338 |
-
|
|
|
|
|
339 |
|
340 |
-
|
341 |
|
342 |
-
|
343 |
|
344 |
-
|
345 |
|
346 |
-
|
|
|
|
|
|
|
347 |
|
348 |
-
|
349 |
-
|
|
|
350 |
|
351 |
break;
|
352 |
-
|
353 |
|
354 |
-
|
|
|
|
|
355 |
|
356 |
-
|
357 |
-
|
|
|
358 |
|
359 |
break;
|
360 |
-
|
361 |
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
|
|
|
|
366 |
|
367 |
-
|
368 |
-
|
|
|
369 |
|
370 |
break;
|
371 |
-
|
372 |
|
373 |
-
|
|
|
|
|
374 |
|
375 |
-
|
376 |
-
|
|
|
377 |
|
378 |
break;
|
379 |
|
380 |
-
}
|
381 |
-
|
382 |
-
echo '</td></tr>';
|
383 |
}
|
384 |
|
385 |
-
echo '</
|
386 |
-
|
387 |
}
|
|
|
|
|
|
|
|
|
388 |
?>
|
389 |
<p class="submit">
|
390 |
-
<input type="submit" class="button-primary"
|
|
|
391 |
</p>
|
392 |
-
|
393 |
</div>
|
394 |
<?php
|
395 |
-
|
396 |
-
$download_monitor->add_inline_js("
|
397 |
-
jQuery('.nav-tab-wrapper a').click(function() {
|
398 |
-
jQuery('.settings_panel').hide();
|
399 |
-
jQuery('.nav-tab-active').removeClass('nav-tab-active');
|
400 |
-
jQuery( jQuery(this).attr('href') ).show();
|
401 |
-
jQuery(this).addClass('nav-tab-active');
|
402 |
-
return false;
|
403 |
-
});
|
404 |
-
jQuery('#setting-dlm_default_template').change(function(){
|
405 |
-
if ( jQuery(this).val() == 'custom' ) {
|
406 |
-
jQuery('#setting-dlm_custom_template').closest('tr').show();
|
407 |
-
} else {
|
408 |
-
jQuery('#setting-dlm_custom_template').closest('tr').hide();
|
409 |
-
}
|
410 |
-
}).change();
|
411 |
-
|
412 |
-
jQuery('.nav-tab-wrapper a:first').click();
|
413 |
-
");
|
414 |
}
|
415 |
|
416 |
/**
|
@@ -420,23 +437,29 @@ class DLM_Admin {
|
|
420 |
* @return void
|
421 |
*/
|
422 |
function log_viewer() {
|
423 |
-
if ( ! class_exists( 'WP_List_Table' ) )
|
424 |
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
|
|
|
425 |
|
426 |
require_once( 'class-dlm-logging-list-table.php' );
|
427 |
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
|
|
|
|
|
|
|
|
|
|
440 |
}
|
441 |
|
442 |
/**
|
@@ -445,8 +468,9 @@ class DLM_Admin {
|
|
445 |
public function delete_logs() {
|
446 |
global $wpdb;
|
447 |
|
448 |
-
if ( empty( $_GET['dlm_delete_logs'] ) )
|
449 |
return;
|
|
|
450 |
|
451 |
check_admin_referer( 'delete_logs' );
|
452 |
|
@@ -459,66 +483,69 @@ class DLM_Admin {
|
|
459 |
public function export_logs() {
|
460 |
global $wpdb;
|
461 |
|
462 |
-
if ( empty( $_GET['dlm_download_logs'] ) )
|
463 |
return;
|
|
|
464 |
|
465 |
$filter_status = isset( $_REQUEST['filter_status'] ) ? sanitize_text_field( $_REQUEST['filter_status'] ) : '';
|
466 |
-
|
467 |
|
468 |
$items = $wpdb->get_results(
|
469 |
$wpdb->prepare(
|
470 |
-
|
471 |
WHERE type = 'download'
|
472 |
" . ( $filter_status ? "AND download_status = '%s'" : "%s" ) . "
|
473 |
" . ( $filter_month ? "AND download_date >= '%s'" : "%s" ) . "
|
474 |
" . ( $filter_month ? "AND download_date <= '%s'" : "%s" ) . "
|
475 |
ORDER BY download_date DESC",
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
|
496 |
if ( ! empty( $items ) ) {
|
497 |
foreach ( $items as $item ) {
|
498 |
-
$row
|
499 |
-
$row[]
|
500 |
-
$row[]
|
501 |
|
502 |
$download = new DLM_Download( $item->download_id );
|
503 |
-
|
504 |
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
|
|
509 |
|
510 |
-
$row[]
|
511 |
|
512 |
-
if ( $item->user_id )
|
513 |
-
|
|
|
514 |
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
|
523 |
$row[] = $item->user_ip;
|
524 |
$row[] = $item->user_agent;
|
@@ -545,8 +572,6 @@ class DLM_Admin {
|
|
545 |
* @return void
|
546 |
*/
|
547 |
public function admin_dashboard() {
|
548 |
-
|
549 |
}
|
550 |
-
}
|
551 |
-
|
552 |
-
new DLM_Admin();
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Admin class.
|
12 |
private $settings;
|
13 |
|
14 |
/**
|
15 |
+
* Setup actions etc.
|
|
|
|
|
|
|
16 |
*/
|
17 |
+
public function setup() {
|
|
|
|
|
|
|
|
|
|
|
18 |
// Directory protection
|
19 |
add_filter( 'mod_rewrite_rules', array( $this, 'ms_files_protection' ) );
|
20 |
add_filter( 'upload_dir', array( $this, 'upload_dir' ) );
|
31 |
* ms_files_protection function.
|
32 |
*
|
33 |
* @access public
|
34 |
+
*
|
35 |
* @param mixed $rewrite
|
36 |
+
*
|
37 |
* @return void
|
38 |
*/
|
39 |
public function ms_files_protection( $rewrite ) {
|
|
|
40 |
|
41 |
+
if ( ! is_multisite() ) {
|
42 |
+
return $rewrite;
|
43 |
+
}
|
44 |
|
45 |
+
$rule = "\n# DLM Rules - Protect Files from ms-files.php\n\n";
|
46 |
$rule .= "<IfModule mod_rewrite.c>\n";
|
47 |
$rule .= "RewriteEngine On\n";
|
48 |
$rule .= "RewriteCond %{QUERY_STRING} file=dlm_uploads/ [NC]\n";
|
56 |
* upload_dir function.
|
57 |
*
|
58 |
* @access public
|
59 |
+
*
|
60 |
* @param mixed $pathdata
|
61 |
+
*
|
62 |
* @return void
|
63 |
*/
|
64 |
public function upload_dir( $pathdata ) {
|
65 |
|
66 |
+
if ( isset( $_POST['type'] ) && 'dlm_download' === $_POST['type'] ) {
|
67 |
if ( empty( $pathdata['subdir'] ) ) {
|
68 |
$pathdata['path'] = $pathdata['path'] . '/dlm_uploads';
|
69 |
+
$pathdata['url'] = $pathdata['url'] . '/dlm_uploads';
|
70 |
$pathdata['subdir'] = '/dlm_uploads';
|
71 |
} else {
|
72 |
$new_subdir = '/dlm_uploads' . $pathdata['subdir'];
|
89 |
private function init_settings() {
|
90 |
$this->settings = apply_filters( 'download_monitor_settings',
|
91 |
array(
|
92 |
+
'general' => array(
|
93 |
__( 'General', 'download-monitor' ),
|
94 |
array(
|
95 |
array(
|
96 |
+
'name' => 'dlm_default_template',
|
97 |
+
'std' => '',
|
98 |
+
'label' => __( 'Default Template', 'download-monitor' ),
|
99 |
+
'desc' => __( 'Choose which template is used for <code>[download]</code> shortcodes by default (this can be overridden by the <code>format</code> argument).', 'download-monitor' ),
|
100 |
+
'type' => 'select',
|
101 |
+
'options' => array(
|
102 |
'' => __( 'Default - Title and count', 'download-monitor' ),
|
103 |
'button' => __( 'Button - CSS styled button showing title and count', 'download-monitor' ),
|
104 |
'box' => __( 'Box - Box showing thumbnail, title, count, filename and filesize.', 'download-monitor' ),
|
109 |
)
|
110 |
),
|
111 |
array(
|
112 |
+
'name' => 'dlm_custom_template',
|
113 |
+
'std' => '',
|
114 |
+
'label' => __( 'Custom Template', 'download-monitor' ),
|
115 |
+
'desc' => __( 'Leaving this blank will use the default <code>content-download.php</code> template file. If you enter, for example, <code>image</code>, the <code>content-download-image.php</code> template will be used instead. You can add custom templates inside your theme folder.', 'download-monitor' )
|
116 |
),
|
117 |
array(
|
118 |
+
'name' => 'dlm_generate_hash_md5',
|
119 |
+
'std' => '0',
|
120 |
+
'label' => __( 'MD5 hashes', 'download-monitor' ),
|
121 |
+
'cb_label' => __( 'Generate MD5 hash for uploaded files', 'download-monitor' ),
|
122 |
+
'desc' => '',
|
123 |
+
'type' => 'checkbox'
|
124 |
),
|
125 |
array(
|
126 |
+
'name' => 'dlm_generate_hash_sha1',
|
127 |
+
'std' => '0',
|
128 |
+
'label' => __( 'SHA1 hashes', 'download-monitor' ),
|
129 |
+
'cb_label' => __( 'Generate SHA1 hash for uploaded files', 'download-monitor' ),
|
130 |
+
'desc' => '',
|
131 |
+
'type' => 'checkbox'
|
132 |
),
|
133 |
array(
|
134 |
+
'name' => 'dlm_generate_hash_crc32b',
|
135 |
+
'std' => '0',
|
136 |
+
'label' => __( 'CRC32B hashes', 'download-monitor' ),
|
137 |
+
'cb_label' => __( 'Generate CRC32B hash for uploaded files', 'download-monitor' ),
|
138 |
+
'desc' => __( 'Hashes can optionally be output via shortcodes, but may cause performance issues with large files.', 'download-monitor' ),
|
139 |
+
'type' => 'checkbox'
|
140 |
),
|
141 |
),
|
142 |
),
|
144 |
__( 'Endpoint', 'download-monitor' ),
|
145 |
array(
|
146 |
array(
|
147 |
+
'name' => 'dlm_download_endpoint',
|
148 |
+
'std' => 'download',
|
149 |
+
'placeholder' => __( 'download', 'download-monitor' ),
|
150 |
+
'label' => __( 'Download Endpoint', 'download-monitor' ),
|
151 |
+
'desc' => sprintf( __( 'Define what endpoint should be used for download links. By default this will be <code>%s</code>.', 'download-monitor' ), home_url( '/download/' ) )
|
152 |
),
|
153 |
array(
|
154 |
+
'name' => 'dlm_download_endpoint_value',
|
155 |
+
'std' => 'ID',
|
156 |
+
'label' => __( 'Endpoint Value', 'download-monitor' ),
|
157 |
+
'desc' => sprintf( __( 'Define what unique value should be used on the end of your endpoint to identify the downloadable file. e.g. ID would give a link like <code>%s</code>', 'download-monitor' ), home_url( '/download/10/' ) ),
|
158 |
+
'type' => 'select',
|
159 |
+
'options' => array(
|
160 |
'ID' => __( 'Download ID', 'download-monitor' ),
|
161 |
'slug' => __( 'Download slug', 'download-monitor' )
|
162 |
)
|
163 |
),
|
164 |
array(
|
165 |
+
'name' => 'dlm_xsendfile_enabled',
|
166 |
+
'std' => '',
|
167 |
+
'label' => __( 'X-Accel-Redirect / X-Sendfile', 'download-monitor' ),
|
168 |
+
'cb_label' => __( 'Enable', 'download-monitor' ),
|
169 |
+
'desc' => __( 'If supported, <code>X-Accel-Redirect</code> / <code>X-Sendfile</code> can be used to serve downloads instead of PHP (server requires <code>mod_xsendfile</code>).', 'download-monitor' ),
|
170 |
+
'type' => 'checkbox'
|
171 |
),
|
172 |
array(
|
173 |
+
'name' => 'dlm_hotlink_protection_enabled',
|
174 |
+
'std' => '',
|
175 |
+
'label' => __( 'Prevent hotlinking', 'download-monitor' ),
|
176 |
+
'cb_label' => __( 'Enable', 'download-monitor' ),
|
177 |
+
'desc' => __( 'If enabled, the download handler will check the PHP referer to see if it originated from your site and if not, redirect them to the homepage.', 'download-monitor' ),
|
178 |
+
'type' => 'checkbox'
|
179 |
)
|
180 |
)
|
181 |
),
|
182 |
+
'logging' => array(
|
183 |
__( 'Logging', 'download-monitor' ),
|
184 |
array(
|
185 |
array(
|
186 |
+
'name' => 'dlm_enable_logging',
|
187 |
+
'cb_label' => __( 'Enable', 'download-monitor' ),
|
188 |
+
'std' => '1',
|
189 |
+
'label' => __( 'Download Log', 'download-monitor' ),
|
190 |
+
'desc' => __( 'Log download attempts, IP addresses and more.', 'download-monitor' ),
|
191 |
+
'type' => 'checkbox'
|
192 |
),
|
193 |
array(
|
194 |
+
'name' => 'dlm_ip_blacklist',
|
195 |
+
'std' => '192.168.0.*',
|
196 |
+
'label' => __( 'Blacklist IPs', 'download-monitor' ),
|
197 |
+
'desc' => __( 'List IP Addresses to blacklist, 1 per line. Use <code>*</code> for a wildcard.', 'download-monitor' ),
|
198 |
+
'placeholder' => '',
|
199 |
+
'type' => 'textarea'
|
200 |
),
|
201 |
array(
|
202 |
+
'name' => 'dlm_user_agent_blacklist',
|
203 |
+
'std' => 'Googlebot',
|
204 |
+
'label' => __( 'Blacklist user agents', 'download-monitor' ),
|
205 |
+
'desc' => __( 'List browser user agents to blacklist, 1 per line.', 'download-monitor' ),
|
206 |
'placeholder' => '',
|
207 |
+
'type' => 'textarea'
|
208 |
),
|
209 |
)
|
210 |
)
|
223 |
|
224 |
foreach ( $this->settings as $section ) {
|
225 |
foreach ( $section[1] as $option ) {
|
226 |
+
if ( isset( $option['std'] ) ) {
|
227 |
add_option( $option['name'], $option['std'] );
|
228 |
+
}
|
229 |
register_setting( 'download-monitor', $option['name'] );
|
230 |
}
|
231 |
}
|
238 |
* @return void
|
239 |
*/
|
240 |
public function admin_enqueue_scripts( $hook ) {
|
241 |
+
global $post;
|
242 |
|
243 |
+
wp_enqueue_style( 'download_monitor_menu_css', WP_DLM::get_plugin_url() . '/assets/css/menu.css' );
|
244 |
|
245 |
+
if ( $hook == 'index.php' ) {
|
246 |
+
wp_enqueue_style( 'download_monitor_dashboard_css', WP_DLM::get_plugin_url() . '/assets/css/dashboard.css' );
|
247 |
+
}
|
248 |
|
249 |
$enqueue = false;
|
250 |
|
251 |
+
if ( $hook == 'post-new.php' || $hook == 'post.php' || $hook == 'edit.php' ) {
|
252 |
+
if ( ( ! empty( $_GET['post_type'] ) && $_GET['post_type'] == 'dlm_download' ) || ( ! empty( $post->post_type ) && 'dlm_download' === $post->post_type ) ) {
|
253 |
$enqueue = true;
|
254 |
+
}
|
255 |
+
}
|
256 |
|
257 |
+
if ( strstr( $hook, 'dlm_download_page' ) ) {
|
258 |
$enqueue = true;
|
259 |
+
}
|
260 |
|
261 |
+
if ( $hook == 'edit-tags.php' && strstr( $_GET['taxonomy'], 'dlm_download' ) ) {
|
262 |
$enqueue = true;
|
263 |
+
}
|
264 |
|
265 |
+
if ( ! $enqueue ) {
|
266 |
+
return;
|
267 |
+
}
|
268 |
|
269 |
+
wp_enqueue_script( 'jquery-blockui', WP_DLM::get_plugin_url() . '/assets/js/blockui.min.js', array( 'jquery' ), '2.61' );
|
270 |
wp_enqueue_script( 'jquery-ui-sortable' );
|
271 |
wp_enqueue_script( 'jquery-ui-datepicker' );
|
272 |
+
wp_enqueue_style( 'jquery-ui-style', ( is_ssl() ) ? 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' : 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' );
|
273 |
+
wp_enqueue_style( 'download_monitor_admin_css', WP_DLM::get_plugin_url() . '/assets/css/admin.css', array( 'dashicons' ) );
|
274 |
}
|
275 |
|
276 |
/**
|
280 |
* @return void
|
281 |
*/
|
282 |
public function admin_menu() {
|
|
|
|
|
283 |
|
284 |
+
// Logging object
|
285 |
+
$logging = new DLM_Logging();
|
286 |
+
|
287 |
+
// Logs page
|
288 |
+
if ( $logging->is_logging_enabled() ) {
|
289 |
+
add_submenu_page( 'edit.php?post_type=dlm_download', __( 'Logs', 'download-monitor' ), __( 'Logs', 'download-monitor' ), 'manage_options', 'download-monitor-logs', array(
|
290 |
+
$this,
|
291 |
+
'log_viewer'
|
292 |
+
) );
|
293 |
+
}
|
294 |
+
|
295 |
+
// Settings page
|
296 |
+
add_submenu_page( 'edit.php?post_type=dlm_download', __( 'Settings', 'download-monitor' ), __( 'Settings', 'download-monitor' ), 'manage_options', 'download-monitor-settings', array(
|
297 |
+
$this,
|
298 |
+
'settings_page'
|
299 |
+
) );
|
300 |
+
|
301 |
+
// Extensions page
|
302 |
+
add_submenu_page( 'edit.php?post_type=dlm_download', __( 'Download Monitor Extensions', 'download-monitor' ), __( 'Extensions', 'download-monitor' ), 'manage_options', 'dlm-extensions', array(
|
303 |
+
$this,
|
304 |
+
'extensions_page'
|
305 |
+
) );
|
306 |
|
|
|
|
|
307 |
}
|
308 |
|
309 |
/**
|
310 |
+
* Output extensions page
|
311 |
*/
|
312 |
+
public function extensions_page() {
|
313 |
+
$admin_extensions = new DLM_Admin_Extensions();
|
314 |
+
$admin_extensions->output();
|
315 |
}
|
316 |
|
317 |
/**
|
321 |
* @return void
|
322 |
*/
|
323 |
public function settings_page() {
|
|
|
|
|
324 |
$this->init_settings();
|
325 |
?>
|
326 |
<div class="wrap">
|
329 |
<?php settings_fields( 'download-monitor' ); ?>
|
330 |
<?php screen_icon(); ?>
|
331 |
|
332 |
+
<h2 class="nav-tab-wrapper">
|
333 |
+
<?php
|
334 |
+
foreach ( $this->settings as $key => $section ) {
|
335 |
+
echo '<a href="#settings-' . sanitize_title( $key ) . '" class="nav-tab">' . esc_html( $section[0] ) . '</a>';
|
336 |
+
}
|
337 |
+
?>
|
338 |
+
</h2><br/>
|
339 |
|
340 |
<?php
|
341 |
+
if ( ! empty( $_GET['settings-updated'] ) ) {
|
342 |
+
flush_rewrite_rules();
|
343 |
+
echo '<div class="updated fade"><p>' . __( 'Settings successfully saved', 'download-monitor' ) . '</p></div>';
|
344 |
+
}
|
345 |
|
346 |
+
foreach ( $this->settings as $key => $section ) {
|
347 |
|
348 |
+
echo '<div id="settings-' . sanitize_title( $key ) . '" class="settings_panel">';
|
349 |
|
350 |
+
echo '<table class="form-table">';
|
351 |
|
352 |
+
foreach ( $section[1] as $option ) {
|
353 |
|
354 |
+
$placeholder = ( ! empty( $option['placeholder'] ) ) ? 'placeholder="' . $option['placeholder'] . '"' : '';
|
355 |
|
356 |
+
echo '<tr valign="top"><th scope="row"><label for="setting-' . $option['name'] . '">' . $option['label'] . '</a></th><td>';
|
357 |
|
358 |
+
if ( ! isset( $option['type'] ) ) {
|
359 |
+
$option['type'] = '';
|
360 |
+
}
|
361 |
|
362 |
+
$value = get_option( $option['name'] );
|
363 |
|
364 |
+
switch ( $option['type'] ) {
|
365 |
|
366 |
+
case "checkbox" :
|
367 |
|
368 |
+
?><label><input id="setting-<?php echo $option['name']; ?>"
|
369 |
+
name="<?php echo $option['name']; ?>" type="checkbox"
|
370 |
+
value="1" <?php checked( '1', $value ); ?> /> <?php echo $option['cb_label']; ?>
|
371 |
+
</label><?php
|
372 |
|
373 |
+
if ( $option['desc'] ) {
|
374 |
+
echo ' <p class="description">' . $option['desc'] . '</p>';
|
375 |
+
}
|
376 |
|
377 |
break;
|
378 |
+
case "textarea" :
|
379 |
|
380 |
+
?><textarea id="setting-<?php echo $option['name']; ?>" class="large-text" cols="50"
|
381 |
+
rows="3"
|
382 |
+
name="<?php echo $option['name']; ?>" <?php echo $placeholder; ?>><?php echo esc_textarea( $value ); ?></textarea><?php
|
383 |
|
384 |
+
if ( $option['desc'] ) {
|
385 |
+
echo ' <p class="description">' . $option['desc'] . '</p>';
|
386 |
+
}
|
387 |
|
388 |
break;
|
389 |
+
case "select" :
|
390 |
|
391 |
+
?><select id="setting-<?php echo $option['name']; ?>" class="regular-text"
|
392 |
+
name="<?php echo $option['name']; ?>"><?php
|
393 |
+
foreach ( $option['options'] as $key => $name ) {
|
394 |
+
echo '<option value="' . esc_attr( $key ) . '" ' . selected( $value, $key, false ) . '>' . esc_html( $name ) . '</option>';
|
395 |
+
}
|
396 |
+
?></select><?php
|
397 |
|
398 |
+
if ( $option['desc'] ) {
|
399 |
+
echo ' <p class="description">' . $option['desc'] . '</p>';
|
400 |
+
}
|
401 |
|
402 |
break;
|
403 |
+
default :
|
404 |
|
405 |
+
?><input id="setting-<?php echo $option['name']; ?>" class="regular-text" type="text"
|
406 |
+
name="<?php echo $option['name']; ?>"
|
407 |
+
value="<?php esc_attr_e( $value ); ?>" <?php echo $placeholder; ?> /><?php
|
408 |
|
409 |
+
if ( $option['desc'] ) {
|
410 |
+
echo ' <p class="description">' . $option['desc'] . '</p>';
|
411 |
+
}
|
412 |
|
413 |
break;
|
414 |
|
|
|
|
|
|
|
415 |
}
|
416 |
|
417 |
+
echo '</td></tr>';
|
|
|
418 |
}
|
419 |
+
|
420 |
+
echo '</table></div>';
|
421 |
+
|
422 |
+
}
|
423 |
?>
|
424 |
<p class="submit">
|
425 |
+
<input type="submit" class="button-primary"
|
426 |
+
value="<?php _e( 'Save Changes', 'download-monitor' ); ?>"/>
|
427 |
</p>
|
428 |
+
</form>
|
429 |
</div>
|
430 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
431 |
}
|
432 |
|
433 |
/**
|
437 |
* @return void
|
438 |
*/
|
439 |
function log_viewer() {
|
440 |
+
if ( ! class_exists( 'WP_List_Table' ) ) {
|
441 |
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
|
442 |
+
}
|
443 |
|
444 |
require_once( 'class-dlm-logging-list-table.php' );
|
445 |
|
446 |
+
$DLM_Logging_List_Table = new DLM_Logging_List_Table();
|
447 |
+
$DLM_Logging_List_Table->prepare_items();
|
448 |
+
?>
|
449 |
+
<div class="wrap">
|
450 |
+
<div id="icon-edit" class="icon32 icon32-posts-dlm_download"><br/></div>
|
451 |
+
|
452 |
+
<h2><?php _e( 'Download Logs', 'download-monitor' ); ?> <a
|
453 |
+
href="<?php echo add_query_arg( 'dlm_download_logs', 'true' ); ?>"
|
454 |
+
class="add-new-h2"><?php _e( 'Export CSV', 'download-monitor' ); ?></a> <a
|
455 |
+
href="<?php echo wp_nonce_url( add_query_arg( 'dlm_delete_logs', 'true' ), 'delete_logs' ); ?>"
|
456 |
+
class="add-new-h2"><?php _e( 'Delete Logs', 'download-monitor' ); ?></a></h2><br/>
|
457 |
+
|
458 |
+
<form id="dlm_logs">
|
459 |
+
<?php $DLM_Logging_List_Table->display() ?>
|
460 |
+
</form>
|
461 |
+
</div>
|
462 |
+
<?php
|
463 |
}
|
464 |
|
465 |
/**
|
468 |
public function delete_logs() {
|
469 |
global $wpdb;
|
470 |
|
471 |
+
if ( empty( $_GET['dlm_delete_logs'] ) ) {
|
472 |
return;
|
473 |
+
}
|
474 |
|
475 |
check_admin_referer( 'delete_logs' );
|
476 |
|
483 |
public function export_logs() {
|
484 |
global $wpdb;
|
485 |
|
486 |
+
if ( empty( $_GET['dlm_download_logs'] ) ) {
|
487 |
return;
|
488 |
+
}
|
489 |
|
490 |
$filter_status = isset( $_REQUEST['filter_status'] ) ? sanitize_text_field( $_REQUEST['filter_status'] ) : '';
|
491 |
+
$filter_month = ! empty( $_REQUEST['filter_month'] ) ? sanitize_text_field( $_REQUEST['filter_month'] ) : '';
|
492 |
|
493 |
$items = $wpdb->get_results(
|
494 |
$wpdb->prepare(
|
495 |
+
"SELECT * FROM {$wpdb->download_log}
|
496 |
WHERE type = 'download'
|
497 |
" . ( $filter_status ? "AND download_status = '%s'" : "%s" ) . "
|
498 |
" . ( $filter_month ? "AND download_date >= '%s'" : "%s" ) . "
|
499 |
" . ( $filter_month ? "AND download_date <= '%s'" : "%s" ) . "
|
500 |
ORDER BY download_date DESC",
|
501 |
+
( $filter_status ? $filter_status : "" ),
|
502 |
+
( $filter_month ? date( 'Y-m-01', strtotime( $filter_month ) ) : "" ),
|
503 |
+
( $filter_month ? date( 'Y-m-t', strtotime( $filter_month ) ) : "" )
|
504 |
+
)
|
505 |
+
);
|
506 |
+
|
507 |
+
$rows = array();
|
508 |
+
$row = array();
|
509 |
+
$row[] = __( 'Download ID', 'download-monitor' );
|
510 |
+
$row[] = __( 'Version ID', 'download-monitor' );
|
511 |
+
$row[] = __( 'Filename', 'download-monitor' );
|
512 |
+
$row[] = __( 'User ID', 'download-monitor' );
|
513 |
+
$row[] = __( 'User Login', 'download-monitor' );
|
514 |
+
$row[] = __( 'User Email', 'download-monitor' );
|
515 |
+
$row[] = __( 'User IP', 'download-monitor' );
|
516 |
+
$row[] = __( 'User Agent', 'download-monitor' );
|
517 |
+
$row[] = __( 'Date', 'download-monitor' );
|
518 |
+
$row[] = __( 'Status', 'download-monitor' );
|
519 |
+
$rows[] = '"' . implode( '","', $row ) . '"';
|
520 |
|
521 |
if ( ! empty( $items ) ) {
|
522 |
foreach ( $items as $item ) {
|
523 |
+
$row = array();
|
524 |
+
$row[] = $item->download_id;
|
525 |
+
$row[] = $item->version_id;
|
526 |
|
527 |
$download = new DLM_Download( $item->download_id );
|
528 |
+
$download->set_version( $item->version_id );
|
529 |
|
530 |
+
if ( $download->exists() && $download->get_the_filename() ) {
|
531 |
+
$row[] = $download->get_the_filename();
|
532 |
+
} else {
|
533 |
+
$row[] = '-';
|
534 |
+
}
|
535 |
|
536 |
+
$row[] = $item->user_id;
|
537 |
|
538 |
+
if ( $item->user_id ) {
|
539 |
+
$user = get_user_by( 'id', $item->user_id );
|
540 |
+
}
|
541 |
|
542 |
+
if ( ! isset( $user ) || ! $user ) {
|
543 |
+
$row[] = '-';
|
544 |
+
$row[] = '-';
|
545 |
+
} else {
|
546 |
+
$row[] = $user->user_login;
|
547 |
+
$row[] = $user->user_email;
|
548 |
+
}
|
549 |
|
550 |
$row[] = $item->user_ip;
|
551 |
$row[] = $item->user_agent;
|
572 |
* @return void
|
573 |
*/
|
574 |
public function admin_dashboard() {
|
575 |
+
new DLM_Admin_Dashboard();
|
576 |
}
|
577 |
+
}
|
|
|
|
includes/admin/class-dlm-category-walker.php
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
3 |
|
4 |
/**
|
5 |
* DLM_Category_Walker class.
|
@@ -9,7 +11,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
9 |
class DLM_Category_Walker extends Walker {
|
10 |
|
11 |
var $tree_type = 'category';
|
12 |
-
var $db_fields = array
|
13 |
|
14 |
/**
|
15 |
* @see Walker::start_el()
|
@@ -22,10 +24,11 @@ class DLM_Category_Walker extends Walker {
|
|
22 |
*/
|
23 |
function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
|
24 |
|
25 |
-
if ( ! empty( $args['hierarchical'] ) )
|
26 |
-
$pad = str_repeat(' ', $depth * 3);
|
27 |
-
else
|
28 |
$pad = '';
|
|
|
29 |
|
30 |
$cat_name = apply_filters( 'list_product_cats', $object->name, $object );
|
31 |
|
@@ -33,15 +36,17 @@ class DLM_Category_Walker extends Walker {
|
|
33 |
|
34 |
$output .= "\t<option class=\"level-$depth\" value=\"" . $value . "\"";
|
35 |
|
36 |
-
if ( $value == $args['selected'] || ( is_array( $args['selected'] ) && in_array( $value, $args['selected'] ) ) )
|
37 |
$output .= ' selected="selected"';
|
|
|
38 |
|
39 |
$output .= '>';
|
40 |
|
41 |
$output .= $pad . __( $cat_name, 'download-monitor' );
|
42 |
|
43 |
-
if ( ! empty( $args['show_count'] ) )
|
44 |
$output .= ' (' . $object->count . ')';
|
|
|
45 |
|
46 |
$output .= "</option>\n";
|
47 |
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
} // Exit if accessed directly
|
5 |
|
6 |
/**
|
7 |
* DLM_Category_Walker class.
|
11 |
class DLM_Category_Walker extends Walker {
|
12 |
|
13 |
var $tree_type = 'category';
|
14 |
+
var $db_fields = array( 'parent' => 'parent', 'id' => 'term_id', 'slug' => 'slug' );
|
15 |
|
16 |
/**
|
17 |
* @see Walker::start_el()
|
24 |
*/
|
25 |
function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
|
26 |
|
27 |
+
if ( ! empty( $args['hierarchical'] ) ) {
|
28 |
+
$pad = str_repeat( ' ', $depth * 3 );
|
29 |
+
} else {
|
30 |
$pad = '';
|
31 |
+
}
|
32 |
|
33 |
$cat_name = apply_filters( 'list_product_cats', $object->name, $object );
|
34 |
|
36 |
|
37 |
$output .= "\t<option class=\"level-$depth\" value=\"" . $value . "\"";
|
38 |
|
39 |
+
if ( $value == $args['selected'] || ( is_array( $args['selected'] ) && in_array( $value, $args['selected'] ) ) ) {
|
40 |
$output .= ' selected="selected"';
|
41 |
+
}
|
42 |
|
43 |
$output .= '>';
|
44 |
|
45 |
$output .= $pad . __( $cat_name, 'download-monitor' );
|
46 |
|
47 |
+
if ( ! empty( $args['show_count'] ) ) {
|
48 |
$output .= ' (' . $object->count . ')';
|
49 |
+
}
|
50 |
|
51 |
$output .= "</option>\n";
|
52 |
}
|
includes/admin/class-dlm-logging-list-table.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* DLM_Logging_List_Table class.
|
4 |
*
|
@@ -11,87 +12,93 @@ class DLM_Logging_List_Table extends WP_List_Table {
|
|
11 |
*
|
12 |
* @access public
|
13 |
*/
|
14 |
-
function __construct(){
|
15 |
global $status, $page, $wpdb;
|
16 |
|
17 |
parent::__construct( array(
|
18 |
-
'singular'
|
19 |
-
'plural'
|
20 |
-
'ajax'
|
21 |
) );
|
22 |
|
23 |
$this->filter_status = isset( $_REQUEST['filter_status'] ) ? sanitize_text_field( $_REQUEST['filter_status'] ) : '';
|
24 |
$this->logs_per_page = ! empty( $_REQUEST['logs_per_page'] ) ? intval( $_REQUEST['logs_per_page'] ) : 25;
|
25 |
$this->filter_month = ! empty( $_REQUEST['filter_month'] ) ? sanitize_text_field( $_REQUEST['filter_month'] ) : '';
|
26 |
|
27 |
-
if ( $this->logs_per_page < 1 )
|
28 |
$this->logs_per_page = 9999999999999;
|
|
|
29 |
}
|
30 |
|
31 |
/**
|
32 |
* column_default function.
|
33 |
*
|
34 |
* @access public
|
|
|
35 |
* @param mixed $log
|
36 |
* @param mixed $column_name
|
|
|
37 |
* @return void
|
38 |
*/
|
39 |
function column_default( $log, $column_name ) {
|
40 |
-
switch( $column_name ) {
|
41 |
case 'status' :
|
42 |
switch ( $log->download_status ) {
|
43 |
case 'failed' :
|
44 |
$download_status = '<span class="failed" title="' . esc_attr( $log->download_status_message ) . '">❢</span>';
|
45 |
-
|
46 |
case 'redirected' :
|
47 |
$download_status = '<span class="redirected" title="' . esc_attr( $log->download_status_message ) . '">➜</span>';
|
48 |
-
|
49 |
default :
|
50 |
$download_status = '<span class="completed" title="' . __( 'Download Complete', 'download-monitor' ) . '">✔</span>';
|
51 |
-
|
52 |
}
|
53 |
|
54 |
return $download_status;
|
55 |
-
|
56 |
case 'date' :
|
57 |
return '<time title="' . date_i18n( get_option( 'date_format' ) . ' @ ' . get_option( 'time_format' ), strtotime( $log->download_date ) ) . '"">' . sprintf( __( '%s ago', 'download-monitor' ), human_time_diff( strtotime( $log->download_date ), current_time( 'timestamp' ) ) ) . '</time>';
|
58 |
-
|
59 |
case 'download' :
|
60 |
$download = new DLM_Download( $log->download_id );
|
61 |
$download->set_version( $log->version_id );
|
62 |
|
63 |
if ( ! $download->exists() ) {
|
64 |
-
$download_string
|
65 |
} else {
|
66 |
$download_string = '<a href="' . admin_url( 'post.php?post=' . $download->id . '&action=edit' ) . '">';
|
67 |
$download_string .= '#' . $download->id . ' – ' . $download->get_the_title();
|
68 |
$download_string .= '</a>';
|
69 |
}
|
70 |
|
71 |
-
if ( $log->version )
|
72 |
$download_string .= ' (' . sprintf( __( 'v%s', 'download-monitor' ), $log->version ) . ')';
|
|
|
73 |
|
74 |
return $download_string;
|
75 |
-
|
76 |
case 'file' :
|
77 |
$download = new DLM_Download( $log->download_id );
|
78 |
$download->set_version( $log->version_id );
|
79 |
|
80 |
-
if ( $download->exists() && $download->get_the_filename() )
|
81 |
$download_string = '<code>' . $download->get_the_filename() . '</code>';
|
82 |
-
else
|
83 |
$download_string = '–';
|
|
|
84 |
|
85 |
return $download_string;
|
86 |
-
|
87 |
case 'user' :
|
88 |
-
if ( $log->user_id )
|
89 |
$user = get_user_by( 'id', $log->user_id );
|
|
|
90 |
|
91 |
if ( ! isset( $user ) || ! $user ) {
|
92 |
-
$user_string
|
93 |
} else {
|
94 |
-
$user_string
|
95 |
$user_string .= $user->user_login . ' – ';
|
96 |
$user_string .= '<a href="mailto:' . $user->user_email . '">';
|
97 |
$user_string .= $user->user_email;
|
@@ -99,15 +106,15 @@ class DLM_Logging_List_Table extends WP_List_Table {
|
|
99 |
}
|
100 |
|
101 |
return $user_string;
|
102 |
-
|
103 |
case 'user_ip' :
|
104 |
return '<a href="http://whois.arin.net/rest/ip/' . $log->user_ip . '" target="_blank">' . $log->user_ip . '</a>';
|
105 |
-
|
106 |
case 'user_ua' :
|
107 |
$ua = $this->uaparser->parse( $log->user_agent );
|
108 |
|
109 |
return $ua->toFullString;
|
110 |
-
|
111 |
}
|
112 |
}
|
113 |
|
@@ -117,16 +124,17 @@ class DLM_Logging_List_Table extends WP_List_Table {
|
|
117 |
* @access public
|
118 |
* @return void
|
119 |
*/
|
120 |
-
public function get_columns(){
|
121 |
$columns = array(
|
122 |
-
'status'
|
123 |
-
'download'
|
124 |
-
'file'
|
125 |
-
'user'
|
126 |
-
'user_ip'
|
127 |
-
'user_ua'
|
128 |
-
'date'
|
129 |
);
|
|
|
130 |
return $columns;
|
131 |
}
|
132 |
|
@@ -135,69 +143,77 @@ class DLM_Logging_List_Table extends WP_List_Table {
|
|
135 |
*/
|
136 |
public function display_tablenav( $which ) {
|
137 |
?>
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
|
|
|
|
|
|
151 |
SELECT DISTINCT YEAR( download_date ) AS year, MONTH( download_date ) AS month
|
152 |
FROM {$wpdb->download_log}
|
153 |
WHERE type = 'download'
|
154 |
ORDER BY download_date DESC
|
155 |
"
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
?>
|
163 |
-
<select name="filter_month">
|
164 |
-
<option <?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
|
165 |
-
<?php
|
166 |
-
foreach ( $months as $arc_row ) {
|
167 |
-
if ( 0 == $arc_row->year )
|
168 |
-
continue;
|
169 |
-
|
170 |
-
$month = zeroise( $arc_row->month, 2 );
|
171 |
-
$year = $arc_row->year;
|
172 |
-
|
173 |
-
printf( "<option %s value='%s'>%s</option>\n",
|
174 |
-
selected( $m, $year . '-' . $month, false ),
|
175 |
-
esc_attr( $year . '-' . $month ),
|
176 |
-
|
177 |
-
sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
|
178 |
-
);
|
179 |
-
}
|
180 |
-
?>
|
181 |
-
</select>
|
182 |
-
<?php endif;
|
183 |
?>
|
184 |
-
<select name="
|
185 |
-
<option value=
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
</select>
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
</div><?php
|
202 |
}
|
203 |
|
@@ -221,14 +237,17 @@ class DLM_Logging_List_Table extends WP_List_Table {
|
|
221 |
|
222 |
$query_where = " type = 'download' ";
|
223 |
|
224 |
-
if ( $this->filter_status )
|
225 |
$query_where .= " AND download_status = '{$filter_status}' ";
|
|
|
226 |
|
227 |
-
if ( $this->filter_month )
|
228 |
$query_where .= " AND download_date >= '" . date( 'Y-m-01', strtotime( $this->filter_month ) ) . "' ";
|
|
|
229 |
|
230 |
-
if ( $this->filter_month )
|
231 |
$query_where .= " AND download_date <= '" . date( 'Y-m-t', strtotime( $this->filter_month ) ) . "' ";
|
|
|
232 |
|
233 |
// Total Count of Logs
|
234 |
$total_items = $wpdb->get_var( "SELECT COUNT(ID) FROM {$wpdb->download_log} WHERE {$query_where};" );
|
@@ -250,8 +269,9 @@ class DLM_Logging_List_Table extends WP_List_Table {
|
|
250 |
) );
|
251 |
|
252 |
// Parser
|
253 |
-
if ( ! class_exists( 'UAParser' ) )
|
254 |
-
|
|
|
255 |
|
256 |
$this->uaparser = new UAParser;
|
257 |
}
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* DLM_Logging_List_Table class.
|
5 |
*
|
12 |
*
|
13 |
* @access public
|
14 |
*/
|
15 |
+
function __construct() {
|
16 |
global $status, $page, $wpdb;
|
17 |
|
18 |
parent::__construct( array(
|
19 |
+
'singular' => 'log',
|
20 |
+
'plural' => 'logs',
|
21 |
+
'ajax' => false
|
22 |
) );
|
23 |
|
24 |
$this->filter_status = isset( $_REQUEST['filter_status'] ) ? sanitize_text_field( $_REQUEST['filter_status'] ) : '';
|
25 |
$this->logs_per_page = ! empty( $_REQUEST['logs_per_page'] ) ? intval( $_REQUEST['logs_per_page'] ) : 25;
|
26 |
$this->filter_month = ! empty( $_REQUEST['filter_month'] ) ? sanitize_text_field( $_REQUEST['filter_month'] ) : '';
|
27 |
|
28 |
+
if ( $this->logs_per_page < 1 ) {
|
29 |
$this->logs_per_page = 9999999999999;
|
30 |
+
}
|
31 |
}
|
32 |
|
33 |
/**
|
34 |
* column_default function.
|
35 |
*
|
36 |
* @access public
|
37 |
+
*
|
38 |
* @param mixed $log
|
39 |
* @param mixed $column_name
|
40 |
+
*
|
41 |
* @return void
|
42 |
*/
|
43 |
function column_default( $log, $column_name ) {
|
44 |
+
switch ( $column_name ) {
|
45 |
case 'status' :
|
46 |
switch ( $log->download_status ) {
|
47 |
case 'failed' :
|
48 |
$download_status = '<span class="failed" title="' . esc_attr( $log->download_status_message ) . '">❢</span>';
|
49 |
+
break;
|
50 |
case 'redirected' :
|
51 |
$download_status = '<span class="redirected" title="' . esc_attr( $log->download_status_message ) . '">➜</span>';
|
52 |
+
break;
|
53 |
default :
|
54 |
$download_status = '<span class="completed" title="' . __( 'Download Complete', 'download-monitor' ) . '">✔</span>';
|
55 |
+
break;
|
56 |
}
|
57 |
|
58 |
return $download_status;
|
59 |
+
break;
|
60 |
case 'date' :
|
61 |
return '<time title="' . date_i18n( get_option( 'date_format' ) . ' @ ' . get_option( 'time_format' ), strtotime( $log->download_date ) ) . '"">' . sprintf( __( '%s ago', 'download-monitor' ), human_time_diff( strtotime( $log->download_date ), current_time( 'timestamp' ) ) ) . '</time>';
|
62 |
+
break;
|
63 |
case 'download' :
|
64 |
$download = new DLM_Download( $log->download_id );
|
65 |
$download->set_version( $log->version_id );
|
66 |
|
67 |
if ( ! $download->exists() ) {
|
68 |
+
$download_string = sprintf( __( 'Download #%d (no longer exists)', 'download-monitor' ), $log->download_id );
|
69 |
} else {
|
70 |
$download_string = '<a href="' . admin_url( 'post.php?post=' . $download->id . '&action=edit' ) . '">';
|
71 |
$download_string .= '#' . $download->id . ' – ' . $download->get_the_title();
|
72 |
$download_string .= '</a>';
|
73 |
}
|
74 |
|
75 |
+
if ( $log->version ) {
|
76 |
$download_string .= ' (' . sprintf( __( 'v%s', 'download-monitor' ), $log->version ) . ')';
|
77 |
+
}
|
78 |
|
79 |
return $download_string;
|
80 |
+
break;
|
81 |
case 'file' :
|
82 |
$download = new DLM_Download( $log->download_id );
|
83 |
$download->set_version( $log->version_id );
|
84 |
|
85 |
+
if ( $download->exists() && $download->get_the_filename() ) {
|
86 |
$download_string = '<code>' . $download->get_the_filename() . '</code>';
|
87 |
+
} else {
|
88 |
$download_string = '–';
|
89 |
+
}
|
90 |
|
91 |
return $download_string;
|
92 |
+
break;
|
93 |
case 'user' :
|
94 |
+
if ( $log->user_id ) {
|
95 |
$user = get_user_by( 'id', $log->user_id );
|
96 |
+
}
|
97 |
|
98 |
if ( ! isset( $user ) || ! $user ) {
|
99 |
+
$user_string = __( 'Non-member', 'download-monitor' );
|
100 |
} else {
|
101 |
+
$user_string = '<a href="' . admin_url( 'user-edit.php?user_id=' . $user->ID ) . '">';
|
102 |
$user_string .= $user->user_login . ' – ';
|
103 |
$user_string .= '<a href="mailto:' . $user->user_email . '">';
|
104 |
$user_string .= $user->user_email;
|
106 |
}
|
107 |
|
108 |
return $user_string;
|
109 |
+
break;
|
110 |
case 'user_ip' :
|
111 |
return '<a href="http://whois.arin.net/rest/ip/' . $log->user_ip . '" target="_blank">' . $log->user_ip . '</a>';
|
112 |
+
break;
|
113 |
case 'user_ua' :
|
114 |
$ua = $this->uaparser->parse( $log->user_agent );
|
115 |
|
116 |
return $ua->toFullString;
|
117 |
+
break;
|
118 |
}
|
119 |
}
|
120 |
|
124 |
* @access public
|
125 |
* @return void
|
126 |
*/
|
127 |
+
public function get_columns() {
|
128 |
$columns = array(
|
129 |
+
'status' => '',
|
130 |
+
'download' => __( 'Download', 'download-monitor' ),
|
131 |
+
'file' => __( 'File', 'download-monitor' ),
|
132 |
+
'user' => __( 'User', 'download-monitor' ),
|
133 |
+
'user_ip' => __( 'IP Address', 'download-monitor' ),
|
134 |
+
'user_ua' => __( 'User Agent', 'download-monitor' ),
|
135 |
+
'date' => __( 'Date', 'download-monitor' ),
|
136 |
);
|
137 |
+
|
138 |
return $columns;
|
139 |
}
|
140 |
|
143 |
*/
|
144 |
public function display_tablenav( $which ) {
|
145 |
?>
|
146 |
+
<div class="tablenav <?php echo esc_attr( $which ); ?>">
|
147 |
+
<?php if ( 'top' == $which ) : ?>
|
148 |
+
<div class="alignleft actions">
|
149 |
+
<select name="filter_status">
|
150 |
+
<option value=""><?php _e( 'Any status', 'download-monitor' ); ?></option>
|
151 |
+
<option
|
152 |
+
value="failed" <?php selected( $this->filter_status, 'failed' ); ?>><?php _e( 'Failed', 'download-monitor' ); ?></option>
|
153 |
+
<option
|
154 |
+
value="redirected" <?php selected( $this->filter_status, 'redirected' ); ?>><?php _e( 'Redirected', 'download-monitor' ); ?></option>
|
155 |
+
<option
|
156 |
+
value="completed" <?php selected( $this->filter_status, 'completed' ); ?>><?php _e( 'Completed', 'download-monitor' ); ?></option>
|
157 |
+
</select>
|
158 |
+
<?php
|
159 |
+
global $wpdb, $wp_locale;
|
160 |
+
|
161 |
+
$months = $wpdb->get_results( "
|
162 |
SELECT DISTINCT YEAR( download_date ) AS year, MONTH( download_date ) AS month
|
163 |
FROM {$wpdb->download_log}
|
164 |
WHERE type = 'download'
|
165 |
ORDER BY download_date DESC
|
166 |
"
|
167 |
+
);
|
168 |
+
|
169 |
+
$month_count = count( $months );
|
170 |
+
|
171 |
+
if ( $month_count && ! ( 1 == $month_count && 0 == $months[0]->month ) ) :
|
172 |
+
$m = isset( $_GET['filter_month'] ) ? $_GET['filter_month'] : 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
?>
|
174 |
+
<select name="filter_month">
|
175 |
+
<option <?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
|
176 |
+
<?php
|
177 |
+
foreach ( $months as $arc_row ) {
|
178 |
+
if ( 0 == $arc_row->year ) {
|
179 |
+
continue;
|
180 |
+
}
|
181 |
+
|
182 |
+
$month = zeroise( $arc_row->month, 2 );
|
183 |
+
$year = $arc_row->year;
|
184 |
+
|
185 |
+
printf( "<option %s value='%s'>%s</option>\n",
|
186 |
+
selected( $m, $year . '-' . $month, false ),
|
187 |
+
esc_attr( $year . '-' . $month ),
|
188 |
+
|
189 |
+
sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
|
190 |
+
);
|
191 |
+
}
|
192 |
+
?>
|
193 |
</select>
|
194 |
+
<?php endif;
|
195 |
+
?>
|
196 |
+
<select name="logs_per_page">
|
197 |
+
<option value="25"><?php _e( '25 per page', 'download-monitor' ); ?></option>
|
198 |
+
<option
|
199 |
+
value="50" <?php selected( $this->logs_per_page, 50 ) ?>><?php _e( '50 per page', 'download-monitor' ); ?></option>
|
200 |
+
<option
|
201 |
+
value="100" <?php selected( $this->logs_per_page, 100 ) ?>><?php _e( '100 per page', 'download-monitor' ); ?></option>
|
202 |
+
<option
|
203 |
+
value="200" <?php selected( $this->logs_per_page, 200 ) ?>><?php _e( '200 per page', 'download-monitor' ); ?></option>
|
204 |
+
<option
|
205 |
+
value="-1" <?php selected( $this->logs_per_page, - 1 ) ?>><?php _e( 'Show All', 'download-monitor' ); ?></option>
|
206 |
+
</select>
|
207 |
+
<input type="hidden" name="post_type" value="dlm_download"/>
|
208 |
+
<input type="hidden" name="page" value="download-monitor-logs"/>
|
209 |
+
<input type="submit" value="<?php _e( 'Filter', 'download-monitor' ); ?>" class="button"/>
|
210 |
+
</div>
|
211 |
+
<?php endif; ?>
|
212 |
+
<?php
|
213 |
+
$this->extra_tablenav( $which );
|
214 |
+
$this->pagination( $which );
|
215 |
+
?>
|
216 |
+
<br class="clear"/>
|
217 |
</div><?php
|
218 |
}
|
219 |
|
237 |
|
238 |
$query_where = " type = 'download' ";
|
239 |
|
240 |
+
if ( $this->filter_status ) {
|
241 |
$query_where .= " AND download_status = '{$filter_status}' ";
|
242 |
+
}
|
243 |
|
244 |
+
if ( $this->filter_month ) {
|
245 |
$query_where .= " AND download_date >= '" . date( 'Y-m-01', strtotime( $this->filter_month ) ) . "' ";
|
246 |
+
}
|
247 |
|
248 |
+
if ( $this->filter_month ) {
|
249 |
$query_where .= " AND download_date <= '" . date( 'Y-m-t', strtotime( $this->filter_month ) ) . "' ";
|
250 |
+
}
|
251 |
|
252 |
// Total Count of Logs
|
253 |
$total_items = $wpdb->get_var( "SELECT COUNT(ID) FROM {$wpdb->download_log} WHERE {$query_where};" );
|
269 |
) );
|
270 |
|
271 |
// Parser
|
272 |
+
if ( ! class_exists( 'UAParser' ) ) {
|
273 |
+
require_once( "uaparser/uaparser.php" );
|
274 |
+
}
|
275 |
|
276 |
$this->uaparser = new UAParser;
|
277 |
}
|
includes/admin/html-downloadable-file-version.php
CHANGED
@@ -2,9 +2,10 @@
|
|
2 |
<h3>
|
3 |
<button type="button" class="remove_file button"><?php _e( 'Remove', 'download-monitor' ); ?></button>
|
4 |
<div class="handlediv" title="<?php _e( 'Click to toggle', 'download-monitor' ); ?>"></div>
|
5 |
-
<strong>#<?php echo $file_id; ?> — <?php echo sprintf( __( 'Version <span class="version">%s</span> (%s)', 'download-monitor' ), ( $file_version ) ? $file_version : __('n/a', 'download-monitor'), date_i18n( get_option( 'date_format' ), strtotime( $file_post_date ) ) ); ?> — <?php echo sprintf( _n('Downloaded %s time', 'Downloaded %s times', $file_download_count, 'download-monitor'), $file_download_count ); ?></strong>
|
6 |
-
<input type="hidden" name="downloadable_file_id[<?php echo $i; ?>]" value="<?php echo $file_id; ?>"
|
7 |
-
<input type="hidden" class="file_menu_order" name="downloadable_file_menu_order[<?php echo $i; ?>]"
|
|
|
8 |
</h3>
|
9 |
<table cellpadding="0" cellspacing="0" class="dlm-metabox-content">
|
10 |
<tbody>
|
@@ -12,55 +13,70 @@
|
|
12 |
<?php do_action( 'dlm_downloadable_file_version_table_start' ); ?>
|
13 |
|
14 |
<tr>
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
20 |
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
$buttons = apply_filters( 'dlm_downloadable_file_version_buttons', array(
|
26 |
-
'upload_file' => array(
|
27 |
-
'text' => __( 'Upload file', 'download-monitor' ),
|
28 |
-
'data' => array(
|
29 |
-
'choose' => __( 'Choose a file', 'download-monitor' ),
|
30 |
-
'update' => __( 'Insert file URL', 'download-monitor' ),
|
31 |
-
)
|
32 |
-
),
|
33 |
-
'browse_for_file' => array(
|
34 |
-
'text' => __( 'Browse for file', 'download-monitor' )
|
35 |
-
)
|
36 |
-
) );
|
37 |
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
45 |
-
|
46 |
-
|
|
|
|
|
|
|
47 |
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
</
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
|
63 |
-
|
64 |
|
65 |
</tbody>
|
66 |
</table>
|
2 |
<h3>
|
3 |
<button type="button" class="remove_file button"><?php _e( 'Remove', 'download-monitor' ); ?></button>
|
4 |
<div class="handlediv" title="<?php _e( 'Click to toggle', 'download-monitor' ); ?>"></div>
|
5 |
+
<strong>#<?php echo $file_id; ?> — <?php echo sprintf( __( 'Version <span class="version">%s</span> (%s)', 'download-monitor' ), ( $file_version ) ? $file_version : __( 'n/a', 'download-monitor' ), date_i18n( get_option( 'date_format' ), strtotime( $file_post_date ) ) ); ?> — <?php echo sprintf( _n( 'Downloaded %s time', 'Downloaded %s times', $file_download_count, 'download-monitor' ), $file_download_count ); ?></strong>
|
6 |
+
<input type="hidden" name="downloadable_file_id[<?php echo $i; ?>]" value="<?php echo $file_id; ?>"/>
|
7 |
+
<input type="hidden" class="file_menu_order" name="downloadable_file_menu_order[<?php echo $i; ?>]"
|
8 |
+
value="<?php echo $i; ?>"/>
|
9 |
</h3>
|
10 |
<table cellpadding="0" cellspacing="0" class="dlm-metabox-content">
|
11 |
<tbody>
|
13 |
<?php do_action( 'dlm_downloadable_file_version_table_start' ); ?>
|
14 |
|
15 |
<tr>
|
16 |
+
<td width="1%">
|
17 |
+
<label><?php _e( 'Version', 'download-monitor' ); ?>:</label>
|
18 |
+
<input type="text" class="short" name="downloadable_file_version[<?php echo $i; ?>]"
|
19 |
+
placeholder="<?php _e( 'n/a', 'download-monitor' ); ?>" value="<?php echo $file_version; ?>"/>
|
20 |
+
</td>
|
21 |
+
<td rowspan="3">
|
22 |
|
23 |
+
<label><?php _e( 'File URL(s)', 'download-monitor' ); ?>:</label>
|
24 |
+
<textarea name="downloadable_file_urls[<?php echo $i; ?>]" wrap="off" class="downloadable_file_urls"
|
25 |
+
cols="5" rows="5"
|
26 |
+
placeholder="<?php _e( 'Enter one file path/URL per line - multiple files will be used as mirrors (chosen at random).', 'download-monitor' ); ?>"><?php echo esc_textarea( implode( "\n", $file_urls ) ); ?></textarea>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
+
<p>
|
29 |
+
<?php
|
30 |
+
$buttons = apply_filters( 'dlm_downloadable_file_version_buttons', array(
|
31 |
+
'upload_file' => array(
|
32 |
+
'text' => __( 'Upload file', 'download-monitor' ),
|
33 |
+
'data' => array(
|
34 |
+
'choose' => __( 'Choose a file', 'download-monitor' ),
|
35 |
+
'update' => __( 'Insert file URL', 'download-monitor' ),
|
36 |
+
)
|
37 |
+
),
|
38 |
+
'browse_for_file' => array(
|
39 |
+
'text' => __( 'Browse for file', 'download-monitor' )
|
40 |
+
)
|
41 |
+
) );
|
42 |
+
|
43 |
+
foreach ( $buttons as $key => $button ) {
|
44 |
+
echo '<a href="#" class="button dlm_' . esc_attr( $key ) . '" ';
|
45 |
+
if ( ! empty( $button['data'] ) ) {
|
46 |
+
foreach ( $button['data'] as $data_key => $data_value ) {
|
47 |
+
echo 'data-' . esc_attr( $data_key ) . '="' . esc_attr( $data_value ) . '" ';
|
48 |
}
|
49 |
+
}
|
50 |
+
echo '>' . esc_html( $button['text'] ) . '</a> ';
|
51 |
+
}
|
52 |
+
?>
|
53 |
+
</p>
|
54 |
|
55 |
+
</td>
|
56 |
+
</tr>
|
57 |
+
<tr>
|
58 |
+
<td>
|
59 |
+
<label><?php _e( 'Download count', 'download-monitor' ); ?>:</label>
|
60 |
+
<input type="text" class="short" name="downloadable_file_download_count[<?php echo $i; ?>]"
|
61 |
+
placeholder="<?php echo $file_download_count; ?>"/>
|
62 |
+
</td>
|
63 |
+
</tr>
|
64 |
+
<tr>
|
65 |
+
<td>
|
66 |
+
<label><?php _e( 'File Date', 'download-monitor' ); ?>:</label>
|
67 |
+
<input type="text" class="date-picker-field" name="downloadable_file_date[<?php echo $i; ?>]"
|
68 |
+
maxlength="10" value="<?php echo date( 'Y-m-d', strtotime( $file_post_date ) ); ?>"/> @ <input
|
69 |
+
type="text" class="hour" placeholder="<?php _e( 'h', 'download-monitor' ) ?>"
|
70 |
+
name="downloadable_file_date_hour[<?php echo $i; ?>]" maxlength="2" size="2"
|
71 |
+
value="<?php echo date( 'H', strtotime( $file_post_date ) ); ?>"/>:<input type="text" class="minute"
|
72 |
+
placeholder="<?php _e( 'm', 'download-monitor' ) ?>"
|
73 |
+
name="downloadable_file_date_minute[<?php echo $i; ?>]"
|
74 |
+
maxlength="2" size="2"
|
75 |
+
value="<?php echo date( 'i', strtotime( $file_post_date ) ); ?>"/>
|
76 |
+
</td>
|
77 |
+
</tr>
|
78 |
|
79 |
+
<?php do_action( 'dlm_downloadable_file_version_table_end' ); ?>
|
80 |
|
81 |
</tbody>
|
82 |
</table>
|
includes/admin/uaparser/lib/json/jsonwrapper.php
CHANGED
@@ -2,6 +2,7 @@
|
|
2 |
|
3 |
require_once 'JSON.php';
|
4 |
|
|
|
5 |
function json_encode($arg) {
|
6 |
global $services_json;
|
7 |
if (!isset($services_json)) {
|
@@ -9,7 +10,9 @@ function json_encode($arg) {
|
|
9 |
}
|
10 |
return $services_json->encode($arg);
|
11 |
}
|
|
|
12 |
|
|
|
13 |
function json_decode($arg) {
|
14 |
global $services_json;
|
15 |
if (!isset($services_json)) {
|
@@ -17,5 +20,4 @@ function json_decode($arg) {
|
|
17 |
}
|
18 |
return $services_json->decode($arg);
|
19 |
}
|
20 |
-
|
21 |
-
?>
|
2 |
|
3 |
require_once 'JSON.php';
|
4 |
|
5 |
+
if ( ! function_exists('json_encode') ) {
|
6 |
function json_encode($arg) {
|
7 |
global $services_json;
|
8 |
if (!isset($services_json)) {
|
10 |
}
|
11 |
return $services_json->encode($arg);
|
12 |
}
|
13 |
+
}
|
14 |
|
15 |
+
if ( ! function_exists('json_decode') ) {
|
16 |
function json_decode($arg) {
|
17 |
global $services_json;
|
18 |
if (!isset($services_json)) {
|
20 |
}
|
21 |
return $services_json->decode($arg);
|
22 |
}
|
23 |
+
}
|
|
includes/class-dlm-ajax-handler.php
CHANGED
@@ -1,23 +1,25 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
-
*
|
7 |
*/
|
8 |
-
class
|
9 |
|
10 |
/**
|
11 |
* __construct function.
|
12 |
*
|
13 |
* @access public
|
14 |
-
* @return void
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
add_action( 'wp_ajax_download_monitor_remove_file', array( $this, 'remove_file' ) );
|
18 |
add_action( 'wp_ajax_download_monitor_add_file', array( $this, 'add_file' ) );
|
19 |
add_action( 'wp_ajax_download_monitor_list_files', array( $this, 'list_files' ) );
|
20 |
add_action( 'wp_ajax_download_monitor_insert_panel_upload', array( $this, 'insert_panel_upload' ) );
|
|
|
21 |
}
|
22 |
|
23 |
/**
|
@@ -100,34 +102,46 @@ class WP_DLM_Ajax_Handler {
|
|
100 |
* @return void
|
101 |
*/
|
102 |
public function list_files() {
|
103 |
-
global $download_monitor;
|
104 |
|
|
|
105 |
check_ajax_referer( 'list-files', 'security' );
|
106 |
|
107 |
-
|
|
|
|
|
|
|
108 |
|
109 |
$path = esc_attr( stripslashes( $_POST['path'] ) );
|
110 |
|
111 |
if ( $path ) {
|
112 |
-
$files = $download_monitor->list_files( $path );
|
113 |
|
114 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
$file = pathinfo( $found_file['path'] );
|
117 |
|
118 |
if ( $found_file['type'] == 'folder' ) {
|
119 |
|
120 |
-
echo '<li><a href="#" class="folder" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename']
|
121 |
|
122 |
} else {
|
123 |
|
124 |
-
$filename
|
125 |
$extension = ( empty( $file['extension'] ) ) ? '' : $file['extension'];
|
126 |
|
127 |
-
if ( substr( $filename, 0, 1 ) == '.' )
|
128 |
-
|
|
|
|
|
|
|
|
|
129 |
|
130 |
-
echo '<li><a href="#" class="file filetype-' . sanitize_title( $extension ) . '" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename']
|
131 |
|
132 |
}
|
133 |
|
@@ -136,6 +150,50 @@ class WP_DLM_Ajax_Handler {
|
|
136 |
|
137 |
die();
|
138 |
}
|
139 |
-
}
|
140 |
|
141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
+
* DLM_Ajax_Handler class.
|
9 |
*/
|
10 |
+
class DLM_Ajax_Handler {
|
11 |
|
12 |
/**
|
13 |
* __construct function.
|
14 |
*
|
15 |
* @access public
|
|
|
16 |
*/
|
17 |
public function __construct() {
|
18 |
add_action( 'wp_ajax_download_monitor_remove_file', array( $this, 'remove_file' ) );
|
19 |
add_action( 'wp_ajax_download_monitor_add_file', array( $this, 'add_file' ) );
|
20 |
add_action( 'wp_ajax_download_monitor_list_files', array( $this, 'list_files' ) );
|
21 |
add_action( 'wp_ajax_download_monitor_insert_panel_upload', array( $this, 'insert_panel_upload' ) );
|
22 |
+
add_action( 'wp_ajax_dlm_extension', array( $this, 'handle_extensions' ) );
|
23 |
}
|
24 |
|
25 |
/**
|
102 |
* @return void
|
103 |
*/
|
104 |
public function list_files() {
|
|
|
105 |
|
106 |
+
// Check Nonce
|
107 |
check_ajax_referer( 'list-files', 'security' );
|
108 |
|
109 |
+
// Check user rights
|
110 |
+
if ( ! current_user_can( 'manage_downloads' ) ) {
|
111 |
+
return false;
|
112 |
+
}
|
113 |
|
114 |
$path = esc_attr( stripslashes( $_POST['path'] ) );
|
115 |
|
116 |
if ( $path ) {
|
|
|
117 |
|
118 |
+
// The File Manager
|
119 |
+
$file_manager = new DLM_File_Manager();
|
120 |
+
|
121 |
+
// List all files
|
122 |
+
$files = $file_manager->list_files( $path );
|
123 |
+
|
124 |
+
foreach ( $files as $found_file ) {
|
125 |
|
126 |
$file = pathinfo( $found_file['path'] );
|
127 |
|
128 |
if ( $found_file['type'] == 'folder' ) {
|
129 |
|
130 |
+
echo '<li><a href="#" class="folder" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename'] . '">' . $file['basename'] . '</a></li>';
|
131 |
|
132 |
} else {
|
133 |
|
134 |
+
$filename = $file['basename'];
|
135 |
$extension = ( empty( $file['extension'] ) ) ? '' : $file['extension'];
|
136 |
|
137 |
+
if ( substr( $filename, 0, 1 ) == '.' ) {
|
138 |
+
continue;
|
139 |
+
} // Ignore files starting with . like htaccess
|
140 |
+
if ( in_array( $extension, array( '', 'php', 'html', 'htm', 'tmp' ) ) ) {
|
141 |
+
continue;
|
142 |
+
} // Ignored file types
|
143 |
|
144 |
+
echo '<li><a href="#" class="file filetype-' . sanitize_title( $extension ) . '" data-path="' . trailingslashit( $file['dirname'] ) . $file['basename'] . '">' . $file['basename'] . '</a></li>';
|
145 |
|
146 |
}
|
147 |
|
150 |
|
151 |
die();
|
152 |
}
|
|
|
153 |
|
154 |
+
/**
|
155 |
+
* Handle extensions AJAX
|
156 |
+
*/
|
157 |
+
public function handle_extensions() {
|
158 |
+
|
159 |
+
// Check nonce
|
160 |
+
check_ajax_referer( 'dlm-ajax-nonce', 'nonce' );
|
161 |
+
|
162 |
+
// Post vars
|
163 |
+
$product_id = sanitize_text_field( $_POST['product_id'] );
|
164 |
+
$key = sanitize_text_field( $_POST['key'] );
|
165 |
+
$email = sanitize_text_field( $_POST['email'] );
|
166 |
+
$extension_action = $_POST['extension_action'];
|
167 |
+
|
168 |
+
// Get products
|
169 |
+
$products = DLM_Product_Manager::get()->get_products();
|
170 |
+
|
171 |
+
// Check if product exists
|
172 |
+
if ( isset( $products[ $product_id ] ) ) {
|
173 |
+
|
174 |
+
// Get correct product
|
175 |
+
$product = $products[ $product_id ];
|
176 |
+
|
177 |
+
// Set new key in license object
|
178 |
+
$product->get_license()->set_key( $key );
|
179 |
+
|
180 |
+
// Set new email in license object
|
181 |
+
$product->get_license()->set_email( $email );
|
182 |
+
|
183 |
+
|
184 |
+
|
185 |
+
if( 'activate' === $extension_action ) {
|
186 |
+
// Try to activate the license
|
187 |
+
$response = $product->activate();
|
188 |
+
}else {
|
189 |
+
// Try to deactivate the license
|
190 |
+
$response = $product->deactivate();
|
191 |
+
}
|
192 |
+
|
193 |
+
}
|
194 |
+
|
195 |
+
// Send JSON
|
196 |
+
wp_send_json( $response );
|
197 |
+
|
198 |
+
}
|
199 |
+
}
|
includes/class-dlm-autoloader.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_Autoloader {
|
8 |
+
|
9 |
+
private $path;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* The Constructor, sets the path of the class directory.
|
13 |
+
*
|
14 |
+
* @param $path
|
15 |
+
*/
|
16 |
+
public function __construct( $path ) {
|
17 |
+
$this->path = $path;
|
18 |
+
}
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Autoloader load method. Load the class.
|
23 |
+
*
|
24 |
+
* @param $class_name
|
25 |
+
*/
|
26 |
+
public function load( $class_name ) {
|
27 |
+
|
28 |
+
// Only load DLM
|
29 |
+
if ( 0 === strpos( $class_name, 'DLM_' ) ) {
|
30 |
+
|
31 |
+
// String to lower
|
32 |
+
$class_name = strtolower( $class_name );
|
33 |
+
|
34 |
+
// Format file name
|
35 |
+
$file_name = 'class-' . str_ireplace( '_', '-', str_ireplace( 'DLM_', 'dlm-', $class_name ) ) . '.php';
|
36 |
+
|
37 |
+
// Setup the file path
|
38 |
+
$file_path = $this->path;
|
39 |
+
|
40 |
+
// Check if we need to extend the class path
|
41 |
+
if ( strpos( $class_name, 'dlm_admin' ) === 0 ) {
|
42 |
+
$file_path .= 'admin/';
|
43 |
+
} else if ( strpos( $class_name, 'dlm_widget' ) === 0 ) {
|
44 |
+
$file_path .= 'widgets/';
|
45 |
+
} else if ( strpos( $class_name, 'dlm_product' ) === 0 ) {
|
46 |
+
$file_path .= 'product/';
|
47 |
+
}
|
48 |
+
|
49 |
+
// Append file name to clas path
|
50 |
+
$file_path .= $file_name;
|
51 |
+
|
52 |
+
// Check & load file
|
53 |
+
if ( file_exists( $file_path ) ) {
|
54 |
+
require_once( $file_path );
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
}
|
includes/class-dlm-debug-logger.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class DLM_Debug_Logger {
|
4 |
+
|
5 |
+
public static function deprecated( $method ) {
|
6 |
+
|
7 |
+
// Don't log if WP_DEBUG is off
|
8 |
+
if ( ! WP_DEBUG ) {
|
9 |
+
return;
|
10 |
+
}
|
11 |
+
|
12 |
+
// Debug message
|
13 |
+
$message = 'Deprecated method called: ' . $method . PHP_EOL;
|
14 |
+
|
15 |
+
/*
|
16 |
+
// Get stack trace
|
17 |
+
$stack_trace = debug_backtrace();
|
18 |
+
|
19 |
+
// Remove this method
|
20 |
+
array_shift( $stack_trace );
|
21 |
+
|
22 |
+
if ( count( $stack_trace ) > 0 ) {
|
23 |
+
foreach ( $stack_trace as $item ) {
|
24 |
+
|
25 |
+
// Add Class
|
26 |
+
if ( isset( $item['class'] ) ) {
|
27 |
+
$message .= $item['class'] . '::';
|
28 |
+
}
|
29 |
+
|
30 |
+
// Add Method / Functions
|
31 |
+
if ( isset( $item['function'] ) ) {
|
32 |
+
$message .= $item['function'] . ' - ';
|
33 |
+
}
|
34 |
+
|
35 |
+
// Add File
|
36 |
+
if ( isset( $item['file'] ) ) {
|
37 |
+
$message .= $item['file'];
|
38 |
+
}
|
39 |
+
|
40 |
+
// Add Line #
|
41 |
+
if ( isset( $item['line'] ) ) {
|
42 |
+
$message .= '#' . $item['line'];
|
43 |
+
}
|
44 |
+
|
45 |
+
// EOL
|
46 |
+
$message .= PHP_EOL;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
*/
|
50 |
+
|
51 |
+
error_log( $message, 0 );
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
includes/class-dlm-download-handler.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Download_Handler class.
|
@@ -11,33 +13,39 @@ class DLM_Download_Handler {
|
|
11 |
private $ep_value;
|
12 |
|
13 |
/**
|
14 |
-
*
|
15 |
-
*
|
16 |
-
* @access public
|
17 |
-
* @return void
|
18 |
*/
|
19 |
public function __construct() {
|
20 |
$this->endpoint = ( $endpoint = get_option( 'dlm_download_endpoint' ) ) ? $endpoint : 'download';
|
21 |
$this->ep_value = ( $ep_value = get_option( 'dlm_download_endpoint_value' ) ) ? $ep_value : 'ID';
|
|
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
26 |
add_action( 'dlm_can_download', array( $this, 'check_access' ), 10, 2 );
|
27 |
}
|
28 |
|
|
|
29 |
/**
|
30 |
* Check access (hooked into dlm_can_download) checks if the download is members only and enfoces log in.
|
31 |
*
|
32 |
* Other plugins can use the 'dlm_can_download' filter directly to change access rights.
|
33 |
*
|
34 |
* @access public
|
|
|
35 |
* @param mixed $download
|
|
|
36 |
* @return void
|
37 |
*/
|
38 |
public function check_access( $can_download, $download ) {
|
39 |
-
if ( $download->is_members_only() && ! is_user_logged_in() )
|
40 |
$can_download = false;
|
|
|
41 |
|
42 |
return $can_download;
|
43 |
}
|
@@ -50,6 +58,7 @@ class DLM_Download_Handler {
|
|
50 |
*/
|
51 |
public function add_query_vars( $vars ) {
|
52 |
$vars[] = $this->endpoint;
|
|
|
53 |
return $vars;
|
54 |
}
|
55 |
|
@@ -64,7 +73,7 @@ class DLM_Download_Handler {
|
|
64 |
}
|
65 |
|
66 |
/**
|
67 |
-
* Listen for download
|
68 |
*
|
69 |
* @access public
|
70 |
* @return void
|
@@ -76,7 +85,7 @@ class DLM_Download_Handler {
|
|
76 |
$wp->query_vars[ $this->endpoint ] = $_GET[ $this->endpoint ];
|
77 |
}
|
78 |
|
79 |
-
if ( ! empty( $wp->query_vars[ $this->endpoint ] ) && strstr( $wp->request, $this->endpoint . '/' ) ) {
|
80 |
|
81 |
// Prevent caching when endpoint is set
|
82 |
define( 'DONOTCACHEPAGE', true );
|
@@ -107,10 +116,10 @@ class DLM_Download_Handler {
|
|
107 |
switch ( $this->ep_value ) {
|
108 |
case 'slug' :
|
109 |
$download_id = absint( $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_name = '%s' AND post_type = 'dlm_download';", $raw_id ) ) );
|
110 |
-
|
111 |
default :
|
112 |
$download_id = absint( $raw_id );
|
113 |
-
|
114 |
}
|
115 |
|
116 |
if ( $download_id > 0 ) {
|
@@ -140,17 +149,13 @@ class DLM_Download_Handler {
|
|
140 |
wp_die( get_the_password_form( $download_id ), __( 'Password Required', 'download-monitor' ) );
|
141 |
}
|
142 |
$this->trigger( $download, $version_id );
|
143 |
-
}
|
144 |
-
|
145 |
-
elseif ( $redirect = apply_filters( 'dlm_404_redirect', false ) ) {
|
146 |
wp_redirect( $redirect );
|
147 |
-
}
|
148 |
-
|
149 |
-
else {
|
150 |
wp_die( __( 'Download does not exist.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ), array( 'response' => 404 ) );
|
151 |
}
|
152 |
|
153 |
-
die('1');
|
154 |
}
|
155 |
}
|
156 |
|
@@ -158,40 +163,52 @@ class DLM_Download_Handler {
|
|
158 |
* Create a log if logging is enabled
|
159 |
*/
|
160 |
private function log( $type = '', $status = '', $message = '', $download, $version ) {
|
161 |
-
|
162 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
}
|
|
|
164 |
}
|
165 |
|
166 |
/**
|
167 |
* trigger function.
|
168 |
*
|
169 |
* @access private
|
|
|
170 |
* @param mixed $download
|
|
|
171 |
* @return void
|
172 |
*/
|
173 |
private function trigger( $download ) {
|
174 |
-
global $download_monitor;
|
175 |
|
176 |
$version = $download->get_file_version();
|
177 |
$file_paths = $version->mirrors;
|
178 |
|
179 |
-
if ( empty( $file_paths ) )
|
180 |
wp_die( __( 'No file paths defined.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ) );
|
|
|
181 |
|
182 |
-
$file_path
|
183 |
|
184 |
-
if ( ! $file_path )
|
185 |
wp_die( __( 'No file paths defined.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ) );
|
|
|
186 |
|
187 |
// Check Access
|
188 |
if ( ! apply_filters( 'dlm_can_download', true, $download, $version ) ) {
|
189 |
|
190 |
-
if ( $redirect = apply_filters( 'dlm_access_denied_redirect', false ) )
|
191 |
wp_redirect( $redirect );
|
192 |
-
|
193 |
-
else
|
194 |
wp_die( __( 'You do not have permission to access this download.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ), array( 'response' => 200 ) );
|
|
|
195 |
|
196 |
exit;
|
197 |
}
|
@@ -204,7 +221,7 @@ class DLM_Download_Handler {
|
|
204 |
do_action( 'dlm_downloading', $download, $version, $file_path );
|
205 |
|
206 |
// Set cookie to prevent double logging
|
207 |
-
setcookie( 'wp_dlm_downloading', $download->id, time()+60, COOKIEPATH, COOKIE_DOMAIN, false );
|
208 |
}
|
209 |
|
210 |
// Redirect to the file...
|
@@ -218,39 +235,43 @@ class DLM_Download_Handler {
|
|
218 |
exit;
|
219 |
}
|
220 |
|
221 |
-
|
|
|
|
|
|
|
|
|
222 |
|
223 |
$this->download_headers( $file_path, $download, $version );
|
224 |
|
225 |
if ( get_option( 'dlm_xsendfile_enabled' ) ) {
|
226 |
-
|
227 |
|
228 |
-
|
229 |
|
230 |
-
|
231 |
-
|
232 |
|
233 |
-
|
234 |
|
235 |
-
|
236 |
|
237 |
-
|
238 |
-
|
239 |
|
240 |
-
|
241 |
|
242 |
-
|
243 |
|
244 |
-
|
245 |
header( "X-Accel-Redirect: /$file_path" );
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
|
250 |
-
|
251 |
if ( isset( $_SERVER['HTTP_RANGE'] ) && $version->filesize ) {
|
252 |
list( $a, $range ) = explode( "=", $_SERVER['HTTP_RANGE'], 2 );
|
253 |
-
list( $range ) = explode( ","
|
254 |
list( $range, $range_end ) = explode( "-", $range );
|
255 |
$range = intval( $range );
|
256 |
|
@@ -270,25 +291,25 @@ class DLM_Download_Handler {
|
|
270 |
$range = false;
|
271 |
}
|
272 |
|
273 |
-
|
274 |
|
275 |
-
|
276 |
-
|
277 |
|
278 |
-
|
279 |
|
280 |
-
|
281 |
-
|
282 |
|
283 |
-
|
284 |
|
285 |
-
|
286 |
-
|
287 |
|
288 |
-
|
289 |
-
|
290 |
|
291 |
-
|
292 |
}
|
293 |
|
294 |
/**
|
@@ -311,22 +332,26 @@ class DLM_Download_Handler {
|
|
311 |
// Get file name
|
312 |
$file_name = urldecode( basename( $file_path ) );
|
313 |
|
314 |
-
if ( strstr( $file_name, '?' ) )
|
315 |
$file_name = current( explode( '?', $file_name ) );
|
|
|
316 |
|
317 |
// Environment + headers
|
318 |
-
if ( ! ini_get('safe_mode') )
|
319 |
-
@set_time_limit(0);
|
|
|
320 |
|
321 |
-
if ( function_exists( 'get_magic_quotes_runtime' ) && get_magic_quotes_runtime() )
|
322 |
-
@set_magic_quotes_runtime(0);
|
|
|
323 |
|
324 |
-
if( function_exists( 'apache_setenv' ) )
|
325 |
@apache_setenv( 'no-gzip', 1 );
|
|
|
326 |
|
327 |
@session_write_close();
|
328 |
@ini_set( 'zlib.output_compression', 'Off' );
|
329 |
-
@error_reporting(0);
|
330 |
|
331 |
/**
|
332 |
* Prevents errors, for example: transfer closed with 3 bytes remaining to read
|
@@ -337,24 +362,32 @@ class DLM_Download_Handler {
|
|
337 |
@ob_end_clean(); // Zip corruption fix
|
338 |
}
|
339 |
|
|
|
|
|
340 |
if ( $is_IE && is_ssl() ) {
|
341 |
// IE bug prevents download via SSL when Cache Control and Pragma no-cache headers set.
|
342 |
-
|
343 |
-
|
344 |
} else {
|
345 |
nocache_headers();
|
346 |
}
|
347 |
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
|
|
|
|
|
|
|
|
|
|
353 |
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
|
|
358 |
}
|
359 |
|
360 |
/**
|
@@ -363,9 +396,11 @@ class DLM_Download_Handler {
|
|
363 |
* Reads file in chunks so big downloads are possible without changing PHP.INI - http://codeigniter.com/wiki/Download_helper_for_large_files/
|
364 |
*
|
365 |
* @access public
|
|
|
366 |
* @param string file
|
367 |
* @param boolean return bytes of file
|
368 |
* @param range if HTTP RANGE to seek
|
|
|
369 |
* @return void
|
370 |
*/
|
371 |
public function readfile_chunked( $file, $retbytes = true, $range = false ) {
|
@@ -374,27 +409,29 @@ class DLM_Download_Handler {
|
|
374 |
$cnt = 0;
|
375 |
$handle = fopen( $file, 'r' );
|
376 |
|
377 |
-
if ( $handle === false )
|
378 |
return false;
|
|
|
379 |
|
380 |
-
if ( $range )
|
381 |
fseek( $handle, $range );
|
|
|
382 |
|
383 |
while ( ! feof( $handle ) ) {
|
384 |
$buffer = fread( $handle, $chunksize );
|
385 |
echo $buffer;
|
386 |
|
387 |
-
if ( $retbytes )
|
388 |
$cnt += strlen( $buffer );
|
|
|
389 |
}
|
390 |
|
391 |
$status = fclose( $handle );
|
392 |
|
393 |
-
if ( $retbytes && $status )
|
394 |
return $cnt;
|
|
|
395 |
|
396 |
return $status;
|
397 |
}
|
398 |
}
|
399 |
-
|
400 |
-
$GLOBALS['DLM_Download_Handler'] = new DLM_Download_Handler();
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Download_Handler class.
|
13 |
private $ep_value;
|
14 |
|
15 |
/**
|
16 |
+
* Constructor
|
|
|
|
|
|
|
17 |
*/
|
18 |
public function __construct() {
|
19 |
$this->endpoint = ( $endpoint = get_option( 'dlm_download_endpoint' ) ) ? $endpoint : 'download';
|
20 |
$this->ep_value = ( $ep_value = get_option( 'dlm_download_endpoint_value' ) ) ? $ep_value : 'ID';
|
21 |
+
}
|
22 |
|
23 |
+
/**
|
24 |
+
* Setup Download Handler class
|
25 |
+
*/
|
26 |
+
public function setup() {
|
27 |
+
add_filter( 'query_vars', array( $this, 'add_query_vars' ), 0 );
|
28 |
+
add_action( 'init', array( $this, 'add_endpoint' ), 0 );
|
29 |
+
add_action( 'parse_request', array( $this, 'handler' ), 0 );
|
30 |
add_action( 'dlm_can_download', array( $this, 'check_access' ), 10, 2 );
|
31 |
}
|
32 |
|
33 |
+
|
34 |
/**
|
35 |
* Check access (hooked into dlm_can_download) checks if the download is members only and enfoces log in.
|
36 |
*
|
37 |
* Other plugins can use the 'dlm_can_download' filter directly to change access rights.
|
38 |
*
|
39 |
* @access public
|
40 |
+
*
|
41 |
* @param mixed $download
|
42 |
+
*
|
43 |
* @return void
|
44 |
*/
|
45 |
public function check_access( $can_download, $download ) {
|
46 |
+
if ( $download->is_members_only() && ! is_user_logged_in() ) {
|
47 |
$can_download = false;
|
48 |
+
}
|
49 |
|
50 |
return $can_download;
|
51 |
}
|
58 |
*/
|
59 |
public function add_query_vars( $vars ) {
|
60 |
$vars[] = $this->endpoint;
|
61 |
+
|
62 |
return $vars;
|
63 |
}
|
64 |
|
73 |
}
|
74 |
|
75 |
/**
|
76 |
+
* Listen for download requests and trigger downloading.
|
77 |
*
|
78 |
* @access public
|
79 |
* @return void
|
85 |
$wp->query_vars[ $this->endpoint ] = $_GET[ $this->endpoint ];
|
86 |
}
|
87 |
|
88 |
+
if ( ! empty( $wp->query_vars[ $this->endpoint ] ) && ( ( null === $wp->request ) || ( null !== $wp->request && strstr( $wp->request, $this->endpoint . '/' ) ) ) ) {
|
89 |
|
90 |
// Prevent caching when endpoint is set
|
91 |
define( 'DONOTCACHEPAGE', true );
|
116 |
switch ( $this->ep_value ) {
|
117 |
case 'slug' :
|
118 |
$download_id = absint( $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_name = '%s' AND post_type = 'dlm_download';", $raw_id ) ) );
|
119 |
+
break;
|
120 |
default :
|
121 |
$download_id = absint( $raw_id );
|
122 |
+
break;
|
123 |
}
|
124 |
|
125 |
if ( $download_id > 0 ) {
|
149 |
wp_die( get_the_password_form( $download_id ), __( 'Password Required', 'download-monitor' ) );
|
150 |
}
|
151 |
$this->trigger( $download, $version_id );
|
152 |
+
} elseif ( $redirect = apply_filters( 'dlm_404_redirect', false ) ) {
|
|
|
|
|
153 |
wp_redirect( $redirect );
|
154 |
+
} else {
|
|
|
|
|
155 |
wp_die( __( 'Download does not exist.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ), array( 'response' => 404 ) );
|
156 |
}
|
157 |
|
158 |
+
die( '1' );
|
159 |
}
|
160 |
}
|
161 |
|
163 |
* Create a log if logging is enabled
|
164 |
*/
|
165 |
private function log( $type = '', $status = '', $message = '', $download, $version ) {
|
166 |
+
|
167 |
+
// Logging object
|
168 |
+
$logging = new DLM_Logging();
|
169 |
+
|
170 |
+
// Check if logging is enabled
|
171 |
+
if( $logging->is_logging_enabled() ) {
|
172 |
+
|
173 |
+
// Create log
|
174 |
+
$logging->create_log( $type, $status, $message, $download, $version );
|
175 |
+
|
176 |
}
|
177 |
+
|
178 |
}
|
179 |
|
180 |
/**
|
181 |
* trigger function.
|
182 |
*
|
183 |
* @access private
|
184 |
+
*
|
185 |
* @param mixed $download
|
186 |
+
*
|
187 |
* @return void
|
188 |
*/
|
189 |
private function trigger( $download ) {
|
|
|
190 |
|
191 |
$version = $download->get_file_version();
|
192 |
$file_paths = $version->mirrors;
|
193 |
|
194 |
+
if ( empty( $file_paths ) ) {
|
195 |
wp_die( __( 'No file paths defined.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ) );
|
196 |
+
}
|
197 |
|
198 |
+
$file_path = $file_paths[ array_rand( $file_paths ) ];
|
199 |
|
200 |
+
if ( ! $file_path ) {
|
201 |
wp_die( __( 'No file paths defined.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ) );
|
202 |
+
}
|
203 |
|
204 |
// Check Access
|
205 |
if ( ! apply_filters( 'dlm_can_download', true, $download, $version ) ) {
|
206 |
|
207 |
+
if ( $redirect = apply_filters( 'dlm_access_denied_redirect', false ) ) {
|
208 |
wp_redirect( $redirect );
|
209 |
+
} else {
|
|
|
210 |
wp_die( __( 'You do not have permission to access this download.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ), array( 'response' => 200 ) );
|
211 |
+
}
|
212 |
|
213 |
exit;
|
214 |
}
|
221 |
do_action( 'dlm_downloading', $download, $version, $file_path );
|
222 |
|
223 |
// Set cookie to prevent double logging
|
224 |
+
setcookie( 'wp_dlm_downloading', $download->id, time() + 60, COOKIEPATH, COOKIE_DOMAIN, false );
|
225 |
}
|
226 |
|
227 |
// Redirect to the file...
|
235 |
exit;
|
236 |
}
|
237 |
|
238 |
+
// File Manager
|
239 |
+
$file_manager = new DLM_File_Manager();
|
240 |
+
|
241 |
+
// Parse file path
|
242 |
+
list( $file_path, $remote_file ) = $file_manager->parse_file_path( $file_path );
|
243 |
|
244 |
$this->download_headers( $file_path, $download, $version );
|
245 |
|
246 |
if ( get_option( 'dlm_xsendfile_enabled' ) ) {
|
247 |
+
if ( function_exists( 'apache_get_modules' ) && in_array( 'mod_xsendfile', apache_get_modules() ) ) {
|
248 |
|
249 |
+
$this->log( 'download', 'redirected', __( 'Redirected to file', 'download-monitor' ), $download, $version );
|
250 |
|
251 |
+
header( "X-Sendfile: $file_path" );
|
252 |
+
exit;
|
253 |
|
254 |
+
} elseif ( stristr( getenv( 'SERVER_SOFTWARE' ), 'lighttpd' ) ) {
|
255 |
|
256 |
+
$this->log( 'download', 'redirected', __( 'Redirected to file', 'download-monitor' ), $download, $version );
|
257 |
|
258 |
+
header( "X-LIGHTTPD-send-file: $file_path" );
|
259 |
+
exit;
|
260 |
|
261 |
+
} elseif ( stristr( getenv( 'SERVER_SOFTWARE' ), 'nginx' ) || stristr( getenv( 'SERVER_SOFTWARE' ), 'cherokee' ) ) {
|
262 |
|
263 |
+
$this->log( 'download', 'redirected', __( 'Redirected to file', 'download-monitor' ), $download, $version );
|
264 |
|
265 |
+
$file_path = str_ireplace( $_SERVER['DOCUMENT_ROOT'], '', $file_path );
|
266 |
header( "X-Accel-Redirect: /$file_path" );
|
267 |
+
exit;
|
268 |
+
}
|
269 |
+
}
|
270 |
|
271 |
+
// multipart-download and download resuming support - http://www.phpgang.com/force-to-download-a-file-in-php_112.html
|
272 |
if ( isset( $_SERVER['HTTP_RANGE'] ) && $version->filesize ) {
|
273 |
list( $a, $range ) = explode( "=", $_SERVER['HTTP_RANGE'], 2 );
|
274 |
+
list( $range ) = explode( ",", $range, 2 );
|
275 |
list( $range, $range_end ) = explode( "-", $range );
|
276 |
$range = intval( $range );
|
277 |
|
291 |
$range = false;
|
292 |
}
|
293 |
|
294 |
+
if ( $this->readfile_chunked( $file_path, $range ) ) {
|
295 |
|
296 |
+
// Complete!
|
297 |
+
$this->log( 'download', 'completed', '', $download, $version );
|
298 |
|
299 |
+
} elseif ( $remote_file ) {
|
300 |
|
301 |
+
// Redirect - we can't track if this completes or not
|
302 |
+
$this->log( 'download', 'redirected', __( 'Redirected to remote file.', 'download-monitor' ), $download, $version );
|
303 |
|
304 |
+
header( 'Location: ' . $file_path );
|
305 |
|
306 |
+
} else {
|
307 |
+
$this->log( 'download', 'failed', __( 'File not found', 'download-monitor' ), $download, $version );
|
308 |
|
309 |
+
wp_die( __( 'File not found.', 'download-monitor' ) . ' <a href="' . home_url() . '">' . __( 'Go to homepage →', 'download-monitor' ) . '</a>', __( 'Download Error', 'download-monitor' ), array( 'response' => 404 ) );
|
310 |
+
}
|
311 |
|
312 |
+
exit;
|
313 |
}
|
314 |
|
315 |
/**
|
332 |
// Get file name
|
333 |
$file_name = urldecode( basename( $file_path ) );
|
334 |
|
335 |
+
if ( strstr( $file_name, '?' ) ) {
|
336 |
$file_name = current( explode( '?', $file_name ) );
|
337 |
+
}
|
338 |
|
339 |
// Environment + headers
|
340 |
+
if ( ! ini_get( 'safe_mode' ) ) {
|
341 |
+
@set_time_limit( 0 );
|
342 |
+
}
|
343 |
|
344 |
+
if ( function_exists( 'get_magic_quotes_runtime' ) && get_magic_quotes_runtime() ) {
|
345 |
+
@set_magic_quotes_runtime( 0 );
|
346 |
+
}
|
347 |
|
348 |
+
if ( function_exists( 'apache_setenv' ) ) {
|
349 |
@apache_setenv( 'no-gzip', 1 );
|
350 |
+
}
|
351 |
|
352 |
@session_write_close();
|
353 |
@ini_set( 'zlib.output_compression', 'Off' );
|
354 |
+
@error_reporting( 0 );
|
355 |
|
356 |
/**
|
357 |
* Prevents errors, for example: transfer closed with 3 bytes remaining to read
|
362 |
@ob_end_clean(); // Zip corruption fix
|
363 |
}
|
364 |
|
365 |
+
$headers = array();
|
366 |
+
|
367 |
if ( $is_IE && is_ssl() ) {
|
368 |
// IE bug prevents download via SSL when Cache Control and Pragma no-cache headers set.
|
369 |
+
$headers['Expires'] = 'Wed, 11 Jan 1984 05:00:00 GMT';
|
370 |
+
$headers['Cache-Control'] = 'private';
|
371 |
} else {
|
372 |
nocache_headers();
|
373 |
}
|
374 |
|
375 |
+
$headers['X-Robots-Tag'] = 'noindex, nofollow';
|
376 |
+
$headers['Content-Type'] = $mime_type;
|
377 |
+
$headers['Content-Description'] = 'File Transfer';
|
378 |
+
$headers['Content-Disposition'] = "attachment; filename=\"{$file_name}\";";
|
379 |
+
$headers['Content-Transfer-Encoding'] = 'binary';
|
380 |
+
|
381 |
+
if ( $version->filesize ) {
|
382 |
+
$headers['Content-Length'] = $version->filesize;
|
383 |
+
$headers['Accept-Ranges'] = 'bytes';
|
384 |
+
}
|
385 |
|
386 |
+
$headers = apply_filters( 'dlm_download_headers', $headers, $file_path, $download, $version );
|
387 |
+
|
388 |
+
foreach ( $headers as $key => $value ) {
|
389 |
+
header( $key . ': ' . $value );
|
390 |
+
}
|
391 |
}
|
392 |
|
393 |
/**
|
396 |
* Reads file in chunks so big downloads are possible without changing PHP.INI - http://codeigniter.com/wiki/Download_helper_for_large_files/
|
397 |
*
|
398 |
* @access public
|
399 |
+
*
|
400 |
* @param string file
|
401 |
* @param boolean return bytes of file
|
402 |
* @param range if HTTP RANGE to seek
|
403 |
+
*
|
404 |
* @return void
|
405 |
*/
|
406 |
public function readfile_chunked( $file, $retbytes = true, $range = false ) {
|
409 |
$cnt = 0;
|
410 |
$handle = fopen( $file, 'r' );
|
411 |
|
412 |
+
if ( $handle === false ) {
|
413 |
return false;
|
414 |
+
}
|
415 |
|
416 |
+
if ( $range ) {
|
417 |
fseek( $handle, $range );
|
418 |
+
}
|
419 |
|
420 |
while ( ! feof( $handle ) ) {
|
421 |
$buffer = fread( $handle, $chunksize );
|
422 |
echo $buffer;
|
423 |
|
424 |
+
if ( $retbytes ) {
|
425 |
$cnt += strlen( $buffer );
|
426 |
+
}
|
427 |
}
|
428 |
|
429 |
$status = fclose( $handle );
|
430 |
|
431 |
+
if ( $retbytes && $status ) {
|
432 |
return $cnt;
|
433 |
+
}
|
434 |
|
435 |
return $status;
|
436 |
}
|
437 |
}
|
|
|
|
includes/class-dlm-download-version.php
CHANGED
@@ -1,5 +1,9 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
3 |
/**
|
4 |
* DLM_Download_Version class.
|
5 |
*/
|
@@ -9,12 +13,11 @@ class DLM_Download_Version {
|
|
9 |
* __construct function.
|
10 |
*
|
11 |
* @access public
|
12 |
-
* @return void
|
13 |
*/
|
14 |
public function __construct( $version_id, $download_id ) {
|
15 |
-
$this->id
|
16 |
-
$this->download_id
|
17 |
-
|
18 |
// Get Version Data
|
19 |
$this->version = strtolower( get_post_meta( $this->id, '_version', true ) );
|
20 |
$this->download_count = get_post_meta( $this->id, '_download_count', true );
|
@@ -33,9 +36,9 @@ class DLM_Download_Version {
|
|
33 |
$this->mirrors = array();
|
34 |
}
|
35 |
|
36 |
-
$this->url
|
37 |
-
$this->filename
|
38 |
-
$this->filetype
|
39 |
|
40 |
// If we don't have a filesize, lets get it now
|
41 |
if ( $this->filesize === "" ) {
|
@@ -63,13 +66,17 @@ class DLM_Download_Version {
|
|
63 |
* get_filesize function.
|
64 |
*
|
65 |
* @access public
|
66 |
-
*
|
|
|
|
|
67 |
* @return string
|
68 |
*/
|
69 |
public function get_filesize( $file_path ) {
|
70 |
-
|
|
|
71 |
|
72 |
-
|
|
|
73 |
|
74 |
update_post_meta( $this->id, '_filesize', $filesize );
|
75 |
|
@@ -80,13 +87,18 @@ class DLM_Download_Version {
|
|
80 |
* get_file_hashes function.
|
81 |
*
|
82 |
* @access public
|
83 |
-
*
|
|
|
|
|
84 |
* @return array
|
85 |
*/
|
86 |
public function get_file_hashes( $file_path ) {
|
87 |
-
global $download_monitor;
|
88 |
|
89 |
-
|
|
|
|
|
|
|
|
|
90 |
|
91 |
update_post_meta( $this->id, '_md5', $hashes['md5'] );
|
92 |
update_post_meta( $this->id, '_sha1', $hashes['sha1'] );
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
/**
|
8 |
* DLM_Download_Version class.
|
9 |
*/
|
13 |
* __construct function.
|
14 |
*
|
15 |
* @access public
|
|
|
16 |
*/
|
17 |
public function __construct( $version_id, $download_id ) {
|
18 |
+
$this->id = absint( $version_id );
|
19 |
+
$this->download_id = absint( $download_id );
|
20 |
+
|
21 |
// Get Version Data
|
22 |
$this->version = strtolower( get_post_meta( $this->id, '_version', true ) );
|
23 |
$this->download_count = get_post_meta( $this->id, '_download_count', true );
|
36 |
$this->mirrors = array();
|
37 |
}
|
38 |
|
39 |
+
$this->url = current( $this->mirrors );
|
40 |
+
$this->filename = current( explode( '?', basename( $this->url ) ) );
|
41 |
+
$this->filetype = strtolower( substr( strrchr( $this->filename, "." ), 1 ) );
|
42 |
|
43 |
// If we don't have a filesize, lets get it now
|
44 |
if ( $this->filesize === "" ) {
|
66 |
* get_filesize function.
|
67 |
*
|
68 |
* @access public
|
69 |
+
*
|
70 |
+
* @param string $file_path
|
71 |
+
*
|
72 |
* @return string
|
73 |
*/
|
74 |
public function get_filesize( $file_path ) {
|
75 |
+
// File Manager
|
76 |
+
$file_manager = new DLM_File_Manager();
|
77 |
|
78 |
+
// Get the file size
|
79 |
+
$filesize = $file_manager->get_filesize( $file_path );
|
80 |
|
81 |
update_post_meta( $this->id, '_filesize', $filesize );
|
82 |
|
87 |
* get_file_hashes function.
|
88 |
*
|
89 |
* @access public
|
90 |
+
*
|
91 |
+
* @param string $file_path
|
92 |
+
*
|
93 |
* @return array
|
94 |
*/
|
95 |
public function get_file_hashes( $file_path ) {
|
|
|
96 |
|
97 |
+
// File Manager
|
98 |
+
$file_manager = new DLM_File_Manager();
|
99 |
+
|
100 |
+
// Get the hashes
|
101 |
+
$hashes = $file_manager->get_file_hashes( $file_path );
|
102 |
|
103 |
update_post_meta( $this->id, '_md5', $hashes['md5'] );
|
104 |
update_post_meta( $this->id, '_sha1', $hashes['sha1'] );
|
includes/class-dlm-download.php
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
* DLM_Download class.
|
4 |
*/
|
@@ -11,20 +16,23 @@ class DLM_Download {
|
|
11 |
* __construct function.
|
12 |
*
|
13 |
* @access public
|
14 |
-
*
|
15 |
-
* @
|
|
|
16 |
*/
|
17 |
public function __construct( $id ) {
|
18 |
-
$this->id
|
19 |
-
$this->post
|
20 |
-
$this->version_id
|
21 |
}
|
22 |
|
23 |
/**
|
24 |
* __isset function.
|
25 |
*
|
26 |
* @access public
|
|
|
27 |
* @param mixed $key
|
|
|
28 |
* @return bool
|
29 |
*/
|
30 |
public function __isset( $key ) {
|
@@ -35,23 +43,23 @@ class DLM_Download {
|
|
35 |
* __get function.
|
36 |
*
|
37 |
* @access public
|
|
|
38 |
* @param mixed $key
|
|
|
39 |
* @return mixed
|
40 |
*/
|
41 |
public function __get( $key ) {
|
42 |
|
43 |
// Get values or default if not set
|
44 |
-
if ( 'members_only' == $key )
|
45 |
$value = ( $value = get_post_meta( $this->id, '_members_only', true ) ) ? $value : 'no';
|
46 |
-
|
47 |
-
elseif ( 'featured' == $key )
|
48 |
$value = ( $value = get_post_meta( $this->id, '_featured', true ) ) ? $value : 'no';
|
49 |
-
|
50 |
-
elseif ( 'redirect_only' == $key )
|
51 |
$value = ( $value = get_post_meta( $this->id, '_redirect_only', true ) ) ? $value : 'no';
|
52 |
-
|
53 |
-
else
|
54 |
$value = get_post_meta( $this->id, '_' . $key, true );
|
|
|
55 |
|
56 |
return $value;
|
57 |
}
|
@@ -70,7 +78,9 @@ class DLM_Download {
|
|
70 |
* version_exists function.
|
71 |
*
|
72 |
* @access public
|
|
|
73 |
* @param mixed $version_id
|
|
|
74 |
* @return void
|
75 |
*/
|
76 |
public function version_exists( $version_id ) {
|
@@ -81,14 +91,17 @@ class DLM_Download {
|
|
81 |
* Set the download to a version other than the current / latest version it defaults to.
|
82 |
*
|
83 |
* @access public
|
|
|
84 |
* @param mixed $version_id
|
|
|
85 |
* @return void
|
86 |
*/
|
87 |
public function set_version( $version_id = '' ) {
|
88 |
-
if ( $this->version_exists( $version_id ) )
|
89 |
$this->version_id = $version_id;
|
90 |
-
else
|
91 |
$this->version_id = '';
|
|
|
92 |
}
|
93 |
|
94 |
/**
|
@@ -135,23 +148,26 @@ class DLM_Download {
|
|
135 |
* get_the_image function.
|
136 |
*
|
137 |
* @access public
|
|
|
138 |
* @param string $size (default: 'full')
|
|
|
139 |
* @return void
|
140 |
*/
|
141 |
public function get_the_image( $size = 'full' ) {
|
142 |
-
|
143 |
-
|
144 |
-
if ( has_post_thumbnail( $this->id ) )
|
145 |
return get_the_post_thumbnail( $this->id, $size );
|
146 |
-
else
|
147 |
-
return '<img alt="Placeholder" class="wp-post-image" src="' . apply_filters( 'dlm_placeholder_image_src',
|
|
|
148 |
}
|
149 |
|
150 |
/**
|
151 |
* the_image function.
|
152 |
*
|
153 |
* @access public
|
|
|
154 |
* @param string $size (default: 'full')
|
|
|
155 |
* @return void
|
156 |
*/
|
157 |
public function the_image( $size = 'full' ) {
|
@@ -166,9 +182,10 @@ class DLM_Download {
|
|
166 |
*/
|
167 |
public function get_the_author() {
|
168 |
$author_id = $this->post->post_author;
|
169 |
-
$user
|
170 |
-
if ( $user )
|
171 |
return $user->display_name;
|
|
|
172 |
}
|
173 |
|
174 |
/**
|
@@ -205,13 +222,13 @@ class DLM_Download {
|
|
205 |
switch ( $ep_value ) {
|
206 |
case 'slug' :
|
207 |
$value = $this->post->post_name;
|
208 |
-
|
209 |
default :
|
210 |
$value = $this->id;
|
211 |
-
|
212 |
}
|
213 |
|
214 |
-
if ( get_option('permalink_structure') ) {
|
215 |
$link = home_url( '/' . $endpoint . '/' . $value . '/', $scheme );
|
216 |
} else {
|
217 |
$link = add_query_arg( $endpoint, $value, home_url( '', $scheme ) );
|
@@ -219,10 +236,11 @@ class DLM_Download {
|
|
219 |
|
220 |
if ( $this->version_id ) {
|
221 |
|
222 |
-
if ( $this->has_version_number() )
|
223 |
$link = add_query_arg( 'version', $this->get_the_version_number(), $link );
|
224 |
-
else
|
225 |
$link = add_query_arg( 'v', $this->version_id, $link );
|
|
|
226 |
}
|
227 |
|
228 |
return apply_filters( 'dlm_download_get_the_download_link', esc_url_raw( $link ), $this, $this->version_id );
|
@@ -242,14 +260,14 @@ class DLM_Download {
|
|
242 |
* get_the_download_count function.
|
243 |
*
|
244 |
* @access public
|
245 |
-
* @return
|
246 |
*/
|
247 |
public function get_the_download_count() {
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
}
|
254 |
|
255 |
/**
|
@@ -321,10 +339,11 @@ class DLM_Download {
|
|
321 |
* @return string
|
322 |
*/
|
323 |
public function get_the_filesize() {
|
324 |
-
$filesize
|
325 |
|
326 |
-
if ( $filesize > 0 )
|
327 |
return size_format( $filesize );
|
|
|
328 |
}
|
329 |
|
330 |
/**
|
@@ -339,17 +358,22 @@ class DLM_Download {
|
|
339 |
|
340 |
/**
|
341 |
* Get the hash
|
|
|
342 |
* @param string $type md5, sha1 or crc32
|
|
|
343 |
* @return string
|
344 |
*/
|
345 |
public function get_the_hash( $type = 'md5' ) {
|
346 |
-
$hash
|
|
|
347 |
return $hash;
|
348 |
}
|
349 |
|
350 |
/**
|
351 |
* Get the hash
|
|
|
352 |
* @param string $type md5, sha1 or crc32
|
|
|
353 |
* @return string
|
354 |
*/
|
355 |
public function the_hash( $type = 'md5' ) {
|
@@ -376,31 +400,32 @@ class DLM_Download {
|
|
376 |
echo $this->get_the_filetype();
|
377 |
}
|
378 |
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
|
388 |
-
|
389 |
-
|
390 |
|
391 |
-
|
392 |
-
|
|
|
393 |
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
|
398 |
-
|
399 |
|
400 |
-
|
401 |
|
402 |
-
|
403 |
-
|
404 |
$version->mirrors = array();
|
405 |
$version->url = '';
|
406 |
$version->filename = '';
|
@@ -408,26 +433,26 @@ class DLM_Download {
|
|
408 |
$version->version = '';
|
409 |
$version->download_count = '';
|
410 |
$version->filesize = '';
|
411 |
-
|
412 |
|
413 |
-
|
414 |
-
|
415 |
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
|
432 |
/**
|
433 |
* is_featured function.
|
@@ -469,7 +494,7 @@ class DLM_Download {
|
|
469 |
if ( ! is_array( $this->file_version_ids ) ) {
|
470 |
$transient_name = 'dlm_file_version_ids_' . $this->id;
|
471 |
|
472 |
-
|
473 |
$this->file_version_ids = get_posts( 'post_parent=' . $this->id . '&post_type=dlm_download_version&orderby=menu_order&order=ASC&fields=ids&post_status=publish&numberposts=-1' );
|
474 |
|
475 |
set_transient( $transient_name, $this->file_version_ids, YEAR_IN_SECONDS );
|
@@ -479,24 +504,24 @@ class DLM_Download {
|
|
479 |
return $this->file_version_ids;
|
480 |
}
|
481 |
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
|
493 |
-
|
494 |
-
|
495 |
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
|
500 |
-
|
501 |
-
|
502 |
}
|
1 |
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
/**
|
8 |
* DLM_Download class.
|
9 |
*/
|
16 |
* __construct function.
|
17 |
*
|
18 |
* @access public
|
19 |
+
*
|
20 |
+
* @param int $id
|
21 |
+
*
|
22 |
*/
|
23 |
public function __construct( $id ) {
|
24 |
+
$this->id = absint( $id );
|
25 |
+
$this->post = get_post( $this->id );
|
26 |
+
$this->version_id = ''; // Use latest current version
|
27 |
}
|
28 |
|
29 |
/**
|
30 |
* __isset function.
|
31 |
*
|
32 |
* @access public
|
33 |
+
*
|
34 |
* @param mixed $key
|
35 |
+
*
|
36 |
* @return bool
|
37 |
*/
|
38 |
public function __isset( $key ) {
|
43 |
* __get function.
|
44 |
*
|
45 |
* @access public
|
46 |
+
*
|
47 |
* @param mixed $key
|
48 |
+
*
|
49 |
* @return mixed
|
50 |
*/
|
51 |
public function __get( $key ) {
|
52 |
|
53 |
// Get values or default if not set
|
54 |
+
if ( 'members_only' == $key ) {
|
55 |
$value = ( $value = get_post_meta( $this->id, '_members_only', true ) ) ? $value : 'no';
|
56 |
+
} elseif ( 'featured' == $key ) {
|
|
|
57 |
$value = ( $value = get_post_meta( $this->id, '_featured', true ) ) ? $value : 'no';
|
58 |
+
} elseif ( 'redirect_only' == $key ) {
|
|
|
59 |
$value = ( $value = get_post_meta( $this->id, '_redirect_only', true ) ) ? $value : 'no';
|
60 |
+
} else {
|
|
|
61 |
$value = get_post_meta( $this->id, '_' . $key, true );
|
62 |
+
}
|
63 |
|
64 |
return $value;
|
65 |
}
|
78 |
* version_exists function.
|
79 |
*
|
80 |
* @access public
|
81 |
+
*
|
82 |
* @param mixed $version_id
|
83 |
+
*
|
84 |
* @return void
|
85 |
*/
|
86 |
public function version_exists( $version_id ) {
|
91 |
* Set the download to a version other than the current / latest version it defaults to.
|
92 |
*
|
93 |
* @access public
|
94 |
+
*
|
95 |
* @param mixed $version_id
|
96 |
+
*
|
97 |
* @return void
|
98 |
*/
|
99 |
public function set_version( $version_id = '' ) {
|
100 |
+
if ( $this->version_exists( $version_id ) ) {
|
101 |
$this->version_id = $version_id;
|
102 |
+
} else {
|
103 |
$this->version_id = '';
|
104 |
+
}
|
105 |
}
|
106 |
|
107 |
/**
|
148 |
* get_the_image function.
|
149 |
*
|
150 |
* @access public
|
151 |
+
*
|
152 |
* @param string $size (default: 'full')
|
153 |
+
*
|
154 |
* @return void
|
155 |
*/
|
156 |
public function get_the_image( $size = 'full' ) {
|
157 |
+
if ( has_post_thumbnail( $this->id ) ) {
|
|
|
|
|
158 |
return get_the_post_thumbnail( $this->id, $size );
|
159 |
+
} else {
|
160 |
+
return '<img alt="Placeholder" class="wp-post-image" src="' . apply_filters( 'dlm_placeholder_image_src', WP_DLM::get_plugin_url() . '/assets/images/placeholder.png' ) . '" />';
|
161 |
+
}
|
162 |
}
|
163 |
|
164 |
/**
|
165 |
* the_image function.
|
166 |
*
|
167 |
* @access public
|
168 |
+
*
|
169 |
* @param string $size (default: 'full')
|
170 |
+
*
|
171 |
* @return void
|
172 |
*/
|
173 |
public function the_image( $size = 'full' ) {
|
182 |
*/
|
183 |
public function get_the_author() {
|
184 |
$author_id = $this->post->post_author;
|
185 |
+
$user = get_user_by( 'ID', $author_id );
|
186 |
+
if ( $user ) {
|
187 |
return $user->display_name;
|
188 |
+
}
|
189 |
}
|
190 |
|
191 |
/**
|
222 |
switch ( $ep_value ) {
|
223 |
case 'slug' :
|
224 |
$value = $this->post->post_name;
|
225 |
+
break;
|
226 |
default :
|
227 |
$value = $this->id;
|
228 |
+
break;
|
229 |
}
|
230 |
|
231 |
+
if ( get_option( 'permalink_structure' ) ) {
|
232 |
$link = home_url( '/' . $endpoint . '/' . $value . '/', $scheme );
|
233 |
} else {
|
234 |
$link = add_query_arg( $endpoint, $value, home_url( '', $scheme ) );
|
236 |
|
237 |
if ( $this->version_id ) {
|
238 |
|
239 |
+
if ( $this->has_version_number() ) {
|
240 |
$link = add_query_arg( 'version', $this->get_the_version_number(), $link );
|
241 |
+
} else {
|
242 |
$link = add_query_arg( 'v', $this->version_id, $link );
|
243 |
+
}
|
244 |
}
|
245 |
|
246 |
return apply_filters( 'dlm_download_get_the_download_link', esc_url_raw( $link ), $this, $this->version_id );
|
260 |
* get_the_download_count function.
|
261 |
*
|
262 |
* @access public
|
263 |
+
* @return int
|
264 |
*/
|
265 |
public function get_the_download_count() {
|
266 |
+
if ( $this->version_id ) {
|
267 |
+
return absint( $this->get_file_version()->download_count );
|
268 |
+
} else {
|
269 |
+
return absint( $this->download_count );
|
270 |
+
}
|
271 |
}
|
272 |
|
273 |
/**
|
339 |
* @return string
|
340 |
*/
|
341 |
public function get_the_filesize() {
|
342 |
+
$filesize = $this->get_file_version()->filesize;
|
343 |
|
344 |
+
if ( $filesize > 0 ) {
|
345 |
return size_format( $filesize );
|
346 |
+
}
|
347 |
}
|
348 |
|
349 |
/**
|
358 |
|
359 |
/**
|
360 |
* Get the hash
|
361 |
+
*
|
362 |
* @param string $type md5, sha1 or crc32
|
363 |
+
*
|
364 |
* @return string
|
365 |
*/
|
366 |
public function get_the_hash( $type = 'md5' ) {
|
367 |
+
$hash = $this->get_file_version()->$type;
|
368 |
+
|
369 |
return $hash;
|
370 |
}
|
371 |
|
372 |
/**
|
373 |
* Get the hash
|
374 |
+
*
|
375 |
* @param string $type md5, sha1 or crc32
|
376 |
+
*
|
377 |
* @return string
|
378 |
*/
|
379 |
public function the_hash( $type = 'md5' ) {
|
400 |
echo $this->get_the_filetype();
|
401 |
}
|
402 |
|
403 |
+
/**
|
404 |
+
* Get a version by ID, or default to current version.
|
405 |
+
*
|
406 |
+
* @access public
|
407 |
+
* @return void
|
408 |
+
*/
|
409 |
+
public function get_file_version() {
|
410 |
+
$version = false;
|
411 |
|
412 |
+
if ( $this->version_id ) {
|
413 |
+
$versions = $this->get_file_versions();
|
414 |
|
415 |
+
if ( ! empty( $versions[ $this->version_id ] ) ) {
|
416 |
+
$version = $versions[ $this->version_id ];
|
417 |
+
}
|
418 |
|
419 |
+
} elseif ( $versions = $this->get_file_versions() ) {
|
420 |
+
$version = array_shift( $versions );
|
421 |
+
}
|
422 |
|
423 |
+
if ( ! $version ) {
|
424 |
|
425 |
+
$version = new stdClass();
|
426 |
|
427 |
+
$version->id = 0;
|
428 |
+
$version->download_id = $this->id;
|
429 |
$version->mirrors = array();
|
430 |
$version->url = '';
|
431 |
$version->filename = '';
|
433 |
$version->version = '';
|
434 |
$version->download_count = '';
|
435 |
$version->filesize = '';
|
436 |
+
}
|
437 |
|
438 |
+
return $version;
|
439 |
+
}
|
440 |
|
441 |
+
/**
|
442 |
+
* Get a version ID from a version string.
|
443 |
+
*
|
444 |
+
* @access public
|
445 |
+
* @return void
|
446 |
+
*/
|
447 |
+
public function get_version_id( $version_string = '' ) {
|
448 |
+
$versions = $this->get_file_versions();
|
449 |
|
450 |
+
foreach ( $versions as $version_id => $version ) {
|
451 |
+
if ( ( is_numeric( $version->version ) && version_compare( $version->version, strtolower( $version_string ), '=' ) ) || strtolower( $version->version ) === strtolower( $version_string ) ) {
|
452 |
+
return $version_id;
|
453 |
+
}
|
454 |
+
}
|
455 |
+
}
|
456 |
|
457 |
/**
|
458 |
* is_featured function.
|
494 |
if ( ! is_array( $this->file_version_ids ) ) {
|
495 |
$transient_name = 'dlm_file_version_ids_' . $this->id;
|
496 |
|
497 |
+
if ( false === ( $this->file_version_ids = get_transient( $transient_name ) ) ) {
|
498 |
$this->file_version_ids = get_posts( 'post_parent=' . $this->id . '&post_type=dlm_download_version&orderby=menu_order&order=ASC&fields=ids&post_status=publish&numberposts=-1' );
|
499 |
|
500 |
set_transient( $transient_name, $this->file_version_ids, YEAR_IN_SECONDS );
|
504 |
return $this->file_version_ids;
|
505 |
}
|
506 |
|
507 |
+
/**
|
508 |
+
* get_file_versions function.
|
509 |
+
*
|
510 |
+
* @access public
|
511 |
+
* @return void
|
512 |
+
*/
|
513 |
+
public function get_file_versions() {
|
514 |
+
if ( $this->files ) {
|
515 |
+
return $this->files;
|
516 |
+
}
|
517 |
|
518 |
+
$version_ids = $this->get_file_version_ids();
|
519 |
+
$this->files = array();
|
520 |
|
521 |
+
foreach ( $version_ids as $version_id ) {
|
522 |
+
$this->files[ $version_id ] = new DLM_Download_Version( $version_id, $this->id );
|
523 |
+
}
|
524 |
|
525 |
+
return $this->files;
|
526 |
+
}
|
527 |
}
|
includes/class-dlm-file-manager.php
ADDED
@@ -0,0 +1,221 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_File_Manager {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Returns a listing of all files in the specified folder and all subdirectories up to 100 levels deep.
|
11 |
+
* The depth of the recursiveness can be controlled by the $levels param.
|
12 |
+
*
|
13 |
+
* @access public
|
14 |
+
*
|
15 |
+
* @param string $folder (default: '')
|
16 |
+
*
|
17 |
+
* @return void
|
18 |
+
*/
|
19 |
+
public function list_files( $folder = '' ) {
|
20 |
+
if ( empty( $folder ) ) {
|
21 |
+
return false;
|
22 |
+
}
|
23 |
+
|
24 |
+
$files = array();
|
25 |
+
if ( $dir = @opendir( $folder ) ) {
|
26 |
+
while ( ( $file = readdir( $dir ) ) !== false ) {
|
27 |
+
if ( in_array( $file, array( '.', '..' ) ) ) {
|
28 |
+
continue;
|
29 |
+
}
|
30 |
+
|
31 |
+
if ( is_dir( $folder . '/' . $file ) ) {
|
32 |
+
|
33 |
+
$files[] = array(
|
34 |
+
'type' => 'folder',
|
35 |
+
'path' => $folder . '/' . $file
|
36 |
+
);
|
37 |
+
|
38 |
+
} else {
|
39 |
+
|
40 |
+
$files[] = array(
|
41 |
+
'type' => 'file',
|
42 |
+
'path' => $folder . '/' . $file
|
43 |
+
);
|
44 |
+
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
@closedir( $dir );
|
49 |
+
|
50 |
+
return $files;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Parse a file path and return the new path and whether or not it's remote
|
55 |
+
*
|
56 |
+
* @param string $file_path
|
57 |
+
*
|
58 |
+
* @return array
|
59 |
+
*/
|
60 |
+
public function parse_file_path( $file_path ) {
|
61 |
+
$remote_file = true;
|
62 |
+
$parsed_file_path = parse_url( $file_path );
|
63 |
+
|
64 |
+
$wp_uploads = wp_upload_dir();
|
65 |
+
$wp_uploads_dir = $wp_uploads['basedir'];
|
66 |
+
$wp_uploads_url = $wp_uploads['baseurl'];
|
67 |
+
|
68 |
+
if ( ( ! isset( $parsed_file_path['scheme'] ) || ! in_array( $parsed_file_path['scheme'], array(
|
69 |
+
'http',
|
70 |
+
'https',
|
71 |
+
'ftp'
|
72 |
+
) ) ) && isset( $parsed_file_path['path'] ) && file_exists( $parsed_file_path['path'] )
|
73 |
+
) {
|
74 |
+
|
75 |
+
/** This is an absolute path */
|
76 |
+
$remote_file = false;
|
77 |
+
|
78 |
+
} elseif ( strpos( $file_path, $wp_uploads_url ) !== false ) {
|
79 |
+
|
80 |
+
/** This is a local file given by URL so we need to figure out the path */
|
81 |
+
$remote_file = false;
|
82 |
+
$file_path = str_replace( $wp_uploads_url, $wp_uploads_dir, $file_path );
|
83 |
+
$file_path = realpath( $file_path );
|
84 |
+
|
85 |
+
} elseif ( is_multisite() && ( strpos( $file_path, network_site_url( '/', 'http' ) ) !== false || strpos( $file_path, network_site_url( '/', 'https' ) ) !== false ) ) {
|
86 |
+
|
87 |
+
/** This is a local file outside of wp-content so figure out the path */
|
88 |
+
$remote_file = false;
|
89 |
+
// Try to replace network url
|
90 |
+
$file_path = str_replace( network_site_url( '/', 'https' ), ABSPATH, $file_path );
|
91 |
+
$file_path = str_replace( network_site_url( '/', 'http' ), ABSPATH, $file_path );
|
92 |
+
// Try to replace upload URL
|
93 |
+
$file_path = str_replace( $wp_uploads_url, $wp_uploads_dir, $file_path );
|
94 |
+
$file_path = realpath( $file_path );
|
95 |
+
|
96 |
+
} elseif ( strpos( $file_path, site_url( '/', 'http' ) ) !== false || strpos( $file_path, site_url( '/', 'https' ) ) !== false ) {
|
97 |
+
|
98 |
+
/** This is a local file outside of wp-content so figure out the path */
|
99 |
+
$remote_file = false;
|
100 |
+
$file_path = str_replace( site_url( '/', 'https' ), ABSPATH, $file_path );
|
101 |
+
$file_path = str_replace( site_url( '/', 'http' ), ABSPATH, $file_path );
|
102 |
+
$file_path = realpath( $file_path );
|
103 |
+
|
104 |
+
} elseif ( file_exists( ABSPATH . $file_path ) ) {
|
105 |
+
|
106 |
+
/** Path needs an abspath to work */
|
107 |
+
$remote_file = false;
|
108 |
+
$file_path = ABSPATH . $file_path;
|
109 |
+
$file_path = realpath( $file_path );
|
110 |
+
}
|
111 |
+
|
112 |
+
return array( $file_path, $remote_file );
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Gets the filesize of a path or URL.
|
117 |
+
*
|
118 |
+
* @access public
|
119 |
+
*
|
120 |
+
* @param string $file_path
|
121 |
+
*
|
122 |
+
* @return string size on success, -1 on failure
|
123 |
+
*/
|
124 |
+
public function get_file_size( $file_path ) {
|
125 |
+
if ( $file_path ) {
|
126 |
+
list( $file_path, $remote_file ) = $this->parse_file_path( $file_path );
|
127 |
+
|
128 |
+
if ( ! empty( $file_path ) ) {
|
129 |
+
if ( $remote_file ) {
|
130 |
+
$file = wp_remote_head( $file_path );
|
131 |
+
|
132 |
+
if ( ! is_wp_error( $file ) && ! empty( $file['headers']['content-length'] ) ) {
|
133 |
+
return $file['headers']['content-length'];
|
134 |
+
}
|
135 |
+
} else {
|
136 |
+
if ( file_exists( $file_path ) && ( $filesize = filesize( $file_path ) ) ) {
|
137 |
+
return $filesize;
|
138 |
+
}
|
139 |
+
}
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
return -1;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Gets md5, sha1 and crc32 hashes for a file and store it.
|
148 |
+
*
|
149 |
+
* @access public
|
150 |
+
*
|
151 |
+
* @param string $file_path
|
152 |
+
*
|
153 |
+
* @return array of sizes
|
154 |
+
*/
|
155 |
+
public function get_file_hashes( $file_path ) {
|
156 |
+
$md5 = false;
|
157 |
+
$sha1 = false;
|
158 |
+
$crc32 = false;
|
159 |
+
|
160 |
+
if ( $file_path ) {
|
161 |
+
list( $file_path, $remote_file ) = $this->parse_file_path( $file_path );
|
162 |
+
|
163 |
+
if ( ! empty( $file_path ) ) {
|
164 |
+
if ( ! $remote_file || apply_filters( 'dlm_allow_remote_hash_file', false ) ) {
|
165 |
+
if ( get_option( 'dlm_generate_hash_md5' ) ) {
|
166 |
+
$md5 = hash_file( 'md5', $file_path );
|
167 |
+
}
|
168 |
+
if ( get_option( 'dlm_generate_hash_sha1' ) ) {
|
169 |
+
$sha1 = hash_file( 'sha1', $file_path );
|
170 |
+
}
|
171 |
+
if ( get_option( 'dlm_generate_hash_crc32b' ) ) {
|
172 |
+
$crc32 = hash_file( 'crc32b', $file_path );
|
173 |
+
}
|
174 |
+
}
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
return array( 'md5' => $md5, 'sha1' => $sha1, 'crc32' => $crc32 );
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Encode files for storage
|
183 |
+
*
|
184 |
+
* @param array $files
|
185 |
+
*
|
186 |
+
* @return string
|
187 |
+
*/
|
188 |
+
public function json_encode_files( $files ) {
|
189 |
+
if ( version_compare( phpversion(), "5.4.0", ">=" ) ) {
|
190 |
+
$files = json_encode( $files, JSON_UNESCAPED_UNICODE );
|
191 |
+
} else {
|
192 |
+
$files = json_encode( $files );
|
193 |
+
if ( function_exists( 'mb_convert_encoding' ) ) {
|
194 |
+
$files = preg_replace_callback( '/\\\\u([0-9a-f]{4})/i', array(
|
195 |
+
$this,
|
196 |
+
'json_unscaped_unicode_fallback'
|
197 |
+
), $files );
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
return $files;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Fallback for PHP < 5.4 where JSON_UNESCAPED_UNICODE does not exist.
|
206 |
+
*
|
207 |
+
* @param array $matches
|
208 |
+
*
|
209 |
+
* @return string
|
210 |
+
*/
|
211 |
+
public function json_unscaped_unicode_fallback( $matches ) {
|
212 |
+
$sym = mb_convert_encoding(
|
213 |
+
pack( 'H*', $matches[1] ),
|
214 |
+
'UTF-8',
|
215 |
+
'UTF-16'
|
216 |
+
);
|
217 |
+
|
218 |
+
return $sym;
|
219 |
+
}
|
220 |
+
|
221 |
+
}
|
includes/class-dlm-installer.php
ADDED
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_Installer {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Install all requirements for Download Monitor
|
11 |
+
*/
|
12 |
+
public function install() {
|
13 |
+
|
14 |
+
// Init User Roles
|
15 |
+
$this->init_user_roles();
|
16 |
+
|
17 |
+
// Setup Taxonomies
|
18 |
+
require_once( 'class-dlm-taxonomy-manager.php' );
|
19 |
+
$taxonomy_manager = new DLM_Taxonomy_Manager();
|
20 |
+
$taxonomy_manager->setup();
|
21 |
+
|
22 |
+
// Setup Post Types
|
23 |
+
require_once( 'class-dlm-post-type-manager.php' );
|
24 |
+
$post_type_manager = new DLM_Post_Type_Manager();
|
25 |
+
$post_type_manager->setup();
|
26 |
+
|
27 |
+
// Create Database Table
|
28 |
+
$this->install_tables();
|
29 |
+
|
30 |
+
// Directory Protection
|
31 |
+
$this->directory_protection();
|
32 |
+
|
33 |
+
// Add endpoints
|
34 |
+
require_once( 'class-dlm-download-handler.php' );
|
35 |
+
$dlm_download_handler = new DLM_Download_Handler();
|
36 |
+
$dlm_download_handler->add_endpoint();
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Init user roles
|
42 |
+
*
|
43 |
+
* @return void
|
44 |
+
*/
|
45 |
+
private function init_user_roles() {
|
46 |
+
global $wp_roles;
|
47 |
+
|
48 |
+
if ( class_exists( 'WP_Roles' ) && ! isset( $wp_roles ) ) {
|
49 |
+
$wp_roles = new WP_Roles();
|
50 |
+
}
|
51 |
+
|
52 |
+
if ( is_object( $wp_roles ) ) {
|
53 |
+
$wp_roles->add_cap( 'administrator', 'manage_downloads' );
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* install_tables function.
|
59 |
+
*
|
60 |
+
* @return void
|
61 |
+
*/
|
62 |
+
private function install_tables() {
|
63 |
+
global $wpdb;
|
64 |
+
|
65 |
+
$wpdb->hide_errors();
|
66 |
+
|
67 |
+
$collate = '';
|
68 |
+
|
69 |
+
if ( $wpdb->has_cap( 'collation' ) ) {
|
70 |
+
if ( ! empty( $wpdb->charset ) ) {
|
71 |
+
$collate .= "DEFAULT CHARACTER SET $wpdb->charset";
|
72 |
+
}
|
73 |
+
if ( ! empty( $wpdb->collate ) ) {
|
74 |
+
$collate .= " COLLATE $wpdb->collate";
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
79 |
+
|
80 |
+
$dlm_tables = "
|
81 |
+
CREATE TABLE `" . $wpdb->prefix . "download_log` (
|
82 |
+
ID bigint(20) NOT NULL auto_increment,
|
83 |
+
type varchar(200) NOT NULL default 'download',
|
84 |
+
user_id bigint(20) NOT NULL,
|
85 |
+
user_ip varchar(200) NOT NULL,
|
86 |
+
user_agent varchar(200) NOT NULL,
|
87 |
+
download_id bigint(20) NOT NULL,
|
88 |
+
version_id bigint(20) NOT NULL,
|
89 |
+
version varchar(200) NOT NULL,
|
90 |
+
download_date datetime NOT NULL default '0000-00-00 00:00:00',
|
91 |
+
download_status varchar(200) NULL,
|
92 |
+
download_status_message varchar(200) NULL,
|
93 |
+
PRIMARY KEY (ID),
|
94 |
+
KEY attribute_name (download_id)
|
95 |
+
) $collate;
|
96 |
+
";
|
97 |
+
dbDelta( $dlm_tables );
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Protect the upload dir on activation.
|
102 |
+
*
|
103 |
+
* @access public
|
104 |
+
* @return void
|
105 |
+
*/
|
106 |
+
private function directory_protection() {
|
107 |
+
|
108 |
+
// Install files and folders for uploading files and prevent hotlinking
|
109 |
+
$upload_dir = wp_upload_dir();
|
110 |
+
|
111 |
+
$files = array(
|
112 |
+
array(
|
113 |
+
'base' => $upload_dir['basedir'] . '/dlm_uploads',
|
114 |
+
'file' => '.htaccess',
|
115 |
+
'content' => 'deny from all'
|
116 |
+
),
|
117 |
+
array(
|
118 |
+
'base' => $upload_dir['basedir'] . '/dlm_uploads',
|
119 |
+
'file' => 'index.html',
|
120 |
+
'content' => ''
|
121 |
+
)
|
122 |
+
);
|
123 |
+
|
124 |
+
foreach ( $files as $file ) {
|
125 |
+
if ( wp_mkdir_p( $file['base'] ) && ! file_exists( trailingslashit( $file['base'] ) . $file['file'] ) ) {
|
126 |
+
if ( $file_handle = @fopen( trailingslashit( $file['base'] ) . $file['file'], 'w' ) ) {
|
127 |
+
fwrite( $file_handle, $file['content'] );
|
128 |
+
fclose( $file_handle );
|
129 |
+
}
|
130 |
+
}
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
}
|
includes/class-dlm-logging.php
CHANGED
@@ -1,12 +1,23 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Logging class.
|
7 |
*/
|
8 |
class DLM_Logging {
|
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
/**
|
11 |
* create_log function.
|
12 |
*
|
@@ -14,9 +25,9 @@ class DLM_Logging {
|
|
14 |
* @return void
|
15 |
*/
|
16 |
public function create_log( $type, $status, $message, $download, $version ) {
|
17 |
-
|
18 |
|
19 |
-
|
20 |
|
21 |
$wpdb->insert(
|
22 |
$wpdb->download_log,
|
@@ -67,28 +78,11 @@ class DLM_Logging {
|
|
67 |
private function get_user_ua() {
|
68 |
$ua = sanitize_text_field( isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '' );
|
69 |
|
70 |
-
if ( strlen( $ua ) > 200 )
|
71 |
$ua = substr( $ua, 0, 199 );
|
|
|
72 |
|
73 |
return $ua;
|
74 |
}
|
75 |
}
|
76 |
|
77 |
-
$GLOBALS['dlm_logging'] = new DLM_Logging();
|
78 |
-
|
79 |
-
/**
|
80 |
-
* dlm_create_log function.
|
81 |
-
*
|
82 |
-
* @access public
|
83 |
-
* @param string $type (default: '')
|
84 |
-
* @param string $status (default: '')
|
85 |
-
* @param string $message (default: '')
|
86 |
-
* @param mixed $download
|
87 |
-
* @param mixed $version
|
88 |
-
* @return void
|
89 |
-
*/
|
90 |
-
function dlm_create_log( $type = '', $status = '', $message = '', $download, $version ) {
|
91 |
-
global $dlm_logging;
|
92 |
-
|
93 |
-
$dlm_logging->create_log( $type, $status, $message, $download, $version );
|
94 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Logging class.
|
9 |
*/
|
10 |
class DLM_Logging {
|
11 |
|
12 |
+
/**
|
13 |
+
* Check if logging is enabled
|
14 |
+
*
|
15 |
+
* @return bool
|
16 |
+
*/
|
17 |
+
public function is_logging_enabled() {
|
18 |
+
return (1 == get_option( 'dlm_enable_logging', 0 ));
|
19 |
+
}
|
20 |
+
|
21 |
/**
|
22 |
* create_log function.
|
23 |
*
|
25 |
* @return void
|
26 |
*/
|
27 |
public function create_log( $type, $status, $message, $download, $version ) {
|
28 |
+
global $wpdb;
|
29 |
|
30 |
+
$wpdb->hide_errors();
|
31 |
|
32 |
$wpdb->insert(
|
33 |
$wpdb->download_log,
|
78 |
private function get_user_ua() {
|
79 |
$ua = sanitize_text_field( isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '' );
|
80 |
|
81 |
+
if ( strlen( $ua ) > 200 ) {
|
82 |
$ua = substr( $ua, 0, 199 );
|
83 |
+
}
|
84 |
|
85 |
return $ua;
|
86 |
}
|
87 |
}
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/class-dlm-post-type-manager.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class DLM_Post_Type_Manager {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Setup hooks
|
7 |
+
*/
|
8 |
+
public function setup() {
|
9 |
+
add_action( 'init', array( $this, 'register' ), 10 );
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Register Post Types
|
14 |
+
*/
|
15 |
+
public function register() {
|
16 |
+
|
17 |
+
// Register Download Post Type
|
18 |
+
register_post_type( "dlm_download",
|
19 |
+
apply_filters( 'dlm_cpt_dlm_download_args', array(
|
20 |
+
'labels' => array(
|
21 |
+
'all_items' => __( 'All Downloads', 'download-monitor' ),
|
22 |
+
'name' => __( 'Downloads', 'download-monitor' ),
|
23 |
+
'singular_name' => __( 'Download', 'download-monitor' ),
|
24 |
+
'add_new' => __( 'Add New', 'download-monitor' ),
|
25 |
+
'add_new_item' => __( 'Add Download', 'download-monitor' ),
|
26 |
+
'edit' => __( 'Edit', 'download-monitor' ),
|
27 |
+
'edit_item' => __( 'Edit Download', 'download-monitor' ),
|
28 |
+
'new_item' => __( 'New Download', 'download-monitor' ),
|
29 |
+
'view' => __( 'View Download', 'download-monitor' ),
|
30 |
+
'view_item' => __( 'View Download', 'download-monitor' ),
|
31 |
+
'search_items' => __( 'Search Downloads', 'download-monitor' ),
|
32 |
+
'not_found' => __( 'No Downloads found', 'download-monitor' ),
|
33 |
+
'not_found_in_trash' => __( 'No Downloads found in trash', 'download-monitor' ),
|
34 |
+
'parent' => __( 'Parent Download', 'download-monitor' )
|
35 |
+
),
|
36 |
+
'description' => __( 'This is where you can create and manage downloads for your site.', 'download-monitor' ),
|
37 |
+
'public' => false,
|
38 |
+
'show_ui' => true,
|
39 |
+
'capability_type' => 'post',
|
40 |
+
'capabilities' => array(
|
41 |
+
'publish_posts' => 'manage_downloads',
|
42 |
+
'edit_posts' => 'manage_downloads',
|
43 |
+
'edit_others_posts' => 'manage_downloads',
|
44 |
+
'delete_posts' => 'manage_downloads',
|
45 |
+
'delete_others_posts' => 'manage_downloads',
|
46 |
+
'read_private_posts' => 'manage_downloads',
|
47 |
+
'edit_post' => 'manage_downloads',
|
48 |
+
'delete_post' => 'manage_downloads',
|
49 |
+
'read_post' => 'manage_downloads'
|
50 |
+
),
|
51 |
+
'publicly_queryable' => false,
|
52 |
+
'exclude_from_search' => true,
|
53 |
+
'hierarchical' => false,
|
54 |
+
'rewrite' => false,
|
55 |
+
'query_var' => false,
|
56 |
+
'supports' => apply_filters( 'dlm_cpt_dlm_download_supports', array(
|
57 |
+
'title',
|
58 |
+
'editor',
|
59 |
+
'excerpt',
|
60 |
+
'thumbnail',
|
61 |
+
'custom-fields'
|
62 |
+
) ),
|
63 |
+
'has_archive' => false,
|
64 |
+
'show_in_nav_menus' => false
|
65 |
+
) )
|
66 |
+
);
|
67 |
+
|
68 |
+
// Register Download Version Post Type
|
69 |
+
register_post_type( "dlm_download_version",
|
70 |
+
apply_filters( 'dlm_cpt_dlm_download_version_args', array(
|
71 |
+
'public' => false,
|
72 |
+
'show_ui' => false,
|
73 |
+
'publicly_queryable' => false,
|
74 |
+
'exclude_from_search' => true,
|
75 |
+
'hierarchical' => false,
|
76 |
+
'rewrite' => false,
|
77 |
+
'query_var' => false,
|
78 |
+
'show_in_nav_menus' => false
|
79 |
+
) )
|
80 |
+
);
|
81 |
+
|
82 |
+
}
|
83 |
+
|
84 |
+
}
|
includes/class-dlm-shortcodes.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Shortcodes class.
|
@@ -8,12 +10,9 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
8 |
class DLM_Shortcodes {
|
9 |
|
10 |
/**
|
11 |
-
*
|
12 |
-
*
|
13 |
-
* @access public
|
14 |
-
* @return void
|
15 |
*/
|
16 |
-
public function
|
17 |
add_shortcode( 'total_downloads', array( $this, 'total_downloads' ) );
|
18 |
add_shortcode( 'total_files', array( $this, 'total_files' ) );
|
19 |
add_shortcode( 'download', array( $this, 'download' ) );
|
@@ -55,11 +54,13 @@ class DLM_Shortcodes {
|
|
55 |
* download function.
|
56 |
*
|
57 |
* @access public
|
58 |
-
*
|
59 |
-
* @
|
|
|
|
|
60 |
*/
|
61 |
public function download( $atts, $content = '' ) {
|
62 |
-
global $
|
63 |
|
64 |
extract( shortcode_atts( array(
|
65 |
'id' => '',
|
@@ -71,54 +72,60 @@ class DLM_Shortcodes {
|
|
71 |
|
72 |
$id = apply_filters( 'dlm_shortcode_download_id', $id );
|
73 |
|
74 |
-
if ( empty( $id ) )
|
75 |
return;
|
|
|
76 |
|
77 |
-
|
78 |
-
|
79 |
|
80 |
-
|
81 |
|
82 |
-
|
83 |
|
84 |
-
|
85 |
$version_id = $dlm_download->get_version_id( $version );
|
|
|
86 |
|
87 |
-
if ( $version_id )
|
88 |
$dlm_download->set_version( $version_id );
|
|
|
89 |
|
90 |
return '<a href="' . $download->get_the_download_link() . '">' . $content . '</a>';
|
91 |
|
92 |
} else {
|
93 |
return '[' . __( 'Download not found', 'download-monitor' ) . ']';
|
94 |
}
|
95 |
-
|
96 |
-
|
97 |
-
// If there is no content, get the template part
|
98 |
-
else {
|
99 |
|
100 |
-
|
101 |
|
102 |
$downloads = new WP_Query( array(
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
|
110 |
if ( $downloads->have_posts() ) {
|
111 |
|
112 |
while ( $downloads->have_posts() ) {
|
113 |
$downloads->the_post();
|
114 |
|
115 |
-
if ( $version )
|
116 |
$version_id = $dlm_download->get_version_id( $version );
|
|
|
117 |
|
118 |
-
if ( $version_id )
|
119 |
$dlm_download->set_version( $version_id );
|
|
|
|
|
|
|
|
|
120 |
|
121 |
-
$
|
122 |
}
|
123 |
|
124 |
} else {
|
@@ -127,23 +134,24 @@ class DLM_Shortcodes {
|
|
127 |
|
128 |
wp_reset_postdata();
|
129 |
|
130 |
-
if (
|
131 |
return wpautop( ob_get_clean() );
|
132 |
-
else
|
133 |
return ob_get_clean();
|
134 |
-
|
|
|
135 |
}
|
136 |
|
137 |
/**
|
138 |
* download_data function.
|
139 |
*
|
140 |
* @access public
|
141 |
-
*
|
142 |
-
* @param
|
143 |
-
*
|
|
|
144 |
*/
|
145 |
public function download_data( $atts ) {
|
146 |
-
global $download_monitor;
|
147 |
|
148 |
extract( shortcode_atts( array(
|
149 |
'id' => '',
|
@@ -154,16 +162,19 @@ class DLM_Shortcodes {
|
|
154 |
|
155 |
$id = apply_filters( 'dlm_shortcode_download_id', $id );
|
156 |
|
157 |
-
if ( empty( $id ) || empty( $data ) )
|
158 |
return;
|
|
|
159 |
|
160 |
$download = new DLM_Download( $id );
|
161 |
|
162 |
-
if ( $version )
|
163 |
$version_id = $download->get_version_id( $version );
|
|
|
164 |
|
165 |
-
if ( $version_id )
|
166 |
$download->set_version( $version_id );
|
|
|
167 |
|
168 |
switch ( $data ) {
|
169 |
|
@@ -219,11 +230,13 @@ class DLM_Shortcodes {
|
|
219 |
* downloads function.
|
220 |
*
|
221 |
* @access public
|
|
|
222 |
* @param mixed $atts
|
|
|
223 |
* @return void
|
224 |
*/
|
225 |
public function downloads( $atts ) {
|
226 |
-
global $
|
227 |
|
228 |
extract( shortcode_atts( array(
|
229 |
// Query args
|
@@ -273,65 +286,68 @@ class DLM_Shortcodes {
|
|
273 |
break;
|
274 |
default :
|
275 |
$orderby = 'title';
|
276 |
-
|
277 |
}
|
278 |
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
'taxonomy' => 'dlm_download_category',
|
301 |
'field' => 'slug',
|
302 |
'terms' => $categories,
|
303 |
'include_children' => ( $category_include_children === 'true' || $category_include_children === true )
|
304 |
-
|
305 |
-
|
306 |
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
'field' => 'slug',
|
311 |
'terms' => $tags
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
|
332 |
$downloads = new WP_Query( $args );
|
333 |
$dlm_max_num_pages = $downloads->max_num_pages;
|
334 |
|
|
|
|
|
|
|
335 |
if ( $downloads->have_posts() ) : ?>
|
336 |
|
337 |
<?php echo html_entity_decode( $loop_start ); ?>
|
@@ -340,7 +356,7 @@ class DLM_Shortcodes {
|
|
340 |
|
341 |
<?php echo html_entity_decode( $before ); ?>
|
342 |
|
343 |
-
<?php $
|
344 |
|
345 |
<?php echo html_entity_decode( $after ); ?>
|
346 |
|
@@ -348,14 +364,14 @@ class DLM_Shortcodes {
|
|
348 |
|
349 |
<?php echo html_entity_decode( $loop_end ); ?>
|
350 |
|
351 |
-
<?php if ( $paginate )
|
|
|
|
|
352 |
|
353 |
<?php endif;
|
354 |
|
355 |
wp_reset_postdata();
|
356 |
|
357 |
-
|
358 |
}
|
359 |
-
}
|
360 |
-
|
361 |
-
new DLM_Shortcodes();
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Shortcodes class.
|
10 |
class DLM_Shortcodes {
|
11 |
|
12 |
/**
|
13 |
+
* Setup the shortcodes
|
|
|
|
|
|
|
14 |
*/
|
15 |
+
public function setup() {
|
16 |
add_shortcode( 'total_downloads', array( $this, 'total_downloads' ) );
|
17 |
add_shortcode( 'total_files', array( $this, 'total_files' ) );
|
18 |
add_shortcode( 'download', array( $this, 'download' ) );
|
54 |
* download function.
|
55 |
*
|
56 |
* @access public
|
57 |
+
*
|
58 |
+
* @param array $atts
|
59 |
+
*
|
60 |
+
* @return string
|
61 |
*/
|
62 |
public function download( $atts, $content = '' ) {
|
63 |
+
global $dlm_download;
|
64 |
|
65 |
extract( shortcode_atts( array(
|
66 |
'id' => '',
|
72 |
|
73 |
$id = apply_filters( 'dlm_shortcode_download_id', $id );
|
74 |
|
75 |
+
if ( empty( $id ) ) {
|
76 |
return;
|
77 |
+
}
|
78 |
|
79 |
+
// If we have content, wrap in a link only
|
80 |
+
if ( $content ) {
|
81 |
|
82 |
+
$download = new DLM_Download( $id );
|
83 |
|
84 |
+
if ( $download->exists() ) {
|
85 |
|
86 |
+
if ( isset( $version ) && 0 != $version ) {
|
87 |
$version_id = $dlm_download->get_version_id( $version );
|
88 |
+
}
|
89 |
|
90 |
+
if ( isset( $version_id ) && 0 != $version_id ) {
|
91 |
$dlm_download->set_version( $version_id );
|
92 |
+
}
|
93 |
|
94 |
return '<a href="' . $download->get_the_download_link() . '">' . $content . '</a>';
|
95 |
|
96 |
} else {
|
97 |
return '[' . __( 'Download not found', 'download-monitor' ) . ']';
|
98 |
}
|
99 |
+
} // If there is no content, get the template part
|
100 |
+
else {
|
|
|
|
|
101 |
|
102 |
+
ob_start();
|
103 |
|
104 |
$downloads = new WP_Query( array(
|
105 |
+
'post_type' => 'dlm_download',
|
106 |
+
'posts_per_page' => 1,
|
107 |
+
'no_found_rows' => 1,
|
108 |
+
'post_status' => 'publish',
|
109 |
+
'p' => $id
|
110 |
+
) );
|
111 |
|
112 |
if ( $downloads->have_posts() ) {
|
113 |
|
114 |
while ( $downloads->have_posts() ) {
|
115 |
$downloads->the_post();
|
116 |
|
117 |
+
if ( isset( $version ) && 0 != $version ) {
|
118 |
$version_id = $dlm_download->get_version_id( $version );
|
119 |
+
}
|
120 |
|
121 |
+
if ( isset( $version_id ) && 0 != $version_id ) {
|
122 |
$dlm_download->set_version( $version_id );
|
123 |
+
}
|
124 |
+
|
125 |
+
// Template handler
|
126 |
+
$template_handler = new DLM_Template_Handler();
|
127 |
|
128 |
+
$template_handler->get_template_part( 'content-download', $template );
|
129 |
}
|
130 |
|
131 |
} else {
|
134 |
|
135 |
wp_reset_postdata();
|
136 |
|
137 |
+
if ( 'true' === $autop || true === $autop ) {
|
138 |
return wpautop( ob_get_clean() );
|
139 |
+
} else {
|
140 |
return ob_get_clean();
|
141 |
+
}
|
142 |
+
}
|
143 |
}
|
144 |
|
145 |
/**
|
146 |
* download_data function.
|
147 |
*
|
148 |
* @access public
|
149 |
+
*
|
150 |
+
* @param array $atts
|
151 |
+
*
|
152 |
+
* @return mixed
|
153 |
*/
|
154 |
public function download_data( $atts ) {
|
|
|
155 |
|
156 |
extract( shortcode_atts( array(
|
157 |
'id' => '',
|
162 |
|
163 |
$id = apply_filters( 'dlm_shortcode_download_id', $id );
|
164 |
|
165 |
+
if ( empty( $id ) || empty( $data ) ) {
|
166 |
return;
|
167 |
+
}
|
168 |
|
169 |
$download = new DLM_Download( $id );
|
170 |
|
171 |
+
if ( isset( $version ) && 0 != $version ) {
|
172 |
$version_id = $download->get_version_id( $version );
|
173 |
+
}
|
174 |
|
175 |
+
if ( $version_id ) {
|
176 |
$download->set_version( $version_id );
|
177 |
+
}
|
178 |
|
179 |
switch ( $data ) {
|
180 |
|
230 |
* downloads function.
|
231 |
*
|
232 |
* @access public
|
233 |
+
*
|
234 |
* @param mixed $atts
|
235 |
+
*
|
236 |
* @return void
|
237 |
*/
|
238 |
public function downloads( $atts ) {
|
239 |
+
global $dlm_max_num_pages;
|
240 |
|
241 |
extract( shortcode_atts( array(
|
242 |
// Query args
|
286 |
break;
|
287 |
default :
|
288 |
$orderby = 'title';
|
289 |
+
break;
|
290 |
}
|
291 |
|
292 |
+
$args = array(
|
293 |
+
'post_type' => 'dlm_download',
|
294 |
+
'posts_per_page' => $per_page,
|
295 |
+
'offset' => $paginate ? ( max( 1, get_query_var( 'paged' ) ) - 1 ) * $per_page : $offset,
|
296 |
+
'post_status' => 'publish',
|
297 |
+
'orderby' => $orderby,
|
298 |
+
'order' => $order,
|
299 |
+
'meta_key' => $meta_key,
|
300 |
+
'post__in' => $post__in,
|
301 |
+
'post__not_in' => $post__not_in,
|
302 |
+
'meta_query' => array()
|
303 |
+
);
|
304 |
+
|
305 |
+
if ( $category || $tag ) {
|
306 |
+
$args['tax_query'] = array( 'relation' => 'AND' );
|
307 |
+
|
308 |
+
$categories = array_filter( explode( ',', $category ) );
|
309 |
+
$tags = array_filter( explode( ',', $tag ) );
|
310 |
+
|
311 |
+
if ( ! empty( $categories ) ) {
|
312 |
+
$args['tax_query'][] = array(
|
313 |
'taxonomy' => 'dlm_download_category',
|
314 |
'field' => 'slug',
|
315 |
'terms' => $categories,
|
316 |
'include_children' => ( $category_include_children === 'true' || $category_include_children === true )
|
317 |
+
);
|
318 |
+
}
|
319 |
|
320 |
+
if ( ! empty( $tags ) ) {
|
321 |
+
$args['tax_query'][] = array(
|
322 |
+
'taxonomy' => 'dlm_download_tag',
|
323 |
'field' => 'slug',
|
324 |
'terms' => $tags
|
325 |
+
);
|
326 |
+
}
|
327 |
+
}
|
328 |
+
|
329 |
+
if ( $featured === 'true' || $featured === true ) {
|
330 |
+
$args['meta_query'][] = array(
|
331 |
+
'key' => '_featured',
|
332 |
+
'value' => 'yes'
|
333 |
+
);
|
334 |
+
}
|
335 |
+
|
336 |
+
if ( $members_only === 'true' || $members_only === true ) {
|
337 |
+
$args['meta_query'][] = array(
|
338 |
+
'key' => '_members_only',
|
339 |
+
'value' => 'yes'
|
340 |
+
);
|
341 |
+
}
|
342 |
+
|
343 |
+
ob_start();
|
344 |
|
345 |
$downloads = new WP_Query( $args );
|
346 |
$dlm_max_num_pages = $downloads->max_num_pages;
|
347 |
|
348 |
+
// Template handler
|
349 |
+
$template_handler = new DLM_Template_Handler();
|
350 |
+
|
351 |
if ( $downloads->have_posts() ) : ?>
|
352 |
|
353 |
<?php echo html_entity_decode( $loop_start ); ?>
|
356 |
|
357 |
<?php echo html_entity_decode( $before ); ?>
|
358 |
|
359 |
+
<?php $template_handler->get_template_part( 'content-download', $template ); ?>
|
360 |
|
361 |
<?php echo html_entity_decode( $after ); ?>
|
362 |
|
364 |
|
365 |
<?php echo html_entity_decode( $loop_end ); ?>
|
366 |
|
367 |
+
<?php if ( $paginate ) {
|
368 |
+
$template_handler->get_template_part( 'pagination', '' );
|
369 |
+
} ?>
|
370 |
|
371 |
<?php endif;
|
372 |
|
373 |
wp_reset_postdata();
|
374 |
|
375 |
+
return ob_get_clean();
|
376 |
}
|
377 |
+
}
|
|
|
|
includes/class-dlm-taxonomy-manager.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_Taxonomy_Manager {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Setup hooks
|
11 |
+
*/
|
12 |
+
public function setup() {
|
13 |
+
add_action( 'init', array( $this, 'register' ), 9 );
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Register Taxonomies
|
18 |
+
*/
|
19 |
+
public function register() {
|
20 |
+
|
21 |
+
// Register Download Category
|
22 |
+
register_taxonomy( 'dlm_download_category',
|
23 |
+
array( 'dlm_download' ),
|
24 |
+
apply_filters( 'dlm_download_category_args', array(
|
25 |
+
'hierarchical' => true,
|
26 |
+
'update_count_callback' => '_update_post_term_count',
|
27 |
+
'label' => __( 'Categories', 'download-monitor' ),
|
28 |
+
'labels' => array(
|
29 |
+
'name' => __( 'Categories', 'download-monitor' ),
|
30 |
+
'singular_name' => __( 'Download Category', 'download-monitor' ),
|
31 |
+
'search_items' => __( 'Search Download Categories', 'download-monitor' ),
|
32 |
+
'all_items' => __( 'All Download Categories', 'download-monitor' ),
|
33 |
+
'parent_item' => __( 'Parent Download Category', 'download-monitor' ),
|
34 |
+
'parent_item_colon' => __( 'Parent Download Category:', 'download-monitor' ),
|
35 |
+
'edit_item' => __( 'Edit Download Category', 'download-monitor' ),
|
36 |
+
'update_item' => __( 'Update Download Category', 'download-monitor' ),
|
37 |
+
'add_new_item' => __( 'Add New Download Category', 'download-monitor' ),
|
38 |
+
'new_item_name' => __( 'New Download Category Name', 'download-monitor' )
|
39 |
+
),
|
40 |
+
'show_ui' => true,
|
41 |
+
'query_var' => true,
|
42 |
+
'capabilities' => array(
|
43 |
+
'manage_terms' => 'manage_downloads',
|
44 |
+
'edit_terms' => 'manage_downloads',
|
45 |
+
'delete_terms' => 'manage_downloads',
|
46 |
+
'assign_terms' => 'manage_downloads',
|
47 |
+
),
|
48 |
+
'rewrite' => false,
|
49 |
+
'show_in_nav_menus' => false
|
50 |
+
) )
|
51 |
+
);
|
52 |
+
|
53 |
+
// Register Download Tag
|
54 |
+
register_taxonomy( 'dlm_download_tag',
|
55 |
+
array( 'dlm_download' ),
|
56 |
+
apply_filters( 'dlm_download_tag_args', array(
|
57 |
+
'hierarchical' => false,
|
58 |
+
'label' => __( 'Tags', 'download-monitor' ),
|
59 |
+
'labels' => array(
|
60 |
+
'name' => __( 'Tags', 'download-monitor' ),
|
61 |
+
'singular_name' => __( 'Download Tag', 'download-monitor' ),
|
62 |
+
'search_items' => __( 'Search Download Tags', 'download-monitor' ),
|
63 |
+
'all_items' => __( 'All Download Tags', 'download-monitor' ),
|
64 |
+
'parent_item' => __( 'Parent Download Tag', 'download-monitor' ),
|
65 |
+
'parent_item_colon' => __( 'Parent Download Tag:', 'download-monitor' ),
|
66 |
+
'edit_item' => __( 'Edit Download Tag', 'download-monitor' ),
|
67 |
+
'update_item' => __( 'Update Download Tag', 'download-monitor' ),
|
68 |
+
'add_new_item' => __( 'Add New Download Tag', 'download-monitor' ),
|
69 |
+
'new_item_name' => __( 'New Download Tag Name', 'download-monitor' )
|
70 |
+
),
|
71 |
+
'show_ui' => true,
|
72 |
+
'query_var' => true,
|
73 |
+
'capabilities' => array(
|
74 |
+
'manage_terms' => 'manage_downloads',
|
75 |
+
'edit_terms' => 'manage_downloads',
|
76 |
+
'delete_terms' => 'manage_downloads',
|
77 |
+
'assign_terms' => 'manage_downloads',
|
78 |
+
),
|
79 |
+
'rewrite' => false,
|
80 |
+
'show_in_nav_menus' => false
|
81 |
+
) )
|
82 |
+
);
|
83 |
+
}
|
84 |
+
|
85 |
+
}
|
includes/class-dlm-template-handler.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_Template_Handler {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* get_template_part method.
|
11 |
+
*
|
12 |
+
* @todo move this to own template loader
|
13 |
+
*
|
14 |
+
* @access public
|
15 |
+
*
|
16 |
+
* @param string $slug
|
17 |
+
* @param string $name (default: '')
|
18 |
+
* @param string $custom_dir
|
19 |
+
*
|
20 |
+
* @return void
|
21 |
+
*/
|
22 |
+
public function get_template_part( $slug, $name = '', $custom_dir = '' ) {
|
23 |
+
$template = '';
|
24 |
+
|
25 |
+
// The plugin path
|
26 |
+
$plugin_path = WP_DLM::get_plugin_path();
|
27 |
+
|
28 |
+
// Look in yourtheme/slug-name.php and yourtheme/download-monitor/slug-name.php
|
29 |
+
if ( $name ) {
|
30 |
+
$template = locate_template( array( "{$slug}-{$name}.php", "download-monitor/{$slug}-{$name}.php" ) );
|
31 |
+
}
|
32 |
+
|
33 |
+
// Get default slug-name.php
|
34 |
+
if ( ! $template && $name && file_exists( $plugin_path . "/templates/{$slug}-{$name}.php" ) ) {
|
35 |
+
$template = $plugin_path . "/templates/{$slug}-{$name}.php";
|
36 |
+
}
|
37 |
+
|
38 |
+
// If a custom path was defined, check that next
|
39 |
+
if ( ! $template && $custom_dir && file_exists( trailingslashit( $custom_dir ) . "{$slug}-{$name}.php" ) ) {
|
40 |
+
$template = trailingslashit( $custom_dir ) . "{$slug}-{$name}.php";
|
41 |
+
}
|
42 |
+
|
43 |
+
// If template file doesn't exist, look in yourtheme/slug.php and yourtheme/download-monitor/slug.php
|
44 |
+
if ( ! $template ) {
|
45 |
+
$template = locate_template( array( "{$slug}.php", "download-monitor/{$slug}.php" ) );
|
46 |
+
}
|
47 |
+
|
48 |
+
// If a custom path was defined, check that next
|
49 |
+
if ( ! $template && $custom_dir && file_exists( trailingslashit( $custom_dir ) . "{$slug}-{$name}.php" ) ) {
|
50 |
+
$template = trailingslashit( $custom_dir ) . "{$slug}.php";
|
51 |
+
}
|
52 |
+
|
53 |
+
// Get default slug-name.php
|
54 |
+
if ( ! $template && file_exists( $plugin_path . "/templates/{$slug}.php" ) ) {
|
55 |
+
$template = $plugin_path . "/templates/{$slug}.php";
|
56 |
+
}
|
57 |
+
|
58 |
+
// Allow 3rd party plugin filter template file from their plugin
|
59 |
+
$template = apply_filters( 'dlm_get_template_part', $template, $slug, $name );
|
60 |
+
|
61 |
+
// Load template if we've found one
|
62 |
+
if ( $template ) {
|
63 |
+
load_template( $template, false );
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
}
|
includes/class-wp-dlm.php
ADDED
@@ -0,0 +1,426 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
/**
|
8 |
+
* WP_DLM class.
|
9 |
+
*
|
10 |
+
* Main plugin class
|
11 |
+
*/
|
12 |
+
class WP_DLM {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Get the plugin file
|
16 |
+
*
|
17 |
+
* @static
|
18 |
+
*
|
19 |
+
* @return String
|
20 |
+
*/
|
21 |
+
public static function get_plugin_file() {
|
22 |
+
return DLM_PLUGIN_FILE;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Get plugin path
|
27 |
+
*
|
28 |
+
* @static
|
29 |
+
*
|
30 |
+
* @return string
|
31 |
+
*/
|
32 |
+
public static function get_plugin_path() {
|
33 |
+
return plugin_dir_path( self::get_plugin_file() );
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Get plugin URL
|
38 |
+
*
|
39 |
+
* @static
|
40 |
+
*
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
public static function get_plugin_url() {
|
44 |
+
return plugins_url( basename( plugin_dir_path( self::get_plugin_file() ) ), basename( self::get_plugin_file() ) );
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* A static method that will setup the autoloader
|
49 |
+
*/
|
50 |
+
private static function setup_autoloader() {
|
51 |
+
require_once( plugin_dir_path( self::get_plugin_file() ) . 'includes/class-dlm-autoloader.php' );
|
52 |
+
$autoloader = new DLM_Autoloader( plugin_dir_path( self::get_plugin_file() ) . 'includes/' );
|
53 |
+
spl_autoload_register( array( $autoloader, 'load' ) );
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* __construct function.
|
58 |
+
*
|
59 |
+
* @access public
|
60 |
+
*/
|
61 |
+
public function __construct() {
|
62 |
+
global $wpdb;
|
63 |
+
|
64 |
+
// Setup autoloader
|
65 |
+
self::setup_autoloader();
|
66 |
+
|
67 |
+
// Load plugin text domain
|
68 |
+
load_textdomain( 'download-monitor', WP_LANG_DIR . '/download-monitor/download_monitor-' . get_locale() . '.mo' );
|
69 |
+
load_plugin_textdomain( 'download-monitor', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
|
70 |
+
|
71 |
+
// Table for logs
|
72 |
+
$wpdb->download_log = $wpdb->prefix . 'download_log';
|
73 |
+
|
74 |
+
// Setup admin classes
|
75 |
+
if ( is_admin() ) {
|
76 |
+
|
77 |
+
// Setup admin scripts
|
78 |
+
$admin_scripts = new DLM_Admin_Scripts();
|
79 |
+
$admin_scripts->setup();
|
80 |
+
|
81 |
+
// Setup Main Admin Class
|
82 |
+
$dlm_admin = new DLM_Admin();
|
83 |
+
$dlm_admin->setup();
|
84 |
+
|
85 |
+
// Customize Admin CPT views
|
86 |
+
new DLM_Admin_CPT();
|
87 |
+
|
88 |
+
// Admin Write Panels
|
89 |
+
new DLM_Admin_Writepanels();
|
90 |
+
|
91 |
+
// Admin Media Browser
|
92 |
+
new DLM_Admin_Media_Browser();
|
93 |
+
|
94 |
+
// Admin Media Insert
|
95 |
+
new DLM_Admin_Media_Insert();
|
96 |
+
}
|
97 |
+
|
98 |
+
// Setup AJAX handler if doing AJAX
|
99 |
+
if ( defined( 'DOING_AJAX' ) ) {
|
100 |
+
new DLM_Ajax_Handler();
|
101 |
+
}
|
102 |
+
|
103 |
+
// Functions
|
104 |
+
include_once( 'download-functions.php' );
|
105 |
+
|
106 |
+
// Deprecated
|
107 |
+
include_once( 'deprecated.php' );
|
108 |
+
|
109 |
+
// Setup DLM Download Handler
|
110 |
+
$download_handler = new DLM_Download_Handler();
|
111 |
+
$download_handler->setup();
|
112 |
+
|
113 |
+
// Setup shortcodes
|
114 |
+
$dlm_shortcodes = new DLM_Shortcodes();
|
115 |
+
$dlm_shortcodes->setup();
|
116 |
+
|
117 |
+
// Setup Widgets
|
118 |
+
$widget_manager = new DLM_Widget_Manager();
|
119 |
+
$widget_manager->setup();
|
120 |
+
|
121 |
+
// Setup Taxonomies
|
122 |
+
$taxonomy_manager = new DLM_Taxonomy_Manager();
|
123 |
+
$taxonomy_manager->setup();
|
124 |
+
|
125 |
+
// Setup Post Types
|
126 |
+
$post_type_manager = new DLM_Post_Type_Manager();
|
127 |
+
$post_type_manager->setup();
|
128 |
+
|
129 |
+
// Setup actions
|
130 |
+
$this->setup_actions();
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Setup actions
|
135 |
+
*/
|
136 |
+
private function setup_actions() {
|
137 |
+
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_links' ) );
|
138 |
+
add_action( 'init', array( $this, 'register_globals' ) );
|
139 |
+
add_action( 'after_setup_theme', array( $this, 'compatibility' ) );
|
140 |
+
add_action( 'the_post', array( $this, 'setup_download_data' ) );
|
141 |
+
add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ) );
|
142 |
+
add_action( 'admin_init', array( $this, 'load_extensions' ) );
|
143 |
+
}
|
144 |
+
|
145 |
+
public function load_extensions() {
|
146 |
+
|
147 |
+
// Load the registered extensions
|
148 |
+
$registered_extensions = apply_filters( 'dlm_extensions', array() );
|
149 |
+
|
150 |
+
// Check if we've got extensions
|
151 |
+
if ( count( $registered_extensions ) > 0 ) {
|
152 |
+
|
153 |
+
// Don't block local requests
|
154 |
+
add_filter( 'block_local_requests', '__return_false' );
|
155 |
+
|
156 |
+
// Load products
|
157 |
+
DLM_Product_Manager::get()->load_products( $registered_extensions );
|
158 |
+
|
159 |
+
}
|
160 |
+
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Add Theme Compatibility
|
165 |
+
*
|
166 |
+
* @access public
|
167 |
+
* @return void
|
168 |
+
*/
|
169 |
+
public function compatibility() {
|
170 |
+
// Post thumbnail support
|
171 |
+
if ( ! current_theme_supports( 'post-thumbnails' ) ) {
|
172 |
+
add_theme_support( 'post-thumbnails' );
|
173 |
+
remove_post_type_support( 'post', 'thumbnail' );
|
174 |
+
remove_post_type_support( 'page', 'thumbnail' );
|
175 |
+
} else {
|
176 |
+
add_theme_support( 'post-thumbnails', array( 'dlm_download' ) );
|
177 |
+
add_post_type_support( 'download', 'thumbnail' );
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Add links to admin plugins page.
|
183 |
+
*
|
184 |
+
* @param array $links
|
185 |
+
*
|
186 |
+
* @return array
|
187 |
+
*/
|
188 |
+
public function plugin_links( $links ) {
|
189 |
+
$plugin_links = array(
|
190 |
+
'<a href="' . admin_url( 'edit.php?post_type=dlm_download&page=download-monitor-settings' ) . '">' . __( 'Settings', 'download-monitor' ) . '</a>',
|
191 |
+
'<a href="https://www.download-monitor.com/extensions/">' . __( 'Extensions', 'download-monitor' ) . '</a>',
|
192 |
+
'<a href="https://github.com/download-monitor/download-monitor/wiki">' . __( 'Docs', 'download-monitor' ) . '</a>',
|
193 |
+
);
|
194 |
+
|
195 |
+
return array_merge( $plugin_links, $links );
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* frontend_scripts function.
|
200 |
+
*
|
201 |
+
* @access public
|
202 |
+
* @return void
|
203 |
+
*/
|
204 |
+
public function frontend_scripts() {
|
205 |
+
wp_enqueue_style( 'dlm-frontend', self::get_plugin_url() . '/assets/css/frontend.css' );
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Register environment globals
|
210 |
+
*
|
211 |
+
* @access private
|
212 |
+
* @return void
|
213 |
+
*/
|
214 |
+
public function register_globals() {
|
215 |
+
$GLOBALS['dlm_download'] = null;
|
216 |
+
}
|
217 |
+
|
218 |
+
/**
|
219 |
+
* When the_post is called, get product data too
|
220 |
+
*
|
221 |
+
* @access public
|
222 |
+
*
|
223 |
+
* @param mixed $post
|
224 |
+
*
|
225 |
+
* @return void
|
226 |
+
*/
|
227 |
+
public function setup_download_data( $post ) {
|
228 |
+
if ( is_int( $post ) ) {
|
229 |
+
$post = get_post( $post );
|
230 |
+
}
|
231 |
+
|
232 |
+
if ( $post->post_type !== 'dlm_download' ) {
|
233 |
+
return;
|
234 |
+
}
|
235 |
+
|
236 |
+
$GLOBALS['dlm_download'] = new DLM_Download( $post->ID );
|
237 |
+
}
|
238 |
+
|
239 |
+
/** Deprecated methods **************************************************/
|
240 |
+
|
241 |
+
/**
|
242 |
+
* get_template_part function.
|
243 |
+
*
|
244 |
+
* @deprecated 1.6.0
|
245 |
+
*
|
246 |
+
* @access public
|
247 |
+
*
|
248 |
+
* @param mixed $slug
|
249 |
+
* @param string $name (default: '')
|
250 |
+
*
|
251 |
+
* @return void
|
252 |
+
*/
|
253 |
+
public function get_template_part( $slug, $name = '', $custom_dir = '' ) {
|
254 |
+
|
255 |
+
// Deprecated
|
256 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
257 |
+
|
258 |
+
// Load template part
|
259 |
+
$template_handler = new DLM_Template_Handler();
|
260 |
+
$template_handler->get_template_part( $slug, $name, $custom_dir );
|
261 |
+
}
|
262 |
+
|
263 |
+
/**
|
264 |
+
* Get the plugin url
|
265 |
+
*
|
266 |
+
* @deprecated 1.6.0
|
267 |
+
*
|
268 |
+
* @access public
|
269 |
+
* @return string
|
270 |
+
*/
|
271 |
+
public function plugin_url() {
|
272 |
+
|
273 |
+
// Deprecated
|
274 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
275 |
+
|
276 |
+
return self::get_plugin_url();
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Get the plugin path
|
281 |
+
*
|
282 |
+
* @deprecated 1.6.0
|
283 |
+
*
|
284 |
+
* @access public
|
285 |
+
* @return string
|
286 |
+
*/
|
287 |
+
public function plugin_path() {
|
288 |
+
|
289 |
+
// Deprecated
|
290 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
291 |
+
|
292 |
+
return self::get_plugin_path();
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Returns a listing of all files in the specified folder and all subdirectories up to 100 levels deep.
|
297 |
+
* The depth of the recursiveness can be controlled by the $levels param.
|
298 |
+
*
|
299 |
+
* @deprecated 1.6.0
|
300 |
+
*
|
301 |
+
* @access public
|
302 |
+
*
|
303 |
+
* @param string $folder (default: '')
|
304 |
+
*
|
305 |
+
* @return void
|
306 |
+
*/
|
307 |
+
public function list_files( $folder = '' ) {
|
308 |
+
|
309 |
+
// Deprecated
|
310 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
311 |
+
|
312 |
+
// File Manger
|
313 |
+
$file_manager = new DLM_File_Manager();
|
314 |
+
|
315 |
+
// Return files
|
316 |
+
return $file_manager->list_files( $folder );
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Parse a file path and return the new path and whether or not it's remote
|
321 |
+
*
|
322 |
+
* @deprecated 1.6.0
|
323 |
+
*
|
324 |
+
* @param string $file_path
|
325 |
+
*
|
326 |
+
* @return array
|
327 |
+
*/
|
328 |
+
public function parse_file_path( $file_path ) {
|
329 |
+
|
330 |
+
// Deprecated
|
331 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
332 |
+
|
333 |
+
// File Manger
|
334 |
+
$file_manager = new DLM_File_Manager();
|
335 |
+
|
336 |
+
// Return files
|
337 |
+
return $file_manager->parse_file_path( $file_path );
|
338 |
+
}
|
339 |
+
|
340 |
+
/**
|
341 |
+
* Gets the filesize of a path or URL.
|
342 |
+
*
|
343 |
+
* @deprecated 1.6.0
|
344 |
+
*
|
345 |
+
* @param string $file_path
|
346 |
+
*
|
347 |
+
* @access public
|
348 |
+
* @return string size on success, -1 on failure
|
349 |
+
*/
|
350 |
+
public function get_filesize( $file_path ) {
|
351 |
+
|
352 |
+
// Deprecated
|
353 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
354 |
+
|
355 |
+
// File Manger
|
356 |
+
$file_manager = new DLM_File_Manager();
|
357 |
+
|
358 |
+
// Return files
|
359 |
+
return $file_manager->get_file_size( $file_path );
|
360 |
+
}
|
361 |
+
|
362 |
+
/**
|
363 |
+
* Gets md5, sha1 and crc32 hashes for a file and store it.
|
364 |
+
*
|
365 |
+
* @deprecated 1.6.0
|
366 |
+
*
|
367 |
+
* @string $file_path
|
368 |
+
*
|
369 |
+
* @access public
|
370 |
+
* @return array of sizes
|
371 |
+
*/
|
372 |
+
public function get_file_hashes( $file_path ) {
|
373 |
+
|
374 |
+
// Deprecated
|
375 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
376 |
+
|
377 |
+
// File Manger
|
378 |
+
$file_manager = new DLM_File_Manager();
|
379 |
+
|
380 |
+
// Return files
|
381 |
+
return $file_manager->get_file_hashes( $file_path );
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Encode files for storage
|
386 |
+
*
|
387 |
+
* @deprecated 1.6.0
|
388 |
+
*
|
389 |
+
* @param array $files
|
390 |
+
*
|
391 |
+
* @return string
|
392 |
+
*/
|
393 |
+
public function json_encode_files( $files ) {
|
394 |
+
|
395 |
+
// Deprecated
|
396 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
397 |
+
|
398 |
+
// File Manger
|
399 |
+
$file_manager = new DLM_File_Manager();
|
400 |
+
|
401 |
+
// Return files
|
402 |
+
return $file_manager->json_encode_files( $files );
|
403 |
+
}
|
404 |
+
|
405 |
+
/**
|
406 |
+
* Fallback for PHP < 5.4 where JSON_UNESCAPED_UNICODE does not exist.
|
407 |
+
*
|
408 |
+
* @deprecated 1.6.0
|
409 |
+
*
|
410 |
+
* @param array $matches
|
411 |
+
*
|
412 |
+
* @return string
|
413 |
+
*/
|
414 |
+
public function json_unscaped_unicode_fallback( $matches ) {
|
415 |
+
|
416 |
+
// Deprecated
|
417 |
+
DLM_Debug_Logger::deprecated( __METHOD__ );
|
418 |
+
|
419 |
+
// File Manger
|
420 |
+
$file_manager = new DLM_File_Manager();
|
421 |
+
|
422 |
+
// Return files
|
423 |
+
return $file_manager->json_unscaped_unicode_fallback( $matches );
|
424 |
+
}
|
425 |
+
|
426 |
+
}
|
includes/deprecated.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated code, avoid using anything that's in this file
|
4 |
+
*/
|
5 |
+
|
6 |
+
/**
|
7 |
+
* dlm_create_log function.
|
8 |
+
*
|
9 |
+
* @access public
|
10 |
+
*
|
11 |
+
* @deprecated 1.6.0
|
12 |
+
*
|
13 |
+
* @param string $type (default: '')
|
14 |
+
* @param string $status (default: '')
|
15 |
+
* @param string $message (default: '')
|
16 |
+
* @param mixed $download
|
17 |
+
* @param mixed $version
|
18 |
+
*
|
19 |
+
* @return void
|
20 |
+
*/
|
21 |
+
function dlm_create_log( $type = '', $status = '', $message = '', $download, $version ) {
|
22 |
+
|
23 |
+
// Deprecated notice
|
24 |
+
_deprecated_function( __FUNCTION__, '1.6.0', 'DLM_Logging->create_log()' );
|
25 |
+
|
26 |
+
// Logging object
|
27 |
+
$logging = new DLM_Logging();
|
28 |
+
|
29 |
+
// Check if logging is enabled
|
30 |
+
if( $logging->is_logging_enabled() ) {
|
31 |
+
|
32 |
+
// Create log
|
33 |
+
$logging->create_log( $type, $status, $message, $download, $version );
|
34 |
+
|
35 |
+
}
|
36 |
+
|
37 |
+
}
|
includes/download-functions.php
CHANGED
@@ -7,8 +7,9 @@
|
|
7 |
function dlm_get_default_download_template() {
|
8 |
$default = get_option( 'dlm_default_template' );
|
9 |
|
10 |
-
if ( $default == 'custom' )
|
11 |
$default = get_option( 'dlm_custom_template' );
|
|
|
12 |
|
13 |
return $default;
|
14 |
}
|
7 |
function dlm_get_default_download_template() {
|
8 |
$default = get_option( 'dlm_default_template' );
|
9 |
|
10 |
+
if ( $default == 'custom' ) {
|
11 |
$default = get_option( 'dlm_custom_template' );
|
12 |
+
}
|
13 |
|
14 |
return $default;
|
15 |
}
|
includes/product/class-dlm-product-license.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class DLM_Product_License {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @var String
|
7 |
+
*/
|
8 |
+
private $product_id;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @var String
|
12 |
+
*/
|
13 |
+
private $key;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var String
|
17 |
+
*/
|
18 |
+
private $email;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @var String (active or inactive)
|
22 |
+
*/
|
23 |
+
private $status;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Constructor
|
27 |
+
*
|
28 |
+
* @param String $product_id
|
29 |
+
*/
|
30 |
+
public function __construct( $product_id ) {
|
31 |
+
|
32 |
+
// Set Product ID
|
33 |
+
$this->product_id = $product_id;
|
34 |
+
|
35 |
+
// Load license data from DB
|
36 |
+
$db_license = wp_parse_args( get_option( $this->product_id . '-license', array() ), array(
|
37 |
+
'key' => '',
|
38 |
+
'email' => get_option( 'admin_email', '' ),
|
39 |
+
'status' => 'inactive'
|
40 |
+
) );
|
41 |
+
|
42 |
+
// Set properties
|
43 |
+
$this->key = $db_license['key'];
|
44 |
+
$this->email = $db_license['email'];
|
45 |
+
$this->status = $db_license['status'];
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @return String
|
50 |
+
*/
|
51 |
+
public function get_key() {
|
52 |
+
return $this->key;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @param String $key
|
57 |
+
*/
|
58 |
+
public function set_key( $key ) {
|
59 |
+
$this->key = $key;
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @return String
|
64 |
+
*/
|
65 |
+
public function get_email() {
|
66 |
+
return $this->email;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @param String $email
|
71 |
+
*/
|
72 |
+
public function set_email( $email ) {
|
73 |
+
$this->email = $email;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @return String
|
78 |
+
*/
|
79 |
+
public function get_status() {
|
80 |
+
return $this->status;
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* @param String $status
|
85 |
+
*/
|
86 |
+
public function set_status( $status ) {
|
87 |
+
$this->status = $status;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Return if license is active
|
92 |
+
*
|
93 |
+
* @return bool
|
94 |
+
*/
|
95 |
+
public function is_active() {
|
96 |
+
return ( 'active' === $this->status );
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Store license data in DB
|
101 |
+
*/
|
102 |
+
public function store() {
|
103 |
+
update_option( $this->product_id . '-license', array(
|
104 |
+
'key' => $this->get_key(),
|
105 |
+
'email' => $this->get_email(),
|
106 |
+
'status' => $this->get_status()
|
107 |
+
) );
|
108 |
+
}
|
109 |
+
|
110 |
+
}
|
includes/product/class-dlm-product-manager.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly
|
4 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
class DLM_Product_Manager {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @var DLM_Product_Manager
|
12 |
+
*/
|
13 |
+
private static $instance = null;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var array<DLM_Product>
|
17 |
+
*/
|
18 |
+
private $products;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Private constructor
|
22 |
+
*/
|
23 |
+
private function __construct() {
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Singleton get method
|
28 |
+
*
|
29 |
+
* @since 1.0.0
|
30 |
+
* @access public
|
31 |
+
*
|
32 |
+
* @return DLM_Product_Manager
|
33 |
+
*/
|
34 |
+
public static function get() {
|
35 |
+
if ( null == self::$instance ) {
|
36 |
+
self::$instance = new self();
|
37 |
+
}
|
38 |
+
|
39 |
+
return self::$instance;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Load Products
|
44 |
+
*
|
45 |
+
* @param array $extensions
|
46 |
+
*/
|
47 |
+
public function load_products( $extensions ) {
|
48 |
+
|
49 |
+
// Check
|
50 |
+
if ( count( $extensions ) > 0 ) {
|
51 |
+
|
52 |
+
// Loop
|
53 |
+
foreach ( $extensions as $extension ) {
|
54 |
+
|
55 |
+
// Setup new Product
|
56 |
+
$product = new DLM_Product( $extension );
|
57 |
+
|
58 |
+
// Setup plugin actions and filters
|
59 |
+
add_action( 'pre_set_site_transient_update_plugins', array( $product, 'check_for_updates' ) );
|
60 |
+
add_filter( 'plugins_api', array( $product, 'plugins_api' ), 10, 3 );
|
61 |
+
|
62 |
+
// Add product to products property
|
63 |
+
$this->products[ $extension ] = $product;
|
64 |
+
}
|
65 |
+
|
66 |
+
}
|
67 |
+
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Get products
|
72 |
+
*
|
73 |
+
* @return array<DLM_Product>
|
74 |
+
*/
|
75 |
+
public function get_products() {
|
76 |
+
return $this->products;
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Handle errors from the API
|
82 |
+
*
|
83 |
+
* @param array $errors
|
84 |
+
*/
|
85 |
+
/*
|
86 |
+
public function handle_errors( $errors ) {
|
87 |
+
|
88 |
+
if ( ! empty( $errors['no_key'] ) ) {
|
89 |
+
$this->add_error( sprintf( 'A licence key for %s could not be found. Maybe you forgot to enter a licence key when setting up %s.', esc_html( $this->plugin_data['Name'] ), esc_html( $this->plugin_data['Name'] ) ) );
|
90 |
+
} elseif ( ! empty( $errors['invalid_request'] ) ) {
|
91 |
+
$this->add_error( 'Invalid update request' );
|
92 |
+
} elseif ( ! empty( $errors['invalid_key'] ) ) {
|
93 |
+
$this->add_error( $errors['invalid_key'], 'invalid_key' );
|
94 |
+
} elseif ( ! empty( $errors['no_activation'] ) ) {
|
95 |
+
|
96 |
+
// Deactivate license
|
97 |
+
RP4WP_Updater_Key_API::deactivate( array(
|
98 |
+
'api_product_id' => $this->plugin_slug,
|
99 |
+
'licence_key' => $this->api_key,
|
100 |
+
) );
|
101 |
+
|
102 |
+
$this->add_error( $errors['no_activation'] );
|
103 |
+
}
|
104 |
+
|
105 |
+
}
|
106 |
+
*/
|
107 |
+
}
|
includes/product/class-dlm-product.php
ADDED
@@ -0,0 +1,346 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class DLM_Product
|
5 |
+
* The base class for all Download Monitor Extensions
|
6 |
+
*/
|
7 |
+
class DLM_Product {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* The store URL
|
11 |
+
*/
|
12 |
+
const STORE_URL = 'https://www.download-monitor.com/?wc-api=';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Activation endpoint
|
16 |
+
*/
|
17 |
+
const ENDPOINT_ACTIVATION = 'wp_plugin_licencing_activation_api';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Update endpoint
|
21 |
+
*/
|
22 |
+
const ENDPOINT_UPDATE = 'wp_plugin_licencing_update_api';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @var String
|
26 |
+
*/
|
27 |
+
private $product_id;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var String
|
31 |
+
*/
|
32 |
+
private $plugin_name;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @var DLM_Product_License
|
36 |
+
*/
|
37 |
+
private $license = null;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Constructor
|
41 |
+
*
|
42 |
+
* @param String $product_id
|
43 |
+
*/
|
44 |
+
function __construct( $product_id ) {
|
45 |
+
$this->product_id = $product_id;
|
46 |
+
|
47 |
+
// The plugin file name
|
48 |
+
$this->plugin_name = $this->product_id . '/' . $this->product_id . '.php';
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @return String
|
53 |
+
*/
|
54 |
+
public function get_product_id() {
|
55 |
+
return $this->product_id;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @param String $product_id
|
60 |
+
*/
|
61 |
+
public function set_product_id( $product_id ) {
|
62 |
+
$this->product_id = $product_id;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @return String
|
67 |
+
*/
|
68 |
+
public function get_plugin_name() {
|
69 |
+
return $this->plugin_name;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @param String $plugin_name
|
74 |
+
*/
|
75 |
+
public function set_plugin_name( $plugin_name ) {
|
76 |
+
$this->plugin_name = $plugin_name;
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Get the license, license will be automatically loaded if not set yet.
|
81 |
+
*
|
82 |
+
* @return DLM_Product_License
|
83 |
+
*/
|
84 |
+
public function get_license() {
|
85 |
+
if ( null === $this->license ) {
|
86 |
+
$this->license = new DLM_Product_License( $this->product_id );
|
87 |
+
}
|
88 |
+
|
89 |
+
return $this->license;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Set the license
|
94 |
+
*
|
95 |
+
* @param DLM_Product_License $license
|
96 |
+
*/
|
97 |
+
public function set_license( $license ) {
|
98 |
+
$this->license = $license;
|
99 |
+
$this->license->store();
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Attempt to activate a plugin licence
|
104 |
+
*
|
105 |
+
* @return String
|
106 |
+
*/
|
107 |
+
public function activate() {
|
108 |
+
|
109 |
+
// Get License
|
110 |
+
$license = $this->get_license();
|
111 |
+
|
112 |
+
try {
|
113 |
+
|
114 |
+
// Check License key
|
115 |
+
if ( '' === $license->get_key() ) {
|
116 |
+
throw new Exception( 'Please enter your license key.' );
|
117 |
+
}
|
118 |
+
|
119 |
+
// Check license email
|
120 |
+
if ( '' === $license->get_email() ) {
|
121 |
+
throw new Exception( 'Please enter the email address associated with your license.' );
|
122 |
+
}
|
123 |
+
|
124 |
+
// Do activate request
|
125 |
+
$request = wp_remote_get( self::STORE_URL . self::ENDPOINT_ACTIVATION . '&' . http_build_query( array(
|
126 |
+
'email' => $license->get_email(),
|
127 |
+
'licence_key' => $license->get_key(),
|
128 |
+
'api_product_id' => $this->product_id,
|
129 |
+
'request' => 'activate',
|
130 |
+
'instance' => site_url()
|
131 |
+
), '', '&' ) );
|
132 |
+
|
133 |
+
// Check request
|
134 |
+
if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
|
135 |
+
throw new Exception( 'Connection failed to the Licence Key API server. Try again later.' );
|
136 |
+
}
|
137 |
+
|
138 |
+
// Get activation result
|
139 |
+
$activate_results = json_decode( wp_remote_retrieve_body( $request ), true );
|
140 |
+
|
141 |
+
// Check if response is correct
|
142 |
+
if ( ! empty( $activate_results['activated'] ) ) {
|
143 |
+
|
144 |
+
// Set local activation status to true
|
145 |
+
$license->set_status( 'active' );
|
146 |
+
$this->set_license( $license );
|
147 |
+
|
148 |
+
// Return Message
|
149 |
+
return array( 'result' => 'success', 'message' => __( 'License successfully activated.', 'download-monitor' ) );
|
150 |
+
|
151 |
+
} elseif ( $activate_results === false ) {
|
152 |
+
throw new Exception( 'Connection failed to the Licence Key API server. Try again later.' );
|
153 |
+
} elseif ( isset( $activate_results['error_code'] ) ) {
|
154 |
+
throw new Exception( $activate_results['error'] );
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
} catch ( Exception $e ) {
|
159 |
+
|
160 |
+
// Set local activation status to false
|
161 |
+
$license->set_status( 'inactivate' );
|
162 |
+
$this->set_license( $license );
|
163 |
+
|
164 |
+
// Return error message
|
165 |
+
return array( 'result' => 'failed', 'message' => $e->getMessage() );
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Attempt to deactivate a licence
|
171 |
+
*/
|
172 |
+
public function deactivate() {
|
173 |
+
|
174 |
+
// Get License
|
175 |
+
$license = $this->get_license();
|
176 |
+
|
177 |
+
try {
|
178 |
+
|
179 |
+
// Check License key
|
180 |
+
if ( '' === $license->get_key() ) {
|
181 |
+
throw new Exception( "Can't deactivate license without a license key." );
|
182 |
+
}
|
183 |
+
|
184 |
+
// The Request
|
185 |
+
$request = wp_remote_get( self::STORE_URL . self::ENDPOINT_ACTIVATION . '&' . http_build_query( array(
|
186 |
+
'api_product_id' => $this->product_id,
|
187 |
+
'licence_key' => $license->get_key(),
|
188 |
+
'request' => 'deactivate',
|
189 |
+
'instance' => site_url(),
|
190 |
+
), '', '&' ) );
|
191 |
+
|
192 |
+
// Check request
|
193 |
+
if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
|
194 |
+
throw new Exception( 'Connection failed to the Licence Key API server. Try again later.' );
|
195 |
+
}
|
196 |
+
|
197 |
+
// Get result
|
198 |
+
$result = json_decode( wp_remote_retrieve_body( $request ), true );
|
199 |
+
|
200 |
+
/** @todo check result * */
|
201 |
+
|
202 |
+
// Set new license status
|
203 |
+
$license->set_status( 'inactive' );
|
204 |
+
$this->set_license( $license );
|
205 |
+
|
206 |
+
return array( 'result' => 'success' );
|
207 |
+
|
208 |
+
} catch ( Exception $e ) {
|
209 |
+
|
210 |
+
// Return error message
|
211 |
+
return array( 'result' => 'failed', 'message' => $e->getMessage() );
|
212 |
+
}
|
213 |
+
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Check for plugin updates
|
218 |
+
*
|
219 |
+
* @var $check_for_updates_data
|
220 |
+
*/
|
221 |
+
public function check_for_updates( $check_for_updates_data ) {
|
222 |
+
|
223 |
+
// Get license
|
224 |
+
$license = $this->get_license();
|
225 |
+
|
226 |
+
// Check if checked is set
|
227 |
+
if ( empty( $check_for_updates_data->checked ) ) {
|
228 |
+
return $check_for_updates_data;
|
229 |
+
}
|
230 |
+
|
231 |
+
// Only check for data if license is activated
|
232 |
+
if ( true !== $license->is_active() ) {
|
233 |
+
return $check_for_updates_data;
|
234 |
+
}
|
235 |
+
|
236 |
+
// Get current version
|
237 |
+
$current_ver = $check_for_updates_data->checked[ $this->plugin_name ];
|
238 |
+
|
239 |
+
// The request
|
240 |
+
$request = wp_remote_get( self::STORE_URL . self::ENDPOINT_UPDATE . '&' . http_build_query( array(
|
241 |
+
'request' => 'pluginupdatecheck',
|
242 |
+
'plugin_name' => $this->plugin_name,
|
243 |
+
'version' => $current_ver,
|
244 |
+
'api_product_id' => $this->product_id,
|
245 |
+
'licence_key' => $license->get_key(),
|
246 |
+
'email' => $license->get_email(),
|
247 |
+
'instance' => site_url()
|
248 |
+
), '', '&' ) );
|
249 |
+
|
250 |
+
// Check if request is correct
|
251 |
+
if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
|
252 |
+
return $check_for_updates_data;
|
253 |
+
}
|
254 |
+
|
255 |
+
// Check for a plugin update
|
256 |
+
$response = maybe_unserialize( wp_remote_retrieve_body( $request ) );
|
257 |
+
|
258 |
+
// $response must be an object
|
259 |
+
if ( ! is_object( $response ) ) {
|
260 |
+
return $check_for_updates_data;
|
261 |
+
}
|
262 |
+
|
263 |
+
if ( isset( $response->errors ) ) {
|
264 |
+
// $this->handle_errors( $response->errors );
|
265 |
+
/** @todo handle errors */
|
266 |
+
return $check_for_updates_data;
|
267 |
+
}
|
268 |
+
|
269 |
+
// Set version variables
|
270 |
+
if ( is_object( $response ) && false !== $response && isset( $response->new_version ) ) {
|
271 |
+
|
272 |
+
// Check if there's a new version
|
273 |
+
if ( version_compare( $response->new_version, $current_ver, '>' ) ) {
|
274 |
+
$check_for_updates_data->response[ $this->plugin_name ] = $response;
|
275 |
+
}
|
276 |
+
|
277 |
+
}
|
278 |
+
|
279 |
+
return $check_for_updates_data;
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Plugins API
|
284 |
+
*
|
285 |
+
* @param bool $false
|
286 |
+
* @param string $action
|
287 |
+
* @param array $args
|
288 |
+
*
|
289 |
+
* @return mixed
|
290 |
+
*/
|
291 |
+
public function plugins_api( $false, $action, $args ) {
|
292 |
+
|
293 |
+
// License
|
294 |
+
$license = $this->get_license();
|
295 |
+
|
296 |
+
// Only take over plugin info screen if license is activated
|
297 |
+
if ( true !== $license->is_active() ) {
|
298 |
+
return $false;
|
299 |
+
}
|
300 |
+
|
301 |
+
// Check if this request if for this product
|
302 |
+
if ( ! isset( $args->slug ) || ( $args->slug !== $this->plugin_name ) ) {
|
303 |
+
return $false;
|
304 |
+
}
|
305 |
+
|
306 |
+
// Get the current version
|
307 |
+
$plugin_info = get_site_transient( 'update_plugins' );
|
308 |
+
$current_ver = isset( $plugin_info->checked[ $this->plugin_name ] ) ? $plugin_info->checked[ $this->plugin_name ] : '';
|
309 |
+
|
310 |
+
$request = wp_remote_get( self::STORE_URL . self::ENDPOINT_UPDATE . '&' . http_build_query( array(
|
311 |
+
'request' => 'plugininformation',
|
312 |
+
'plugin_name' => $this->plugin_name,
|
313 |
+
'version' => $current_ver,
|
314 |
+
'api_product_id' => $this->product_id,
|
315 |
+
'licence_key' => $license->get_key(),
|
316 |
+
'email' => $license->get_email(),
|
317 |
+
'instance' => site_url()
|
318 |
+
), '', '&' ) );
|
319 |
+
|
320 |
+
// Check if request is correct
|
321 |
+
if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
|
322 |
+
return $false;
|
323 |
+
}
|
324 |
+
|
325 |
+
// Check for a plugin update
|
326 |
+
$response = maybe_unserialize( wp_remote_retrieve_body( $request ) );
|
327 |
+
|
328 |
+
// $response must be an object
|
329 |
+
if ( ! is_object( $response ) ) {
|
330 |
+
return $false;
|
331 |
+
}
|
332 |
+
|
333 |
+
// Handle errors
|
334 |
+
if ( isset( $response->errors ) ) {
|
335 |
+
/** @todo handle errors */
|
336 |
+
//$this->handle_errors( $response->errors );
|
337 |
+
return $false;
|
338 |
+
}
|
339 |
+
|
340 |
+
// If everything is okay return the $response
|
341 |
+
if ( isset( $response ) && is_object( $response ) && false !== $response ) {
|
342 |
+
return $response;
|
343 |
+
}
|
344 |
+
}
|
345 |
+
|
346 |
+
}
|
includes/widgets/class-dlm-widget-downloads.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* DLM_Widget_Downloads class.
|
@@ -40,13 +42,15 @@ class DLM_Widget_Downloads extends WP_Widget {
|
|
40 |
*
|
41 |
* @see WP_Widget
|
42 |
* @access public
|
|
|
43 |
* @param array $args
|
44 |
* @param array $instance
|
|
|
45 |
* @return void
|
46 |
*/
|
47 |
function widget( $args, $instance ) {
|
48 |
-
global $download_monitor;
|
49 |
|
|
|
50 |
extract( $args );
|
51 |
|
52 |
$title = isset( $instance['title'] ) ? apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) : __( 'Featured Downloads', 'download-monitor' );
|
@@ -57,35 +61,35 @@ class DLM_Widget_Downloads extends WP_Widget {
|
|
57 |
$featured = isset( $instance['featured'] ) ? $instance['featured'] : 'no';
|
58 |
$members_only = isset( $instance['members_only'] ) ? $instance['members_only'] : 'no';
|
59 |
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
$args['meta_key'] = '_download_count';
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
|
90 |
$r = new WP_Query( $args );
|
91 |
|
@@ -93,17 +97,21 @@ class DLM_Widget_Downloads extends WP_Widget {
|
|
93 |
|
94 |
echo $before_widget;
|
95 |
|
96 |
-
if ( $title )
|
97 |
echo $before_title . $title . $after_title;
|
|
|
98 |
|
99 |
echo apply_filters( 'dlm_widget_downloads_list_start', '<ul class="dlm-downloads">' );
|
100 |
|
101 |
-
|
|
|
|
|
|
|
102 |
$r->the_post();
|
103 |
|
104 |
echo apply_filters( 'dlm_widget_downloads_list_item_start', '<li>' );
|
105 |
|
106 |
-
$
|
107 |
|
108 |
echo apply_filters( 'dlm_widget_downloads_list_item_end', '</li>' );
|
109 |
}
|
@@ -119,8 +127,10 @@ class DLM_Widget_Downloads extends WP_Widget {
|
|
119 |
*
|
120 |
* @see WP_Widget->update
|
121 |
* @access public
|
|
|
122 |
* @param array $new_instance
|
123 |
* @param array $old_instance
|
|
|
124 |
* @return array
|
125 |
*/
|
126 |
function update( $new_instance, $old_instance ) {
|
@@ -141,12 +151,14 @@ class DLM_Widget_Downloads extends WP_Widget {
|
|
141 |
*
|
142 |
* @see WP_Widget->form
|
143 |
* @access public
|
|
|
144 |
* @param array $instance
|
|
|
145 |
* @return void
|
146 |
*/
|
147 |
function form( $instance ) {
|
148 |
$title = isset( $instance['title'] ) ? $instance['title'] : __( 'Featured Downloads', 'download-monitor' );
|
149 |
-
$posts_per_page = isset( $instance['posts_per_page'] ) ? absint( $instance['posts_per_page']
|
150 |
$format = isset( $instance['format'] ) ? sanitize_title( $instance['format'] ) : '';
|
151 |
$orderby = isset( $instance['orderby'] ) ? $instance['orderby'] : 'title';
|
152 |
$order = isset( $instance['order'] ) ? $instance['order'] : 'ASC';
|
@@ -154,43 +166,71 @@ class DLM_Widget_Downloads extends WP_Widget {
|
|
154 |
$members_only = isset( $instance['members_only'] ) ? $instance['members_only'] : 'no';
|
155 |
?>
|
156 |
<p>
|
157 |
-
<label
|
158 |
-
|
|
|
|
|
|
|
159 |
</p>
|
160 |
<p>
|
161 |
-
<label
|
162 |
-
|
|
|
|
|
|
|
163 |
</p>
|
164 |
<p>
|
165 |
-
<label
|
166 |
-
|
|
|
|
|
|
|
|
|
167 |
</p>
|
168 |
<p>
|
169 |
-
<label
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
<option
|
174 |
-
|
175 |
-
<option
|
176 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
</select>
|
178 |
</p>
|
179 |
<p>
|
180 |
-
<label
|
181 |
-
|
182 |
-
|
183 |
-
|
|
|
|
|
|
|
|
|
184 |
</select>
|
185 |
</p>
|
186 |
<p>
|
187 |
-
<input id="<?php echo esc_attr( $this->get_field_id( 'featured' ) ); ?>"
|
188 |
-
|
|
|
|
|
|
|
189 |
</p>
|
190 |
<p>
|
191 |
-
<input id="<?php echo esc_attr( $this->get_field_id( 'members_only' ) ); ?>"
|
192 |
-
|
|
|
|
|
|
|
193 |
</p>
|
194 |
-
|
195 |
}
|
196 |
}
|
1 |
<?php
|
2 |
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
|
7 |
/**
|
8 |
* DLM_Widget_Downloads class.
|
42 |
*
|
43 |
* @see WP_Widget
|
44 |
* @access public
|
45 |
+
*
|
46 |
* @param array $args
|
47 |
* @param array $instance
|
48 |
+
*
|
49 |
* @return void
|
50 |
*/
|
51 |
function widget( $args, $instance ) {
|
|
|
52 |
|
53 |
+
// Extract the arguments
|
54 |
extract( $args );
|
55 |
|
56 |
$title = isset( $instance['title'] ) ? apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) : __( 'Featured Downloads', 'download-monitor' );
|
61 |
$featured = isset( $instance['featured'] ) ? $instance['featured'] : 'no';
|
62 |
$members_only = isset( $instance['members_only'] ) ? $instance['members_only'] : 'no';
|
63 |
|
64 |
+
$args = array(
|
65 |
+
'post_status' => 'publish',
|
66 |
+
'post_type' => 'dlm_download',
|
67 |
+
'no_found_rows' => 1,
|
68 |
+
'posts_per_page' => $posts_per_page,
|
69 |
+
'orderby' => $orderby,
|
70 |
+
'order' => $order,
|
71 |
+
'meta_query' => array(),
|
72 |
+
'tax_query' => array()
|
73 |
+
);
|
74 |
+
|
75 |
+
if ( $orderby == 'download_count' ) {
|
76 |
+
$args['orderby'] = 'meta_value_num';
|
77 |
$args['meta_key'] = '_download_count';
|
78 |
+
}
|
79 |
+
|
80 |
+
if ( $featured == 'yes' ) {
|
81 |
+
$args['meta_query'][] = array(
|
82 |
+
'key' => '_featured',
|
83 |
+
'value' => 'yes'
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
if ( $members_only == 'yes' ) {
|
88 |
+
$args['meta_query'][] = array(
|
89 |
+
'key' => '_members_only',
|
90 |
+
'value' => 'yes'
|
91 |
+
);
|
92 |
+
}
|
93 |
|
94 |
$r = new WP_Query( $args );
|
95 |
|
97 |
|
98 |
echo $before_widget;
|
99 |
|
100 |
+
if ( $title ) {
|
101 |
echo $before_title . $title . $after_title;
|
102 |
+
}
|
103 |
|
104 |
echo apply_filters( 'dlm_widget_downloads_list_start', '<ul class="dlm-downloads">' );
|
105 |
|
106 |
+
// Template handler
|
107 |
+
$template_handler = new DLM_Template_Handler();
|
108 |
+
|
109 |
+
while ( $r->have_posts() ) {
|
110 |
$r->the_post();
|
111 |
|
112 |
echo apply_filters( 'dlm_widget_downloads_list_item_start', '<li>' );
|
113 |
|
114 |
+
$template_handler->get_template_part( 'content-download', $format );
|
115 |
|
116 |
echo apply_filters( 'dlm_widget_downloads_list_item_end', '</li>' );
|
117 |
}
|
127 |
*
|
128 |
* @see WP_Widget->update
|
129 |
* @access public
|
130 |
+
*
|
131 |
* @param array $new_instance
|
132 |
* @param array $old_instance
|
133 |
+
*
|
134 |
* @return array
|
135 |
*/
|
136 |
function update( $new_instance, $old_instance ) {
|
151 |
*
|
152 |
* @see WP_Widget->form
|
153 |
* @access public
|
154 |
+
*
|
155 |
* @param array $instance
|
156 |
+
*
|
157 |
* @return void
|
158 |
*/
|
159 |
function form( $instance ) {
|
160 |
$title = isset( $instance['title'] ) ? $instance['title'] : __( 'Featured Downloads', 'download-monitor' );
|
161 |
+
$posts_per_page = isset( $instance['posts_per_page'] ) ? absint( $instance['posts_per_page'] ) : 10;
|
162 |
$format = isset( $instance['format'] ) ? sanitize_title( $instance['format'] ) : '';
|
163 |
$orderby = isset( $instance['orderby'] ) ? $instance['orderby'] : 'title';
|
164 |
$order = isset( $instance['order'] ) ? $instance['order'] : 'ASC';
|
166 |
$members_only = isset( $instance['members_only'] ) ? $instance['members_only'] : 'no';
|
167 |
?>
|
168 |
<p>
|
169 |
+
<label
|
170 |
+
for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'download-monitor' ); ?></label>
|
171 |
+
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"
|
172 |
+
name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text"
|
173 |
+
value="<?php echo esc_attr( $title ); ?>"/>
|
174 |
</p>
|
175 |
<p>
|
176 |
+
<label
|
177 |
+
for="<?php echo $this->get_field_id( 'posts_per_page' ); ?>"><?php _e( 'Limit:', 'download-monitor' ); ?></label>
|
178 |
+
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'posts_per_page' ) ); ?>"
|
179 |
+
name="<?php echo esc_attr( $this->get_field_name( 'posts_per_page' ) ); ?>" type="text"
|
180 |
+
value="<?php echo esc_attr( $posts_per_page ); ?>" size="3"/>
|
181 |
</p>
|
182 |
<p>
|
183 |
+
<label
|
184 |
+
for="<?php echo $this->get_field_id( 'format' ); ?>"><?php _e( 'Output template:', 'download-monitor' ); ?></label>
|
185 |
+
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'format' ) ); ?>"
|
186 |
+
name="<?php echo esc_attr( $this->get_field_name( 'format' ) ); ?>" type="text"
|
187 |
+
value="<?php echo esc_attr( $format ); ?>"
|
188 |
+
placeholder="<?php _e( 'Default template', 'download-monitor' ); ?>"/>
|
189 |
</p>
|
190 |
<p>
|
191 |
+
<label
|
192 |
+
for="<?php echo $this->get_field_id( 'orderby' ); ?>"><?php _e( 'Order by:', 'download-monitor' ); ?></label>
|
193 |
+
<select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'orderby' ) ); ?>"
|
194 |
+
name="<?php echo esc_attr( $this->get_field_name( 'orderby' ) ); ?>" type="text">
|
195 |
+
<option
|
196 |
+
value="title" <?php selected( $orderby, 'title' ); ?>><?php _e( 'Title', 'download-monitor' ); ?></option>
|
197 |
+
<option
|
198 |
+
value="rand" <?php selected( $orderby, 'rand' ); ?>><?php _e( 'Random', 'download-monitor' ); ?></option>
|
199 |
+
<option
|
200 |
+
value="ID" <?php selected( $orderby, 'ID' ); ?>><?php _e( 'ID', 'download-monitor' ); ?></option>
|
201 |
+
<option
|
202 |
+
value="date" <?php selected( $orderby, 'date' ); ?>><?php _e( 'Date added', 'download-monitor' ); ?></option>
|
203 |
+
<option
|
204 |
+
value="modified" <?php selected( $orderby, 'modified' ); ?>><?php _e( 'Date modified', 'download-monitor' ); ?></option>
|
205 |
+
<option
|
206 |
+
value="download_count" <?php selected( $orderby, 'download_count' ); ?>><?php _e( 'Download count', 'download-monitor' ); ?></option>
|
207 |
</select>
|
208 |
</p>
|
209 |
<p>
|
210 |
+
<label
|
211 |
+
for="<?php echo $this->get_field_id( 'order' ); ?>"><?php _e( 'Order:', 'download-monitor' ); ?></label>
|
212 |
+
<select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'order' ) ); ?>"
|
213 |
+
name="<?php echo esc_attr( $this->get_field_name( 'order' ) ); ?>" type="text">
|
214 |
+
<option
|
215 |
+
value="ASC" <?php selected( $order, 'ASC' ); ?>><?php _e( 'ASC', 'download-monitor' ); ?></option>
|
216 |
+
<option
|
217 |
+
value="DESC" <?php selected( $order, 'DESC' ); ?>><?php _e( 'DESC', 'download-monitor' ); ?></option>
|
218 |
</select>
|
219 |
</p>
|
220 |
<p>
|
221 |
+
<input id="<?php echo esc_attr( $this->get_field_id( 'featured' ) ); ?>"
|
222 |
+
name="<?php echo esc_attr( $this->get_field_name( 'featured' ) ); ?>"
|
223 |
+
type="checkbox" <?php checked( $featured, 'yes' ); ?> />
|
224 |
+
<label
|
225 |
+
for="<?php echo $this->get_field_id( 'featured' ); ?>"><?php _e( 'Show only featured downloads', 'download-monitor' ); ?></label>
|
226 |
</p>
|
227 |
<p>
|
228 |
+
<input id="<?php echo esc_attr( $this->get_field_id( 'members_only' ) ); ?>"
|
229 |
+
name="<?php echo esc_attr( $this->get_field_name( 'members_only' ) ); ?>"
|
230 |
+
type="checkbox" <?php checked( $members_only, 'yes' ); ?> />
|
231 |
+
<label
|
232 |
+
for="<?php echo $this->get_field_id( 'members_only' ); ?>"><?php _e( 'Show only members only downloads', 'download-monitor' ); ?></label>
|
233 |
</p>
|
234 |
+
<?php
|
235 |
}
|
236 |
}
|
includes/widgets/class-dlm-widget-manager.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
} // Exit if accessed directly
|
6 |
+
|
7 |
+
class DLM_Widget_Manager {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Setup the actions
|
11 |
+
*/
|
12 |
+
public function setup() {
|
13 |
+
add_action( 'widgets_init', array( $this, 'register_widgets' ) );
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Register the widgets
|
18 |
+
*/
|
19 |
+
public function register_widgets() {
|
20 |
+
register_widget( 'DLM_Widget_Downloads' );
|
21 |
+
}
|
22 |
+
|
23 |
+
}
|
languages/download-monitor-de_DE.mo
CHANGED
Binary file
|
languages/download-monitor-de_DE.po
CHANGED
@@ -6,14 +6,16 @@ msgstr ""
|
|
6 |
"Project-Id-Version: Download Monitor\n"
|
7 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/download-monitor\n"
|
8 |
"POT-Creation-Date: 2014-06-28 19:28:54+00:00\n"
|
9 |
-
"PO-Revision-Date: 2014-
|
10 |
-
"Last-Translator:
|
11 |
-
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/
|
|
|
12 |
"MIME-Version: 1.0\n"
|
13 |
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
"Content-Transfer-Encoding: 8bit\n"
|
15 |
"Language: de_DE\n"
|
16 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
|
17 |
|
18 |
#: download-monitor.php:92 includes/admin/class-dlm-admin.php:281
|
19 |
msgid "Settings"
|
@@ -21,7 +23,7 @@ msgstr "Einstellungen"
|
|
21 |
|
22 |
#: download-monitor.php:93 includes/admin/class-dlm-admin.php:284
|
23 |
msgid "Add-ons"
|
24 |
-
msgstr ""
|
25 |
|
26 |
#: download-monitor.php:94
|
27 |
msgid "Docs"
|
@@ -34,7 +36,7 @@ msgstr "Kategorien"
|
|
34 |
|
35 |
#: download-monitor.php:244
|
36 |
msgid "Download Category"
|
37 |
-
msgstr "Download
|
38 |
|
39 |
#: download-monitor.php:245
|
40 |
msgid "Search Download Categories"
|
@@ -42,7 +44,7 @@ msgstr "Kategorien durchsuchen"
|
|
42 |
|
43 |
#: download-monitor.php:246
|
44 |
msgid "All Download Categories"
|
45 |
-
msgstr "Alle Download
|
46 |
|
47 |
#: download-monitor.php:247
|
48 |
msgid "Parent Download Category"
|
@@ -71,56 +73,56 @@ msgstr "Neuer Name für Download-Kategorie"
|
|
71 |
#: download-monitor.php:271 download-monitor.php:273
|
72 |
#: includes/admin/class-dlm-admin-cpt.php:173
|
73 |
msgid "Tags"
|
74 |
-
msgstr ""
|
75 |
|
76 |
#: download-monitor.php:274
|
77 |
msgid "Download Tag"
|
78 |
-
msgstr ""
|
79 |
|
80 |
#: download-monitor.php:275
|
81 |
msgid "Search Download Tags"
|
82 |
-
msgstr "Download
|
83 |
|
84 |
#: download-monitor.php:276
|
85 |
msgid "All Download Tags"
|
86 |
-
msgstr "Alle Download
|
87 |
|
88 |
#: download-monitor.php:277
|
89 |
msgid "Parent Download Tag"
|
90 |
-
msgstr "Übergeordneter Download
|
91 |
|
92 |
#: download-monitor.php:278
|
93 |
msgid "Parent Download Tag:"
|
94 |
-
msgstr "Übergeordneter Download
|
95 |
|
96 |
#: download-monitor.php:279
|
97 |
msgid "Edit Download Tag"
|
98 |
-
msgstr "Download
|
99 |
|
100 |
#: download-monitor.php:280
|
101 |
msgid "Update Download Tag"
|
102 |
-
msgstr "Download
|
103 |
|
104 |
#: download-monitor.php:281
|
105 |
msgid "Add New Download Tag"
|
106 |
-
msgstr "Download
|
107 |
|
108 |
#: download-monitor.php:282
|
109 |
msgid "New Download Tag Name"
|
110 |
-
msgstr "Neuer Name für Download
|
111 |
|
112 |
#: download-monitor.php:303
|
113 |
msgid "All Downloads"
|
114 |
-
msgstr ""
|
115 |
|
116 |
#: download-monitor.php:304
|
117 |
msgid "Downloads"
|
118 |
-
msgstr ""
|
119 |
|
120 |
#: download-monitor.php:305 includes/admin/class-dlm-admin-dashboard.php:69
|
121 |
#: includes/admin/class-dlm-logging-list-table.php:123
|
122 |
msgid "Download"
|
123 |
-
msgstr ""
|
124 |
|
125 |
#: download-monitor.php:306
|
126 |
msgid "Add New"
|
@@ -140,7 +142,7 @@ msgstr "Download bearbeiten"
|
|
140 |
|
141 |
#: download-monitor.php:310
|
142 |
msgid "New Download"
|
143 |
-
msgstr "
|
144 |
|
145 |
#: download-monitor.php:311 download-monitor.php:312
|
146 |
msgid "View Download"
|
@@ -169,7 +171,7 @@ msgstr "Hier können sie die Downloads für ihre Seite verwalten"
|
|
169 |
#: includes/admin/class-dlm-addons.php:50
|
170 |
#: includes/admin/class-dlm-admin.php:284
|
171 |
msgid "Download Monitor Add-ons"
|
172 |
-
msgstr ""
|
173 |
|
174 |
#: includes/admin/class-dlm-admin-cpt.php:64
|
175 |
msgid "Select a category"
|
@@ -194,7 +196,7 @@ msgstr "Sonderfeld gelöscht."
|
|
194 |
|
195 |
#: includes/admin/class-dlm-admin-cpt.php:144
|
196 |
msgid "Download restored to revision from %s"
|
197 |
-
msgstr "Download
|
198 |
|
199 |
#: includes/admin/class-dlm-admin-cpt.php:145
|
200 |
msgid "Download published."
|
@@ -214,11 +216,11 @@ msgstr "Download geplant für: <strong>%1$s</strong>."
|
|
214 |
|
215 |
#: includes/admin/class-dlm-admin-cpt.php:149
|
216 |
msgid "M j, Y @ G:i"
|
217 |
-
msgstr ""
|
218 |
|
219 |
#: includes/admin/class-dlm-admin-cpt.php:150
|
220 |
msgid "Download draft updated."
|
221 |
-
msgstr "Download
|
222 |
|
223 |
#: includes/admin/class-dlm-admin-cpt.php:167
|
224 |
msgid "Image"
|
@@ -232,7 +234,7 @@ msgstr "Titel"
|
|
232 |
#: includes/admin/class-dlm-admin-cpt.php:169
|
233 |
#: includes/widgets/class-dlm-widget-downloads.php:173
|
234 |
msgid "ID"
|
235 |
-
msgstr ""
|
236 |
|
237 |
#: includes/admin/class-dlm-admin-cpt.php:170
|
238 |
#: includes/admin/class-dlm-logging-list-table.php:124
|
@@ -243,7 +245,7 @@ msgstr "Datei"
|
|
243 |
#: includes/admin/class-dlm-admin-insert.php:231
|
244 |
#: includes/admin/html-downloadable-file-version.php:16
|
245 |
msgid "Version"
|
246 |
-
msgstr ""
|
247 |
|
248 |
#: includes/admin/class-dlm-admin-cpt.php:174
|
249 |
#: includes/admin/class-dlm-admin-dashboard.php:70
|
@@ -254,7 +256,7 @@ msgstr "Download-Anzahl"
|
|
254 |
|
255 |
#: includes/admin/class-dlm-admin-cpt.php:175
|
256 |
msgid "Featured"
|
257 |
-
msgstr "
|
258 |
|
259 |
#: includes/admin/class-dlm-admin-cpt.php:176
|
260 |
#: includes/admin/class-dlm-admin-writepanels.php:63
|
@@ -263,7 +265,7 @@ msgstr "Nur für Mitglieder"
|
|
263 |
|
264 |
#: includes/admin/class-dlm-admin-cpt.php:177
|
265 |
msgid "Redirect only"
|
266 |
-
msgstr ""
|
267 |
|
268 |
#: includes/admin/class-dlm-admin-cpt.php:178
|
269 |
msgid "Date posted"
|
@@ -273,7 +275,7 @@ msgstr "Veröffentlichungs-Datum"
|
|
273 |
#: includes/admin/class-dlm-admin-cpt.php:220
|
274 |
#: includes/admin/class-dlm-admin-cpt.php:228
|
275 |
msgid "Yes"
|
276 |
-
msgstr ""
|
277 |
|
278 |
#: includes/admin/class-dlm-admin-dashboard.php:21
|
279 |
msgid "Popular Downloads"
|
@@ -325,9 +327,12 @@ msgstr "Name der Vorlage"
|
|
325 |
#: includes/admin/class-dlm-admin-insert.php:199
|
326 |
msgid ""
|
327 |
"Leaving this blank will use the default <code>content-download.php</code> "
|
328 |
-
"template file. If you enter, for example, <code>image</code>, the
|
329 |
-
">content-download-image.php</code> template will be used instead."
|
330 |
-
msgstr "
|
|
|
|
|
|
|
331 |
|
332 |
#: includes/admin/class-dlm-admin-insert.php:214
|
333 |
msgid "Drop file here"
|
@@ -336,7 +341,7 @@ msgstr "Datei hier ablegen"
|
|
336 |
#: includes/admin/class-dlm-admin-insert.php:215
|
337 |
msgctxt "Drop file here *or* select file"
|
338 |
msgid "or"
|
339 |
-
msgstr ""
|
340 |
|
341 |
#: includes/admin/class-dlm-admin-insert.php:216
|
342 |
msgid "Select File"
|
@@ -348,7 +353,7 @@ msgstr "URL selbst eintragen"
|
|
348 |
|
349 |
#: includes/admin/class-dlm-admin-insert.php:223
|
350 |
msgid "Download URL"
|
351 |
-
msgstr "URL
|
352 |
|
353 |
#: includes/admin/class-dlm-admin-insert.php:224
|
354 |
msgid "Required URL"
|
@@ -372,7 +377,7 @@ msgstr "Download speichern"
|
|
372 |
|
373 |
#: includes/admin/class-dlm-admin-insert.php:291
|
374 |
msgid "Allowed Files"
|
375 |
-
msgstr ""
|
376 |
|
377 |
#: includes/admin/class-dlm-admin-insert.php:341
|
378 |
msgid "Please wait..."
|
@@ -389,55 +394,61 @@ msgstr "Keine Dateien gefunden"
|
|
389 |
|
390 |
#: includes/admin/class-dlm-admin-writepanels.php:29
|
391 |
msgid "Download Options"
|
392 |
-
msgstr "Download
|
393 |
|
394 |
#: includes/admin/class-dlm-admin-writepanels.php:30
|
395 |
msgid "Downloadable Files/Versions"
|
396 |
-
msgstr ""
|
397 |
|
398 |
#: includes/admin/class-dlm-admin-writepanels.php:35
|
399 |
msgid "Short Description"
|
400 |
-
msgstr "
|
401 |
|
402 |
#: includes/admin/class-dlm-admin-writepanels.php:57
|
403 |
msgid "Featured download"
|
404 |
-
msgstr "
|
405 |
|
406 |
#: includes/admin/class-dlm-admin-writepanels.php:58
|
407 |
msgid "Mark this download as featured. Used by shortcodes and widgets."
|
408 |
-
msgstr "
|
|
|
|
|
409 |
|
410 |
#: includes/admin/class-dlm-admin-writepanels.php:64
|
411 |
msgid ""
|
412 |
"Only logged in users will be able to access the file via a download link if "
|
413 |
"this is enabled."
|
414 |
-
msgstr "
|
|
|
|
|
415 |
|
416 |
#: includes/admin/class-dlm-admin-writepanels.php:69
|
417 |
msgid "Redirect to file"
|
418 |
-
msgstr ""
|
419 |
|
420 |
#: includes/admin/class-dlm-admin-writepanels.php:70
|
421 |
msgid ""
|
422 |
-
"Don't force download. If the <code>dlm_upload</code> folder is protected you"
|
423 |
-
"
|
424 |
msgstr ""
|
|
|
|
|
425 |
|
426 |
#: includes/admin/class-dlm-admin-writepanels.php:94
|
427 |
msgid "Add file"
|
428 |
-
msgstr ""
|
429 |
|
430 |
#: includes/admin/class-dlm-admin-writepanels.php:95
|
431 |
msgid "Close all"
|
432 |
-
msgstr "Alle
|
433 |
|
434 |
#: includes/admin/class-dlm-admin-writepanels.php:95
|
435 |
msgid "Expand all"
|
436 |
-
msgstr "
|
437 |
|
438 |
#: includes/admin/class-dlm-admin-writepanels.php:228
|
439 |
msgid "Are you sure you want to delete this file?"
|
440 |
-
msgstr "Sind
|
441 |
|
442 |
#: includes/admin/class-dlm-admin.php:95
|
443 |
msgid "General"
|
@@ -451,77 +462,88 @@ msgstr "Standard-Vorlage"
|
|
451 |
msgid ""
|
452 |
"Choose which template is used for <code>[download]</code> shortcodes by "
|
453 |
"default (this can be overridden by the <code>format</code> argument)."
|
454 |
-
msgstr "
|
|
|
|
|
455 |
|
456 |
#: includes/admin/class-dlm-admin.php:104
|
457 |
msgid "Default - Title and count"
|
458 |
-
msgstr ""
|
459 |
|
460 |
#: includes/admin/class-dlm-admin.php:105
|
461 |
msgid "Button - CSS styled button showing title and count"
|
462 |
-
msgstr ""
|
463 |
|
464 |
#: includes/admin/class-dlm-admin.php:106
|
465 |
msgid "Box - Box showing thumbnail, title, count, filename and filesize."
|
466 |
msgstr ""
|
|
|
|
|
467 |
|
468 |
#: includes/admin/class-dlm-admin.php:107
|
469 |
msgid "Filename - Filename and download count"
|
470 |
-
msgstr ""
|
471 |
|
472 |
#: includes/admin/class-dlm-admin.php:108
|
473 |
msgid "Title - Shows download title only"
|
474 |
-
msgstr ""
|
475 |
|
476 |
#: includes/admin/class-dlm-admin.php:109
|
477 |
msgid "Version list - Lists all download versions in an unordered list"
|
478 |
msgstr ""
|
|
|
479 |
|
480 |
#: includes/admin/class-dlm-admin.php:110
|
481 |
msgid "Custom template"
|
482 |
-
msgstr ""
|
483 |
|
484 |
#: includes/admin/class-dlm-admin.php:116
|
485 |
msgid "Custom Template"
|
486 |
-
msgstr ""
|
487 |
|
488 |
#: includes/admin/class-dlm-admin.php:117
|
489 |
msgid ""
|
490 |
"Leaving this blank will use the default <code>content-download.php</code> "
|
491 |
-
"template file. If you enter, for example, <code>image</code>, the
|
492 |
-
">content-download-image.php</code> template will be used instead. You
|
493 |
-
"add custom templates inside your theme folder."
|
494 |
msgstr ""
|
|
|
|
|
|
|
|
|
495 |
|
496 |
#: includes/admin/class-dlm-admin.php:122
|
497 |
msgid "MD5 hashes"
|
498 |
-
msgstr ""
|
499 |
|
500 |
#: includes/admin/class-dlm-admin.php:123
|
501 |
msgid "Generate MD5 hash for uploaded files"
|
502 |
-
msgstr ""
|
503 |
|
504 |
#: includes/admin/class-dlm-admin.php:130
|
505 |
msgid "SHA1 hashes"
|
506 |
-
msgstr ""
|
507 |
|
508 |
#: includes/admin/class-dlm-admin.php:131
|
509 |
msgid "Generate SHA1 hash for uploaded files"
|
510 |
-
msgstr ""
|
511 |
|
512 |
#: includes/admin/class-dlm-admin.php:138
|
513 |
msgid "CRC32B hashes"
|
514 |
-
msgstr ""
|
515 |
|
516 |
#: includes/admin/class-dlm-admin.php:139
|
517 |
msgid "Generate CRC32B hash for uploaded files"
|
518 |
-
msgstr ""
|
519 |
|
520 |
#: includes/admin/class-dlm-admin.php:140
|
521 |
msgid ""
|
522 |
"Hashes can optionally be output via shortcodes, but may cause performance "
|
523 |
"issues with large files."
|
524 |
msgstr ""
|
|
|
|
|
525 |
|
526 |
#: includes/admin/class-dlm-admin.php:146
|
527 |
msgid "Endpoint"
|
@@ -533,72 +555,81 @@ msgstr "Download"
|
|
533 |
|
534 |
#: includes/admin/class-dlm-admin.php:152
|
535 |
msgid "Download Endpoint"
|
536 |
-
msgstr "Download
|
537 |
|
538 |
#: includes/admin/class-dlm-admin.php:153
|
539 |
msgid ""
|
540 |
-
"Define what endpoint should be used for download links. By default this will"
|
541 |
-
"
|
542 |
-
msgstr "
|
|
|
543 |
|
544 |
#: includes/admin/class-dlm-admin.php:158
|
545 |
msgid "Endpoint Value"
|
546 |
-
msgstr "Endpunkt
|
547 |
|
548 |
#: includes/admin/class-dlm-admin.php:159
|
549 |
msgid ""
|
550 |
"Define what unique value should be used on the end of your endpoint to "
|
551 |
-
"identify the downloadable file. e.g. ID would give a link like "
|
|
|
|
|
|
|
|
|
552 |
"<code>%s</code>"
|
553 |
-
msgstr "Bestimme welche Werte am Ende ihres Endpunkts stehen sollen zur Identifikation ihrer Download-Datei. Zum Beispiel: ID ergibt den folgenden Link <code>%s</code>"
|
554 |
|
555 |
#: includes/admin/class-dlm-admin.php:162
|
556 |
#: includes/admin/class-dlm-admin.php:484
|
557 |
msgid "Download ID"
|
558 |
-
msgstr ""
|
559 |
|
560 |
#: includes/admin/class-dlm-admin.php:163
|
561 |
msgid "Download slug"
|
562 |
-
msgstr "Download
|
563 |
|
564 |
#: includes/admin/class-dlm-admin.php:169
|
565 |
msgid "X-Accel-Redirect / X-Sendfile"
|
566 |
-
msgstr ""
|
567 |
|
568 |
#: includes/admin/class-dlm-admin.php:170
|
569 |
#: includes/admin/class-dlm-admin.php:178
|
570 |
#: includes/admin/class-dlm-admin.php:189
|
571 |
msgid "Enable"
|
572 |
-
msgstr "
|
573 |
|
574 |
#: includes/admin/class-dlm-admin.php:171
|
575 |
msgid ""
|
576 |
-
"If supported, <code>X-Accel-Redirect</code> / <code>X-Sendfile</code> can be"
|
577 |
-
"
|
578 |
-
"
|
579 |
-
msgstr "
|
|
|
|
|
|
|
580 |
|
581 |
#: includes/admin/class-dlm-admin.php:177
|
582 |
msgid "Prevent hotlinking"
|
583 |
-
msgstr ""
|
584 |
|
585 |
#: includes/admin/class-dlm-admin.php:179
|
586 |
msgid ""
|
587 |
"If enabled, the download handler will check the PHP referer to see if it "
|
588 |
"originated from your site and if not, redirect them to the homepage."
|
589 |
msgstr ""
|
|
|
|
|
590 |
|
591 |
#: includes/admin/class-dlm-admin.php:185
|
592 |
msgid "Logging"
|
593 |
-
msgstr "Log
|
594 |
|
595 |
#: includes/admin/class-dlm-admin.php:191
|
596 |
msgid "Download Log"
|
597 |
-
msgstr ""
|
598 |
|
599 |
#: includes/admin/class-dlm-admin.php:192
|
600 |
msgid "Log download attempts, IP addresses and more."
|
601 |
-
msgstr "Download
|
602 |
|
603 |
#: includes/admin/class-dlm-admin.php:198
|
604 |
msgid "Blacklist IPs"
|
@@ -608,19 +639,21 @@ msgstr "IPs sperren (Blacklist)"
|
|
608 |
msgid ""
|
609 |
"List IP Addresses to blacklist, 1 per line. Use <code>*</code> for a "
|
610 |
"wildcard."
|
611 |
-
msgstr "
|
|
|
|
|
612 |
|
613 |
#: includes/admin/class-dlm-admin.php:206
|
614 |
msgid "Blacklist user agents"
|
615 |
-
msgstr "
|
616 |
|
617 |
#: includes/admin/class-dlm-admin.php:207
|
618 |
msgid "List browser user agents to blacklist, 1 per line."
|
619 |
-
msgstr "
|
620 |
|
621 |
#: includes/admin/class-dlm-admin.php:279
|
622 |
msgid "Logs"
|
623 |
-
msgstr ""
|
624 |
|
625 |
#: includes/admin/class-dlm-admin.php:323
|
626 |
msgid "Settings successfully saved"
|
@@ -640,7 +673,7 @@ msgstr "CSV exportieren"
|
|
640 |
|
641 |
#: includes/admin/class-dlm-admin.php:434
|
642 |
msgid "Delete Logs"
|
643 |
-
msgstr ""
|
644 |
|
645 |
#: includes/admin/class-dlm-admin.php:485
|
646 |
msgid "Version ID"
|
@@ -648,28 +681,28 @@ msgstr "Versions-ID"
|
|
648 |
|
649 |
#: includes/admin/class-dlm-admin.php:486
|
650 |
msgid "Filename"
|
651 |
-
msgstr ""
|
652 |
|
653 |
#: includes/admin/class-dlm-admin.php:487
|
654 |
msgid "User ID"
|
655 |
-
msgstr ""
|
656 |
|
657 |
#: includes/admin/class-dlm-admin.php:488
|
658 |
msgid "User Login"
|
659 |
-
msgstr ""
|
660 |
|
661 |
#: includes/admin/class-dlm-admin.php:489
|
662 |
msgid "User Email"
|
663 |
-
msgstr ""
|
664 |
|
665 |
#: includes/admin/class-dlm-admin.php:490
|
666 |
msgid "User IP"
|
667 |
-
msgstr ""
|
668 |
|
669 |
#: includes/admin/class-dlm-admin.php:491
|
670 |
#: includes/admin/class-dlm-logging-list-table.php:127
|
671 |
msgid "User Agent"
|
672 |
-
msgstr ""
|
673 |
|
674 |
#: includes/admin/class-dlm-admin.php:492
|
675 |
#: includes/admin/class-dlm-logging-list-table.php:128
|
@@ -678,7 +711,7 @@ msgstr "Datum"
|
|
678 |
|
679 |
#: includes/admin/class-dlm-admin.php:493
|
680 |
msgid "Status"
|
681 |
-
msgstr ""
|
682 |
|
683 |
#: includes/admin/class-dlm-logging-list-table.php:50
|
684 |
msgid "Download Complete"
|
@@ -694,7 +727,7 @@ msgstr "Download #%d (existiert nicht mehr)"
|
|
694 |
|
695 |
#: includes/admin/class-dlm-logging-list-table.php:72
|
696 |
msgid "v%s"
|
697 |
-
msgstr ""
|
698 |
|
699 |
#: includes/admin/class-dlm-logging-list-table.php:92
|
700 |
msgid "Non-member"
|
@@ -710,51 +743,51 @@ msgstr "IP Addresse"
|
|
710 |
|
711 |
#: includes/admin/class-dlm-logging-list-table.php:142
|
712 |
msgid "Any status"
|
713 |
-
msgstr ""
|
714 |
|
715 |
#: includes/admin/class-dlm-logging-list-table.php:143
|
716 |
msgid "Failed"
|
717 |
-
msgstr ""
|
718 |
|
719 |
#: includes/admin/class-dlm-logging-list-table.php:144
|
720 |
msgid "Redirected"
|
721 |
-
msgstr ""
|
722 |
|
723 |
#: includes/admin/class-dlm-logging-list-table.php:145
|
724 |
msgid "Completed"
|
725 |
-
msgstr ""
|
726 |
|
727 |
#: includes/admin/class-dlm-logging-list-table.php:164
|
728 |
msgid "Show all dates"
|
729 |
-
msgstr ""
|
730 |
|
731 |
#: includes/admin/class-dlm-logging-list-table.php:177
|
732 |
msgid "%1$s %2$d"
|
733 |
-
msgstr ""
|
734 |
|
735 |
#: includes/admin/class-dlm-logging-list-table.php:185
|
736 |
msgid "25 per page"
|
737 |
-
msgstr ""
|
738 |
|
739 |
#: includes/admin/class-dlm-logging-list-table.php:186
|
740 |
msgid "50 per page"
|
741 |
-
msgstr ""
|
742 |
|
743 |
#: includes/admin/class-dlm-logging-list-table.php:187
|
744 |
msgid "100 per page"
|
745 |
-
msgstr ""
|
746 |
|
747 |
#: includes/admin/class-dlm-logging-list-table.php:188
|
748 |
msgid "200 per page"
|
749 |
-
msgstr ""
|
750 |
|
751 |
#: includes/admin/class-dlm-logging-list-table.php:189
|
752 |
msgid "Show All"
|
753 |
-
msgstr ""
|
754 |
|
755 |
#: includes/admin/class-dlm-logging-list-table.php:193
|
756 |
msgid "Filter"
|
757 |
-
msgstr ""
|
758 |
|
759 |
#: includes/admin/html-downloadable-file-version.php:3
|
760 |
msgid "Remove"
|
@@ -766,7 +799,7 @@ msgstr "Zum Umschalten klicken"
|
|
766 |
|
767 |
#: includes/admin/html-downloadable-file-version.php:5
|
768 |
msgid "Version <span class=\"version\">%s</span> (%s)"
|
769 |
-
msgstr ""
|
770 |
|
771 |
#: includes/admin/html-downloadable-file-version.php:5
|
772 |
#: includes/admin/html-downloadable-file-version.php:17
|
@@ -776,30 +809,32 @@ msgstr "nicht verfügbar"
|
|
776 |
#: includes/admin/html-downloadable-file-version.php:5
|
777 |
msgid "Downloaded %s time"
|
778 |
msgid_plural "Downloaded %s times"
|
779 |
-
msgstr[0] "
|
780 |
msgstr[1] "%s-mal heruntergeladen"
|
781 |
|
782 |
#: includes/admin/html-downloadable-file-version.php:21
|
783 |
msgid "File URL(s)"
|
784 |
-
msgstr "Datei
|
785 |
|
786 |
#: includes/admin/html-downloadable-file-version.php:22
|
787 |
msgid ""
|
788 |
"Enter one file path/URL per line - multiple files will be used as mirrors "
|
789 |
"(chosen at random)."
|
790 |
-
msgstr "
|
|
|
|
|
791 |
|
792 |
#: includes/admin/html-downloadable-file-version.php:27
|
793 |
msgid "Upload file"
|
794 |
-
msgstr "Datei
|
795 |
|
796 |
#: includes/admin/html-downloadable-file-version.php:29
|
797 |
msgid "Choose a file"
|
798 |
-
msgstr ""
|
799 |
|
800 |
#: includes/admin/html-downloadable-file-version.php:30
|
801 |
msgid "Insert file URL"
|
802 |
-
msgstr ""
|
803 |
|
804 |
#: includes/admin/html-downloadable-file-version.php:34
|
805 |
msgid "Browse for file"
|
@@ -811,15 +846,15 @@ msgstr "Datei-Erstellungsdatum"
|
|
811 |
|
812 |
#: includes/admin/html-downloadable-file-version.php:59
|
813 |
msgid "h"
|
814 |
-
msgstr ""
|
815 |
|
816 |
#: includes/admin/html-downloadable-file-version.php:59
|
817 |
msgid "m"
|
818 |
-
msgstr ""
|
819 |
|
820 |
#: includes/class-dlm-download-handler.php:140
|
821 |
msgid "Password Required"
|
822 |
-
msgstr ""
|
823 |
|
824 |
#: includes/class-dlm-download-handler.php:150
|
825 |
msgid "Download does not exist."
|
@@ -848,7 +883,9 @@ msgstr "Dateipfad nicht definiert."
|
|
848 |
|
849 |
#: includes/class-dlm-download-handler.php:194
|
850 |
msgid "You do not have permission to access this download."
|
851 |
-
msgstr "
|
|
|
|
|
852 |
|
853 |
#: includes/class-dlm-download-handler.php:212
|
854 |
#: includes/class-dlm-download-handler.php:228
|
@@ -859,7 +896,7 @@ msgstr "Weitergeleitet zu Datei"
|
|
859 |
|
860 |
#: includes/class-dlm-download-handler.php:281
|
861 |
msgid "Redirected to remote file."
|
862 |
-
msgstr "Weitergeleitet zu Datei auf anderem Server"
|
863 |
|
864 |
#: includes/class-dlm-download-handler.php:286
|
865 |
msgid "File not found"
|
@@ -871,7 +908,7 @@ msgstr "Datei nicht gefunden."
|
|
871 |
|
872 |
#: includes/class-dlm-shortcodes.php:93 includes/class-dlm-shortcodes.php:125
|
873 |
msgid "Download not found"
|
874 |
-
msgstr "Download
|
875 |
|
876 |
#: includes/widgets/class-dlm-widget-downloads.php:27
|
877 |
msgid "Display a list of your downloads."
|
@@ -892,7 +929,7 @@ msgstr "Titel:"
|
|
892 |
|
893 |
#: includes/widgets/class-dlm-widget-downloads.php:161
|
894 |
msgid "Limit:"
|
895 |
-
msgstr ""
|
896 |
|
897 |
#: includes/widgets/class-dlm-widget-downloads.php:165
|
898 |
msgid "Output template:"
|
@@ -936,7 +973,7 @@ msgstr "Nur hervorgehobene Downloads anzeigen"
|
|
936 |
|
937 |
#: includes/widgets/class-dlm-widget-downloads.php:192
|
938 |
msgid "Show only members only downloads"
|
939 |
-
msgstr "Downloads
|
940 |
|
941 |
#: templates/content-download-box.php:12
|
942 |
#: templates/content-download-filename.php:9 templates/content-download.php:9
|
@@ -949,7 +986,7 @@ msgstr[1] "%d Downloads"
|
|
949 |
#: templates/content-download-filename.php:8
|
950 |
#: templates/content-download-title.php:8 templates/content-download.php:8
|
951 |
msgid "Version %s"
|
952 |
-
msgstr ""
|
953 |
|
954 |
#: templates/content-download-box.php:21
|
955 |
msgid "Download File"
|
@@ -957,7 +994,7 @@ msgstr "Datei herunterladen"
|
|
957 |
|
958 |
#: templates/content-download-button.php:9
|
959 |
msgid "Download “%s”"
|
960 |
-
msgstr ""
|
961 |
|
962 |
#: templates/content-download-button.php:10
|
963 |
#: templates/content-download-version-list.php:17
|
@@ -968,11 +1005,11 @@ msgstr[1] "%d-mal heruntergeladen"
|
|
968 |
|
969 |
#. Plugin Name of the plugin/theme
|
970 |
msgid "Download Monitor"
|
971 |
-
msgstr ""
|
972 |
|
973 |
#. Plugin URI of the plugin/theme
|
974 |
msgid "http://mikejolley.com/projects/download-monitor/"
|
975 |
-
msgstr ""
|
976 |
|
977 |
#. Description of the plugin/theme
|
978 |
msgid ""
|
@@ -980,11 +1017,14 @@ msgid ""
|
|
980 |
"outputting download links and file information on your WordPress powered "
|
981 |
"site."
|
982 |
msgstr ""
|
|
|
|
|
|
|
983 |
|
984 |
#. Author of the plugin/theme
|
985 |
msgid "Mike Jolley"
|
986 |
-
msgstr ""
|
987 |
|
988 |
#. Author URI of the plugin/theme
|
989 |
msgid "http://mikejolley.com"
|
990 |
-
msgstr ""
|
6 |
"Project-Id-Version: Download Monitor\n"
|
7 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/download-monitor\n"
|
8 |
"POT-Creation-Date: 2014-06-28 19:28:54+00:00\n"
|
9 |
+
"PO-Revision-Date: 2014-09-24 20:11+0100\n"
|
10 |
+
"Last-Translator: Sebastian Herrmann <sebastian@herrherrmann.net>\n"
|
11 |
+
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/"
|
12 |
+
"download-monitor/language/de_DE/)\n"
|
13 |
"MIME-Version: 1.0\n"
|
14 |
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
"Content-Transfer-Encoding: 8bit\n"
|
16 |
"Language: de_DE\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
+
"X-Generator: Poedit 1.6.9\n"
|
19 |
|
20 |
#: download-monitor.php:92 includes/admin/class-dlm-admin.php:281
|
21 |
msgid "Settings"
|
23 |
|
24 |
#: download-monitor.php:93 includes/admin/class-dlm-admin.php:284
|
25 |
msgid "Add-ons"
|
26 |
+
msgstr "Add-ons"
|
27 |
|
28 |
#: download-monitor.php:94
|
29 |
msgid "Docs"
|
36 |
|
37 |
#: download-monitor.php:244
|
38 |
msgid "Download Category"
|
39 |
+
msgstr "Download-Kategorie"
|
40 |
|
41 |
#: download-monitor.php:245
|
42 |
msgid "Search Download Categories"
|
44 |
|
45 |
#: download-monitor.php:246
|
46 |
msgid "All Download Categories"
|
47 |
+
msgstr "Alle Download-Kategorien"
|
48 |
|
49 |
#: download-monitor.php:247
|
50 |
msgid "Parent Download Category"
|
73 |
#: download-monitor.php:271 download-monitor.php:273
|
74 |
#: includes/admin/class-dlm-admin-cpt.php:173
|
75 |
msgid "Tags"
|
76 |
+
msgstr "Tags"
|
77 |
|
78 |
#: download-monitor.php:274
|
79 |
msgid "Download Tag"
|
80 |
+
msgstr "Download-Tag"
|
81 |
|
82 |
#: download-monitor.php:275
|
83 |
msgid "Search Download Tags"
|
84 |
+
msgstr "Download-Tags durchsuchen"
|
85 |
|
86 |
#: download-monitor.php:276
|
87 |
msgid "All Download Tags"
|
88 |
+
msgstr "Alle Download-Tags"
|
89 |
|
90 |
#: download-monitor.php:277
|
91 |
msgid "Parent Download Tag"
|
92 |
+
msgstr "Übergeordneter Download-Tag"
|
93 |
|
94 |
#: download-monitor.php:278
|
95 |
msgid "Parent Download Tag:"
|
96 |
+
msgstr "Übergeordneter Download-Tag:"
|
97 |
|
98 |
#: download-monitor.php:279
|
99 |
msgid "Edit Download Tag"
|
100 |
+
msgstr "Download-Tag bearbeiten"
|
101 |
|
102 |
#: download-monitor.php:280
|
103 |
msgid "Update Download Tag"
|
104 |
+
msgstr "Download-Tag aktualisieren"
|
105 |
|
106 |
#: download-monitor.php:281
|
107 |
msgid "Add New Download Tag"
|
108 |
+
msgstr "Download-Tag hinzufügen"
|
109 |
|
110 |
#: download-monitor.php:282
|
111 |
msgid "New Download Tag Name"
|
112 |
+
msgstr "Neuer Name für Download-Tag"
|
113 |
|
114 |
#: download-monitor.php:303
|
115 |
msgid "All Downloads"
|
116 |
+
msgstr "Alle Downloads"
|
117 |
|
118 |
#: download-monitor.php:304
|
119 |
msgid "Downloads"
|
120 |
+
msgstr "Downloads"
|
121 |
|
122 |
#: download-monitor.php:305 includes/admin/class-dlm-admin-dashboard.php:69
|
123 |
#: includes/admin/class-dlm-logging-list-table.php:123
|
124 |
msgid "Download"
|
125 |
+
msgstr "Download"
|
126 |
|
127 |
#: download-monitor.php:306
|
128 |
msgid "Add New"
|
142 |
|
143 |
#: download-monitor.php:310
|
144 |
msgid "New Download"
|
145 |
+
msgstr "Neuer Download"
|
146 |
|
147 |
#: download-monitor.php:311 download-monitor.php:312
|
148 |
msgid "View Download"
|
171 |
#: includes/admin/class-dlm-addons.php:50
|
172 |
#: includes/admin/class-dlm-admin.php:284
|
173 |
msgid "Download Monitor Add-ons"
|
174 |
+
msgstr "Download Monitor Add-ons"
|
175 |
|
176 |
#: includes/admin/class-dlm-admin-cpt.php:64
|
177 |
msgid "Select a category"
|
196 |
|
197 |
#: includes/admin/class-dlm-admin-cpt.php:144
|
198 |
msgid "Download restored to revision from %s"
|
199 |
+
msgstr "Download-Version von Datum %s wiederhergestellt."
|
200 |
|
201 |
#: includes/admin/class-dlm-admin-cpt.php:145
|
202 |
msgid "Download published."
|
216 |
|
217 |
#: includes/admin/class-dlm-admin-cpt.php:149
|
218 |
msgid "M j, Y @ G:i"
|
219 |
+
msgstr "j.m.Y @ G:i"
|
220 |
|
221 |
#: includes/admin/class-dlm-admin-cpt.php:150
|
222 |
msgid "Download draft updated."
|
223 |
+
msgstr "Download-Entwurf aktualisiert."
|
224 |
|
225 |
#: includes/admin/class-dlm-admin-cpt.php:167
|
226 |
msgid "Image"
|
234 |
#: includes/admin/class-dlm-admin-cpt.php:169
|
235 |
#: includes/widgets/class-dlm-widget-downloads.php:173
|
236 |
msgid "ID"
|
237 |
+
msgstr "ID"
|
238 |
|
239 |
#: includes/admin/class-dlm-admin-cpt.php:170
|
240 |
#: includes/admin/class-dlm-logging-list-table.php:124
|
245 |
#: includes/admin/class-dlm-admin-insert.php:231
|
246 |
#: includes/admin/html-downloadable-file-version.php:16
|
247 |
msgid "Version"
|
248 |
+
msgstr "Version"
|
249 |
|
250 |
#: includes/admin/class-dlm-admin-cpt.php:174
|
251 |
#: includes/admin/class-dlm-admin-dashboard.php:70
|
256 |
|
257 |
#: includes/admin/class-dlm-admin-cpt.php:175
|
258 |
msgid "Featured"
|
259 |
+
msgstr "Hervorgehoben"
|
260 |
|
261 |
#: includes/admin/class-dlm-admin-cpt.php:176
|
262 |
#: includes/admin/class-dlm-admin-writepanels.php:63
|
265 |
|
266 |
#: includes/admin/class-dlm-admin-cpt.php:177
|
267 |
msgid "Redirect only"
|
268 |
+
msgstr "Nur weiterleiten"
|
269 |
|
270 |
#: includes/admin/class-dlm-admin-cpt.php:178
|
271 |
msgid "Date posted"
|
275 |
#: includes/admin/class-dlm-admin-cpt.php:220
|
276 |
#: includes/admin/class-dlm-admin-cpt.php:228
|
277 |
msgid "Yes"
|
278 |
+
msgstr "Ja"
|
279 |
|
280 |
#: includes/admin/class-dlm-admin-dashboard.php:21
|
281 |
msgid "Popular Downloads"
|
327 |
#: includes/admin/class-dlm-admin-insert.php:199
|
328 |
msgid ""
|
329 |
"Leaving this blank will use the default <code>content-download.php</code> "
|
330 |
+
"template file. If you enter, for example, <code>image</code>, the "
|
331 |
+
"<code>content-download-image.php</code> template will be used instead."
|
332 |
+
msgstr ""
|
333 |
+
"Wenn Sie dieses Feld freilassen, wird die Vorlage <code>content-download."
|
334 |
+
"php</code> verwendet. Wenn Sie zum Beispiel <code>image</code> eingeben, "
|
335 |
+
"wird die Vorlage <code>content-download-image.php</code> verwendet."
|
336 |
|
337 |
#: includes/admin/class-dlm-admin-insert.php:214
|
338 |
msgid "Drop file here"
|
341 |
#: includes/admin/class-dlm-admin-insert.php:215
|
342 |
msgctxt "Drop file here *or* select file"
|
343 |
msgid "or"
|
344 |
+
msgstr "oder"
|
345 |
|
346 |
#: includes/admin/class-dlm-admin-insert.php:216
|
347 |
msgid "Select File"
|
353 |
|
354 |
#: includes/admin/class-dlm-admin-insert.php:223
|
355 |
msgid "Download URL"
|
356 |
+
msgstr "Download-URL"
|
357 |
|
358 |
#: includes/admin/class-dlm-admin-insert.php:224
|
359 |
msgid "Required URL"
|
377 |
|
378 |
#: includes/admin/class-dlm-admin-insert.php:291
|
379 |
msgid "Allowed Files"
|
380 |
+
msgstr "Erlaubte Dateitypen"
|
381 |
|
382 |
#: includes/admin/class-dlm-admin-insert.php:341
|
383 |
msgid "Please wait..."
|
394 |
|
395 |
#: includes/admin/class-dlm-admin-writepanels.php:29
|
396 |
msgid "Download Options"
|
397 |
+
msgstr "Download-Optionen"
|
398 |
|
399 |
#: includes/admin/class-dlm-admin-writepanels.php:30
|
400 |
msgid "Downloadable Files/Versions"
|
401 |
+
msgstr "Dateien/Versionen"
|
402 |
|
403 |
#: includes/admin/class-dlm-admin-writepanels.php:35
|
404 |
msgid "Short Description"
|
405 |
+
msgstr "Kurzbeschreibung"
|
406 |
|
407 |
#: includes/admin/class-dlm-admin-writepanels.php:57
|
408 |
msgid "Featured download"
|
409 |
+
msgstr "Hervorgehobener Download"
|
410 |
|
411 |
#: includes/admin/class-dlm-admin-writepanels.php:58
|
412 |
msgid "Mark this download as featured. Used by shortcodes and widgets."
|
413 |
+
msgstr ""
|
414 |
+
"Download als hervorgehoben markieren. Die Hervorhebung wird in shortcodes "
|
415 |
+
"und widgets verwendet."
|
416 |
|
417 |
#: includes/admin/class-dlm-admin-writepanels.php:64
|
418 |
msgid ""
|
419 |
"Only logged in users will be able to access the file via a download link if "
|
420 |
"this is enabled."
|
421 |
+
msgstr ""
|
422 |
+
"Nur angemeldete Benutzer haben Zugriff auf die Datei, wenn dies ausgewählt "
|
423 |
+
"ist."
|
424 |
|
425 |
#: includes/admin/class-dlm-admin-writepanels.php:69
|
426 |
msgid "Redirect to file"
|
427 |
+
msgstr "Zur Datei weiterleiten"
|
428 |
|
429 |
#: includes/admin/class-dlm-admin-writepanels.php:70
|
430 |
msgid ""
|
431 |
+
"Don't force download. If the <code>dlm_upload</code> folder is protected you "
|
432 |
+
"may need to move your file."
|
433 |
msgstr ""
|
434 |
+
"Download nicht erzwingen. Falls das Verzeichnis <code>dlm_upload</code> "
|
435 |
+
"geschützt ist, muss die Datei ggf. verschoben werden."
|
436 |
|
437 |
#: includes/admin/class-dlm-admin-writepanels.php:94
|
438 |
msgid "Add file"
|
439 |
+
msgstr "Download hinzufügen"
|
440 |
|
441 |
#: includes/admin/class-dlm-admin-writepanels.php:95
|
442 |
msgid "Close all"
|
443 |
+
msgstr "Alle minimieren"
|
444 |
|
445 |
#: includes/admin/class-dlm-admin-writepanels.php:95
|
446 |
msgid "Expand all"
|
447 |
+
msgstr "Alle expandieren"
|
448 |
|
449 |
#: includes/admin/class-dlm-admin-writepanels.php:228
|
450 |
msgid "Are you sure you want to delete this file?"
|
451 |
+
msgstr "Sind Sie sicher, dass Sie diese Datei löschen möchten?"
|
452 |
|
453 |
#: includes/admin/class-dlm-admin.php:95
|
454 |
msgid "General"
|
462 |
msgid ""
|
463 |
"Choose which template is used for <code>[download]</code> shortcodes by "
|
464 |
"default (this can be overridden by the <code>format</code> argument)."
|
465 |
+
msgstr ""
|
466 |
+
"Standard-Vorlage für <code>[download]</code> Shortcodes auswählen (kann mit "
|
467 |
+
"dem <code>format</code> Parameter überschrieben werden)."
|
468 |
|
469 |
#: includes/admin/class-dlm-admin.php:104
|
470 |
msgid "Default - Title and count"
|
471 |
+
msgstr "Default - Titel und Download-Anzahl."
|
472 |
|
473 |
#: includes/admin/class-dlm-admin.php:105
|
474 |
msgid "Button - CSS styled button showing title and count"
|
475 |
+
msgstr "Button - CSS-Button mit Titel und Download-Anzahl."
|
476 |
|
477 |
#: includes/admin/class-dlm-admin.php:106
|
478 |
msgid "Box - Box showing thumbnail, title, count, filename and filesize."
|
479 |
msgstr ""
|
480 |
+
"Box - Eine Box mit Vorschaubild, Titel, Download-Anzahl, Dateiname und -"
|
481 |
+
"größe."
|
482 |
|
483 |
#: includes/admin/class-dlm-admin.php:107
|
484 |
msgid "Filename - Filename and download count"
|
485 |
+
msgstr "Filename - Dateiname und Download-Anzahl."
|
486 |
|
487 |
#: includes/admin/class-dlm-admin.php:108
|
488 |
msgid "Title - Shows download title only"
|
489 |
+
msgstr "Title - Zeigt nur den Titel des Downloads."
|
490 |
|
491 |
#: includes/admin/class-dlm-admin.php:109
|
492 |
msgid "Version list - Lists all download versions in an unordered list"
|
493 |
msgstr ""
|
494 |
+
"Version list - Zeigt alle Download-Versionen in einer ungeordneten Liste."
|
495 |
|
496 |
#: includes/admin/class-dlm-admin.php:110
|
497 |
msgid "Custom template"
|
498 |
+
msgstr "Eigene Vorlage"
|
499 |
|
500 |
#: includes/admin/class-dlm-admin.php:116
|
501 |
msgid "Custom Template"
|
502 |
+
msgstr "Eigene Vorlage"
|
503 |
|
504 |
#: includes/admin/class-dlm-admin.php:117
|
505 |
msgid ""
|
506 |
"Leaving this blank will use the default <code>content-download.php</code> "
|
507 |
+
"template file. If you enter, for example, <code>image</code>, the "
|
508 |
+
"<code>content-download-image.php</code> template will be used instead. You "
|
509 |
+
"can add custom templates inside your theme folder."
|
510 |
msgstr ""
|
511 |
+
"Wenn Sie dieses Feld freilassen, wird die Vorlage <code>content-download."
|
512 |
+
"php</code> verwendet. Wenn Sie zum Beispiel <code>image</code> eingeben, "
|
513 |
+
"wird die Vorlage <code>content-download-image.php</code> verwendet. Eigene "
|
514 |
+
"Vorlagen können im Theme-Verzeichnis abgelegt werden."
|
515 |
|
516 |
#: includes/admin/class-dlm-admin.php:122
|
517 |
msgid "MD5 hashes"
|
518 |
+
msgstr "MD5-Hashwerte"
|
519 |
|
520 |
#: includes/admin/class-dlm-admin.php:123
|
521 |
msgid "Generate MD5 hash for uploaded files"
|
522 |
+
msgstr "MD5-Hash für hochgeladene Dateien erstellen"
|
523 |
|
524 |
#: includes/admin/class-dlm-admin.php:130
|
525 |
msgid "SHA1 hashes"
|
526 |
+
msgstr "SHA1-Hashwerte"
|
527 |
|
528 |
#: includes/admin/class-dlm-admin.php:131
|
529 |
msgid "Generate SHA1 hash for uploaded files"
|
530 |
+
msgstr "SHA1-Hash für hochgeladene Dateien erstellen"
|
531 |
|
532 |
#: includes/admin/class-dlm-admin.php:138
|
533 |
msgid "CRC32B hashes"
|
534 |
+
msgstr "CRC32B-Hashwerte"
|
535 |
|
536 |
#: includes/admin/class-dlm-admin.php:139
|
537 |
msgid "Generate CRC32B hash for uploaded files"
|
538 |
+
msgstr "CRC32B-Hash für hochgeladene Dateien erstellen"
|
539 |
|
540 |
#: includes/admin/class-dlm-admin.php:140
|
541 |
msgid ""
|
542 |
"Hashes can optionally be output via shortcodes, but may cause performance "
|
543 |
"issues with large files."
|
544 |
msgstr ""
|
545 |
+
"Hashwerte können auch über Shortcodes ausgegeben werden, dies kann bei "
|
546 |
+
"großen Dateien jedoch zu Performanceproblemen führen."
|
547 |
|
548 |
#: includes/admin/class-dlm-admin.php:146
|
549 |
msgid "Endpoint"
|
555 |
|
556 |
#: includes/admin/class-dlm-admin.php:152
|
557 |
msgid "Download Endpoint"
|
558 |
+
msgstr "Download-Endpunkt"
|
559 |
|
560 |
#: includes/admin/class-dlm-admin.php:153
|
561 |
msgid ""
|
562 |
+
"Define what endpoint should be used for download links. By default this will "
|
563 |
+
"be <code>%s</code>."
|
564 |
+
msgstr ""
|
565 |
+
"Bestimme den Endpunkt für Download-Links. Standardmäßig: <code>%s</code>."
|
566 |
|
567 |
#: includes/admin/class-dlm-admin.php:158
|
568 |
msgid "Endpoint Value"
|
569 |
+
msgstr "Endpunkt-Wert"
|
570 |
|
571 |
#: includes/admin/class-dlm-admin.php:159
|
572 |
msgid ""
|
573 |
"Define what unique value should be used on the end of your endpoint to "
|
574 |
+
"identify the downloadable file. e.g. ID would give a link like <code>%s</"
|
575 |
+
"code>"
|
576 |
+
msgstr ""
|
577 |
+
"Bestimme, welche Werte am Ende ihres Endpunkts zur Identifikation ihrer "
|
578 |
+
"Download-Datei stehen sollen. Zum Beispiel: ID ergibt den folgenden Link "
|
579 |
"<code>%s</code>"
|
|
|
580 |
|
581 |
#: includes/admin/class-dlm-admin.php:162
|
582 |
#: includes/admin/class-dlm-admin.php:484
|
583 |
msgid "Download ID"
|
584 |
+
msgstr "Download-ID"
|
585 |
|
586 |
#: includes/admin/class-dlm-admin.php:163
|
587 |
msgid "Download slug"
|
588 |
+
msgstr "Download-Slug"
|
589 |
|
590 |
#: includes/admin/class-dlm-admin.php:169
|
591 |
msgid "X-Accel-Redirect / X-Sendfile"
|
592 |
+
msgstr "X-Accel-Redirect / X-Sendfile"
|
593 |
|
594 |
#: includes/admin/class-dlm-admin.php:170
|
595 |
#: includes/admin/class-dlm-admin.php:178
|
596 |
#: includes/admin/class-dlm-admin.php:189
|
597 |
msgid "Enable"
|
598 |
+
msgstr "Aktivieren"
|
599 |
|
600 |
#: includes/admin/class-dlm-admin.php:171
|
601 |
msgid ""
|
602 |
+
"If supported, <code>X-Accel-Redirect</code> / <code>X-Sendfile</code> can be "
|
603 |
+
"used to serve downloads instead of PHP (server requires <code>mod_xsendfile</"
|
604 |
+
"code>)."
|
605 |
+
msgstr ""
|
606 |
+
"Falls unterstützt, können <code>X-Accel-Redirect</code> / <code>X-Sendfile</"
|
607 |
+
"code> genutzt werden, anstelle von PHP (Server benötigt <code>mod_xsendfile</"
|
608 |
+
"code>)."
|
609 |
|
610 |
#: includes/admin/class-dlm-admin.php:177
|
611 |
msgid "Prevent hotlinking"
|
612 |
+
msgstr "Querverweise verhindern"
|
613 |
|
614 |
#: includes/admin/class-dlm-admin.php:179
|
615 |
msgid ""
|
616 |
"If enabled, the download handler will check the PHP referer to see if it "
|
617 |
"originated from your site and if not, redirect them to the homepage."
|
618 |
msgstr ""
|
619 |
+
"Wenn dies aktiviert ist, leitet der Download-Handler alle Nutzeranfragen von "
|
620 |
+
"externen Seiten auf die Startseite um."
|
621 |
|
622 |
#: includes/admin/class-dlm-admin.php:185
|
623 |
msgid "Logging"
|
624 |
+
msgstr "Log-Aufzeichung"
|
625 |
|
626 |
#: includes/admin/class-dlm-admin.php:191
|
627 |
msgid "Download Log"
|
628 |
+
msgstr "Download-Log"
|
629 |
|
630 |
#: includes/admin/class-dlm-admin.php:192
|
631 |
msgid "Log download attempts, IP addresses and more."
|
632 |
+
msgstr "Download-Versuche, IP-Adressen und anderes aufzeichnen."
|
633 |
|
634 |
#: includes/admin/class-dlm-admin.php:198
|
635 |
msgid "Blacklist IPs"
|
639 |
msgid ""
|
640 |
"List IP Addresses to blacklist, 1 per line. Use <code>*</code> for a "
|
641 |
"wildcard."
|
642 |
+
msgstr ""
|
643 |
+
"IP-Adressen auf Blackliste setzen, 1 pro Zeile. Das Zeichen <code>*</code> "
|
644 |
+
"dient als Wildcard."
|
645 |
|
646 |
#: includes/admin/class-dlm-admin.php:206
|
647 |
msgid "Blacklist user agents"
|
648 |
+
msgstr "Benutzer-Umgebungen sperren"
|
649 |
|
650 |
#: includes/admin/class-dlm-admin.php:207
|
651 |
msgid "List browser user agents to blacklist, 1 per line."
|
652 |
+
msgstr "Benutzer-Umgebungen für Sperrung auflisten, einer pro Linie."
|
653 |
|
654 |
#: includes/admin/class-dlm-admin.php:279
|
655 |
msgid "Logs"
|
656 |
+
msgstr "Logs"
|
657 |
|
658 |
#: includes/admin/class-dlm-admin.php:323
|
659 |
msgid "Settings successfully saved"
|
673 |
|
674 |
#: includes/admin/class-dlm-admin.php:434
|
675 |
msgid "Delete Logs"
|
676 |
+
msgstr "Logs leeren"
|
677 |
|
678 |
#: includes/admin/class-dlm-admin.php:485
|
679 |
msgid "Version ID"
|
681 |
|
682 |
#: includes/admin/class-dlm-admin.php:486
|
683 |
msgid "Filename"
|
684 |
+
msgstr "Dateiname"
|
685 |
|
686 |
#: includes/admin/class-dlm-admin.php:487
|
687 |
msgid "User ID"
|
688 |
+
msgstr "Benutzer-ID"
|
689 |
|
690 |
#: includes/admin/class-dlm-admin.php:488
|
691 |
msgid "User Login"
|
692 |
+
msgstr "Benutzer-Login"
|
693 |
|
694 |
#: includes/admin/class-dlm-admin.php:489
|
695 |
msgid "User Email"
|
696 |
+
msgstr "Benutzer-E-Mail-Adresse"
|
697 |
|
698 |
#: includes/admin/class-dlm-admin.php:490
|
699 |
msgid "User IP"
|
700 |
+
msgstr "Benutzer-IP"
|
701 |
|
702 |
#: includes/admin/class-dlm-admin.php:491
|
703 |
#: includes/admin/class-dlm-logging-list-table.php:127
|
704 |
msgid "User Agent"
|
705 |
+
msgstr "Benutzer-Umgebung"
|
706 |
|
707 |
#: includes/admin/class-dlm-admin.php:492
|
708 |
#: includes/admin/class-dlm-logging-list-table.php:128
|
711 |
|
712 |
#: includes/admin/class-dlm-admin.php:493
|
713 |
msgid "Status"
|
714 |
+
msgstr "Status"
|
715 |
|
716 |
#: includes/admin/class-dlm-logging-list-table.php:50
|
717 |
msgid "Download Complete"
|
727 |
|
728 |
#: includes/admin/class-dlm-logging-list-table.php:72
|
729 |
msgid "v%s"
|
730 |
+
msgstr "v%s"
|
731 |
|
732 |
#: includes/admin/class-dlm-logging-list-table.php:92
|
733 |
msgid "Non-member"
|
743 |
|
744 |
#: includes/admin/class-dlm-logging-list-table.php:142
|
745 |
msgid "Any status"
|
746 |
+
msgstr "Jeder Status"
|
747 |
|
748 |
#: includes/admin/class-dlm-logging-list-table.php:143
|
749 |
msgid "Failed"
|
750 |
+
msgstr "Fehlgeschlagen"
|
751 |
|
752 |
#: includes/admin/class-dlm-logging-list-table.php:144
|
753 |
msgid "Redirected"
|
754 |
+
msgstr "Umgeleitet"
|
755 |
|
756 |
#: includes/admin/class-dlm-logging-list-table.php:145
|
757 |
msgid "Completed"
|
758 |
+
msgstr "Abgeschlossen"
|
759 |
|
760 |
#: includes/admin/class-dlm-logging-list-table.php:164
|
761 |
msgid "Show all dates"
|
762 |
+
msgstr "Alle Zeiträume zeigen"
|
763 |
|
764 |
#: includes/admin/class-dlm-logging-list-table.php:177
|
765 |
msgid "%1$s %2$d"
|
766 |
+
msgstr "%1$s %2$d"
|
767 |
|
768 |
#: includes/admin/class-dlm-logging-list-table.php:185
|
769 |
msgid "25 per page"
|
770 |
+
msgstr "25 pro Seite"
|
771 |
|
772 |
#: includes/admin/class-dlm-logging-list-table.php:186
|
773 |
msgid "50 per page"
|
774 |
+
msgstr "50 pro Seite"
|
775 |
|
776 |
#: includes/admin/class-dlm-logging-list-table.php:187
|
777 |
msgid "100 per page"
|
778 |
+
msgstr "100 pro Seite"
|
779 |
|
780 |
#: includes/admin/class-dlm-logging-list-table.php:188
|
781 |
msgid "200 per page"
|
782 |
+
msgstr "200 pro Seite"
|
783 |
|
784 |
#: includes/admin/class-dlm-logging-list-table.php:189
|
785 |
msgid "Show All"
|
786 |
+
msgstr "Alle zeigen"
|
787 |
|
788 |
#: includes/admin/class-dlm-logging-list-table.php:193
|
789 |
msgid "Filter"
|
790 |
+
msgstr "Filter"
|
791 |
|
792 |
#: includes/admin/html-downloadable-file-version.php:3
|
793 |
msgid "Remove"
|
799 |
|
800 |
#: includes/admin/html-downloadable-file-version.php:5
|
801 |
msgid "Version <span class=\"version\">%s</span> (%s)"
|
802 |
+
msgstr "Version <span class=\"version\">%s</span> (%s)"
|
803 |
|
804 |
#: includes/admin/html-downloadable-file-version.php:5
|
805 |
#: includes/admin/html-downloadable-file-version.php:17
|
809 |
#: includes/admin/html-downloadable-file-version.php:5
|
810 |
msgid "Downloaded %s time"
|
811 |
msgid_plural "Downloaded %s times"
|
812 |
+
msgstr[0] "Einmal heruntergeladen"
|
813 |
msgstr[1] "%s-mal heruntergeladen"
|
814 |
|
815 |
#: includes/admin/html-downloadable-file-version.php:21
|
816 |
msgid "File URL(s)"
|
817 |
+
msgstr "Datei-URL(s)"
|
818 |
|
819 |
#: includes/admin/html-downloadable-file-version.php:22
|
820 |
msgid ""
|
821 |
"Enter one file path/URL per line - multiple files will be used as mirrors "
|
822 |
"(chosen at random)."
|
823 |
+
msgstr ""
|
824 |
+
"Einen Pfad/URL pro Zeile eingeben - mehrere werden als Datei-Mirrors genutzt "
|
825 |
+
"(zufällig ausgewählt)."
|
826 |
|
827 |
#: includes/admin/html-downloadable-file-version.php:27
|
828 |
msgid "Upload file"
|
829 |
+
msgstr "Datei hochladen"
|
830 |
|
831 |
#: includes/admin/html-downloadable-file-version.php:29
|
832 |
msgid "Choose a file"
|
833 |
+
msgstr "Datei auswählen"
|
834 |
|
835 |
#: includes/admin/html-downloadable-file-version.php:30
|
836 |
msgid "Insert file URL"
|
837 |
+
msgstr "Datei-URL angeben"
|
838 |
|
839 |
#: includes/admin/html-downloadable-file-version.php:34
|
840 |
msgid "Browse for file"
|
846 |
|
847 |
#: includes/admin/html-downloadable-file-version.php:59
|
848 |
msgid "h"
|
849 |
+
msgstr "h"
|
850 |
|
851 |
#: includes/admin/html-downloadable-file-version.php:59
|
852 |
msgid "m"
|
853 |
+
msgstr "min"
|
854 |
|
855 |
#: includes/class-dlm-download-handler.php:140
|
856 |
msgid "Password Required"
|
857 |
+
msgstr "Passwort benötigt"
|
858 |
|
859 |
#: includes/class-dlm-download-handler.php:150
|
860 |
msgid "Download does not exist."
|
883 |
|
884 |
#: includes/class-dlm-download-handler.php:194
|
885 |
msgid "You do not have permission to access this download."
|
886 |
+
msgstr ""
|
887 |
+
"Sie besitzen nicht die nötige Berechtigung, um auf diesen Download "
|
888 |
+
"zuzugreifen."
|
889 |
|
890 |
#: includes/class-dlm-download-handler.php:212
|
891 |
#: includes/class-dlm-download-handler.php:228
|
896 |
|
897 |
#: includes/class-dlm-download-handler.php:281
|
898 |
msgid "Redirected to remote file."
|
899 |
+
msgstr "Weitergeleitet zu Datei auf anderem Server."
|
900 |
|
901 |
#: includes/class-dlm-download-handler.php:286
|
902 |
msgid "File not found"
|
908 |
|
909 |
#: includes/class-dlm-shortcodes.php:93 includes/class-dlm-shortcodes.php:125
|
910 |
msgid "Download not found"
|
911 |
+
msgstr "Download nicht gefunden."
|
912 |
|
913 |
#: includes/widgets/class-dlm-widget-downloads.php:27
|
914 |
msgid "Display a list of your downloads."
|
929 |
|
930 |
#: includes/widgets/class-dlm-widget-downloads.php:161
|
931 |
msgid "Limit:"
|
932 |
+
msgstr "Downloadlimit:"
|
933 |
|
934 |
#: includes/widgets/class-dlm-widget-downloads.php:165
|
935 |
msgid "Output template:"
|
973 |
|
974 |
#: includes/widgets/class-dlm-widget-downloads.php:192
|
975 |
msgid "Show only members only downloads"
|
976 |
+
msgstr "Nur Downloads für Mitglieder zeigen"
|
977 |
|
978 |
#: templates/content-download-box.php:12
|
979 |
#: templates/content-download-filename.php:9 templates/content-download.php:9
|
986 |
#: templates/content-download-filename.php:8
|
987 |
#: templates/content-download-title.php:8 templates/content-download.php:8
|
988 |
msgid "Version %s"
|
989 |
+
msgstr "Version %s"
|
990 |
|
991 |
#: templates/content-download-box.php:21
|
992 |
msgid "Download File"
|
994 |
|
995 |
#: templates/content-download-button.php:9
|
996 |
msgid "Download “%s”"
|
997 |
+
msgstr "Download “%s”"
|
998 |
|
999 |
#: templates/content-download-button.php:10
|
1000 |
#: templates/content-download-version-list.php:17
|
1005 |
|
1006 |
#. Plugin Name of the plugin/theme
|
1007 |
msgid "Download Monitor"
|
1008 |
+
msgstr "Download Monitor"
|
1009 |
|
1010 |
#. Plugin URI of the plugin/theme
|
1011 |
msgid "http://mikejolley.com/projects/download-monitor/"
|
1012 |
+
msgstr "http://mikejolley.com/projects/download-monitor/"
|
1013 |
|
1014 |
#. Description of the plugin/theme
|
1015 |
msgid ""
|
1017 |
"outputting download links and file information on your WordPress powered "
|
1018 |
"site."
|
1019 |
msgstr ""
|
1020 |
+
"Eine komplette Lösung für die Verwaltung von Downloads. Stellt ein "
|
1021 |
+
"Monitoring für die Downloads bereit und bietet die Möglichkeit, Download-"
|
1022 |
+
"Links und -Informationen auf der WordPress-Seite auszugeben."
|
1023 |
|
1024 |
#. Author of the plugin/theme
|
1025 |
msgid "Mike Jolley"
|
1026 |
+
msgstr "Mike Jolley"
|
1027 |
|
1028 |
#. Author URI of the plugin/theme
|
1029 |
msgid "http://mikejolley.com"
|
1030 |
+
msgstr "http://mikejolley.com"
|
package.json
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"name": "download-monitor",
|
3 |
-
"title": "Download Monitor",
|
4 |
-
"version": "",
|
5 |
-
"homepage": "",
|
6 |
-
"main": "Gruntfile.js",
|
7 |
-
"devDependencies": {
|
8 |
-
"grunt": "~0.4.4",
|
9 |
-
"grunt-contrib-uglify": "~0.4.0",
|
10 |
-
"grunt-contrib-less": "~0.11.0",
|
11 |
-
"grunt-contrib-cssmin": "~0.7.0",
|
12 |
-
"grunt-shell": "~0.6.4",
|
13 |
-
"grunt-contrib-watch": "~0.5.3"
|
14 |
-
},
|
15 |
-
"engines": {
|
16 |
-
"node": ">=0.8.0",
|
17 |
-
"npm": ">=1.1.0"
|
18 |
-
}
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== Download Monitor ===
|
2 |
-
Contributors: mikejolley
|
3 |
-
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=
|
4 |
Tags: download, downloads, monitor, hits, download monitor, tracking, admin, count, counter, files, versions, download count, logging
|
5 |
Requires at least: 3.8
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 1.
|
8 |
License: GPLv3
|
9 |
|
10 |
Download Monitor is a plugin for uploading and managing downloads, tracking downloads, and displaying links.
|
@@ -26,25 +26,25 @@ Download Monitor provides an interface for uploading and managing downloadable f
|
|
26 |
* Member only downloads.
|
27 |
* Customisable endpoints for showing pretty download links.
|
28 |
|
29 |
-
[Read more about Download Monitor](
|
30 |
|
31 |
= Documentation =
|
32 |
|
33 |
-
Documentation will be maintained on the [GitHub Wiki here](https://github.com/
|
34 |
|
35 |
-
=
|
36 |
|
37 |
-
|
38 |
|
39 |
= Contributing and reporting bugs =
|
40 |
|
41 |
-
You can contribute code to this plugin via GitHub: [https://github.com/
|
42 |
|
43 |
You can contribute localizations via Transifex [https://www.transifex.com/projects/p/download-monitor/](https://www.transifex.com/projects/p/download-monitor/)
|
44 |
|
45 |
= Support =
|
46 |
|
47 |
-
Use the WordPress.org forums for community support
|
48 |
|
49 |
If you want help with a customisation, hire a developer!
|
50 |
|
@@ -68,7 +68,7 @@ The manual installation method involves downloading the plugin and uploading it
|
|
68 |
|
69 |
= I used this before, so why is this version 1? =
|
70 |
|
71 |
-
Version 1.0.0 is a fresh start/complete rewrite of the legacy 3.0 version using modern best-practices such as custom post types and endpoints. Because of this, data from the legacy plugin won't work without migration using [the legacy importer](
|
72 |
|
73 |
Legacy versions can still be [found here](http://wordpress.org/plugins/download-monitor/developers/).
|
74 |
|
@@ -76,7 +76,7 @@ Legacy versions can still be [found here](http://wordpress.org/plugins/download-
|
|
76 |
|
77 |
The rewrite has trimmed the fat and only kept the best, most useful features. If something is missing, you can always code it yourself - the new system is very flexible and its easy to query files using [get_posts](http://codex.wordpress.org/Template_Tags/get_posts).
|
78 |
|
79 |
-
If you are missing the "Page Addon", this is now a separate plugin found here: [Download Monitor Page Addon](
|
80 |
|
81 |
= Can I upload .xxx filetype using the uploader? =
|
82 |
|
@@ -110,6 +110,26 @@ Admin hits are not counted, log out and try!
|
|
110 |
|
111 |
== Changelog ==
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
= 1.5.1 =
|
114 |
* Fallback for JSON_UNESCAPED_UNICODE to fix accented characters on < PHP 5.4.
|
115 |
* Changed default orderby for downloads shortcode to date, desc.
|
@@ -125,7 +145,7 @@ Admin hits are not counted, log out and try!
|
|
125 |
* Added Grunt.
|
126 |
* Added options to generate file hashes DISABLED BY DEFAULT as they can cause performance issues with large files.
|
127 |
|
128 |
-
= 1.4.4 =
|
129 |
* Use home_dir instead of site_dir - fixes hot-linking protections against own site (when not in root dir)
|
130 |
* Replace hardcoded WP_CONTENT_DIR and WP_CONTENT_URL with wp_upload_dir to work when UPLOADS and UPLOADS_URL constants are set.
|
131 |
* Added some filters for hotlink protection customisation.
|
@@ -143,7 +163,7 @@ Admin hits are not counted, log out and try!
|
|
143 |
* Disable remote file hash generation, but can be enabled with filter dlm_allow_remote_hash_file
|
144 |
* Radio buttons instead of select (with pagination) in popup to improve performance.
|
145 |
|
146 |
-
= 1.4.2 =
|
147 |
* Fix for site_url -> abspath
|
148 |
* Check if hash functions are supported before use.
|
149 |
|
@@ -238,4 +258,9 @@ Admin hits are not counted, log out and try!
|
|
238 |
* Workaround root relative URLS
|
239 |
|
240 |
= 1.0.0 =
|
241 |
-
* Complete rewrite of the plugin making use of custom post types and other best practices. Fresh start version '1' to prevent auto-updates (legacy importer needs to be used to migrate from old versions).
|
|
|
|
|
|
|
|
|
|
1 |
=== Download Monitor ===
|
2 |
+
Contributors: barrykooij, mikejolley
|
3 |
+
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=barry@cageworks.nl&item_name=Donation+for+Download+Monitor
|
4 |
Tags: download, downloads, monitor, hits, download monitor, tracking, admin, count, counter, files, versions, download count, logging
|
5 |
Requires at least: 3.8
|
6 |
+
Tested up to: 4.1
|
7 |
+
Stable tag: 1.6.0
|
8 |
License: GPLv3
|
9 |
|
10 |
Download Monitor is a plugin for uploading and managing downloads, tracking downloads, and displaying links.
|
26 |
* Member only downloads.
|
27 |
* Customisable endpoints for showing pretty download links.
|
28 |
|
29 |
+
[Read more about Download Monitor](https://www.download-monitor.com).
|
30 |
|
31 |
= Documentation =
|
32 |
|
33 |
+
Documentation will be maintained on the [GitHub Wiki here](https://github.com/download-monitor/download-monitor/wiki).
|
34 |
|
35 |
+
= Extensions =
|
36 |
|
37 |
+
Extensions, such as the __legacy importer__ and __page addon__ can be [found here](https://www.download-monitor.com/extensions/). Take a look!
|
38 |
|
39 |
= Contributing and reporting bugs =
|
40 |
|
41 |
+
You can contribute code to this plugin via GitHub: [https://github.com/download-monitor/download-monitor](https://github.com/download-monitor/download-monitor)
|
42 |
|
43 |
You can contribute localizations via Transifex [https://www.transifex.com/projects/p/download-monitor/](https://www.transifex.com/projects/p/download-monitor/)
|
44 |
|
45 |
= Support =
|
46 |
|
47 |
+
Use the WordPress.org forums for community support. If you spot a bug, you can of course log it on [Github](https://github.com/download-monitor/download-monitor) instead where we can act upon it more efficiently.
|
48 |
|
49 |
If you want help with a customisation, hire a developer!
|
50 |
|
68 |
|
69 |
= I used this before, so why is this version 1? =
|
70 |
|
71 |
+
Version 1.0.0 is a fresh start/complete rewrite of the legacy 3.0 version using modern best-practices such as custom post types and endpoints. Because of this, data from the legacy plugin won't work without migration using [the legacy importer](https://www.download-monitor.com/extensions/dlm-legacy-importer/). Since this upgrade process isn't straightforward nor automated I've reverted the version to 1.0.0 to prevent automatic updates.
|
72 |
|
73 |
Legacy versions can still be [found here](http://wordpress.org/plugins/download-monitor/developers/).
|
74 |
|
76 |
|
77 |
The rewrite has trimmed the fat and only kept the best, most useful features. If something is missing, you can always code it yourself - the new system is very flexible and its easy to query files using [get_posts](http://codex.wordpress.org/Template_Tags/get_posts).
|
78 |
|
79 |
+
If you are missing the "Page Addon", this is now a separate plugin found here: [Download Monitor Page Addon](https://www.download-monitor.com/extensions/page-addon/).
|
80 |
|
81 |
= Can I upload .xxx filetype using the uploader? =
|
82 |
|
110 |
|
111 |
== Changelog ==
|
112 |
|
113 |
+
= 1.6.0 =
|
114 |
+
* Plugin is now initiated at plugins_loaded.
|
115 |
+
* Implemented auto loader.
|
116 |
+
* Classes are no longer initiated at bottom of class file but whenever an object is needed.
|
117 |
+
* Code standards corrections.
|
118 |
+
* Introduced Template_Handler. Loading of template parts should be done through this class.
|
119 |
+
* Removed $GLOBALS['dlm_logging'] global.
|
120 |
+
* Removed $GLOBALS['DLM_Download_Handler'] global.
|
121 |
+
* Removed internal use of $download_monitor global.
|
122 |
+
# Moved all inline JavaScript to separate JavaScript files.
|
123 |
+
* Moved all install related code to installer class.
|
124 |
+
* Moved main plugin class to it's own file.
|
125 |
+
* Deprecated 'dlm_create_log' function.
|
126 |
+
* Redone extensions page.
|
127 |
+
* Fixed a bug in shortcode download where orderby=download_count wasn't working.
|
128 |
+
* Fixed a bug where downloads didn't work with default WP permalink structure.
|
129 |
+
* Delete dlm_file_version_ids_ transient on save.
|
130 |
+
* Added dlm_download_headers filter.
|
131 |
+
* Added dlm_get_template_part filter.
|
132 |
+
|
133 |
= 1.5.1 =
|
134 |
* Fallback for JSON_UNESCAPED_UNICODE to fix accented characters on < PHP 5.4.
|
135 |
* Changed default orderby for downloads shortcode to date, desc.
|
145 |
* Added Grunt.
|
146 |
* Added options to generate file hashes DISABLED BY DEFAULT as they can cause performance issues with large files.
|
147 |
|
148 |
+
= 1.4.4 =
|
149 |
* Use home_dir instead of site_dir - fixes hot-linking protections against own site (when not in root dir)
|
150 |
* Replace hardcoded WP_CONTENT_DIR and WP_CONTENT_URL with wp_upload_dir to work when UPLOADS and UPLOADS_URL constants are set.
|
151 |
* Added some filters for hotlink protection customisation.
|
163 |
* Disable remote file hash generation, but can be enabled with filter dlm_allow_remote_hash_file
|
164 |
* Radio buttons instead of select (with pagination) in popup to improve performance.
|
165 |
|
166 |
+
= 1.4.2 =
|
167 |
* Fix for site_url -> abspath
|
168 |
* Check if hash functions are supported before use.
|
169 |
|
258 |
* Workaround root relative URLS
|
259 |
|
260 |
= 1.0.0 =
|
261 |
+
* Complete rewrite of the plugin making use of custom post types and other best practices. Fresh start version '1' to prevent auto-updates (legacy importer needs to be used to migrate from old versions).
|
262 |
+
|
263 |
+
== Upgrade Notice ==
|
264 |
+
|
265 |
+
= 1.6.0 =
|
266 |
+
If you're using the Page Addon or Amazon S3 extension you must update these extensions too. Visit https://www.download-monitor.com/ for more information.
|
templates/content-download-box.php
CHANGED
@@ -9,7 +9,8 @@ global $dlm_download;
|
|
9 |
|
10 |
<?php $dlm_download->the_image(); ?>
|
11 |
|
12 |
-
<div
|
|
|
13 |
|
14 |
<div class="download-box-content">
|
15 |
|
@@ -17,7 +18,9 @@ global $dlm_download;
|
|
17 |
|
18 |
<?php $dlm_download->the_short_description(); ?>
|
19 |
|
20 |
-
<a class="download-button" title="<?php if ( $dlm_download->has_version_number() )
|
|
|
|
|
21 |
<?php _e( 'Download File', 'download-monitor' ); ?>
|
22 |
<small><?php $dlm_download->the_filename(); ?> – <?php $dlm_download->the_filesize(); ?></small>
|
23 |
</a>
|
9 |
|
10 |
<?php $dlm_download->the_image(); ?>
|
11 |
|
12 |
+
<div
|
13 |
+
class="download-count"><?php printf( _n( '1 download', '%d downloads', $dlm_download->get_the_download_count(), 'download-monitor' ), $dlm_download->get_the_download_count() ) ?></div>
|
14 |
|
15 |
<div class="download-box-content">
|
16 |
|
18 |
|
19 |
<?php $dlm_download->the_short_description(); ?>
|
20 |
|
21 |
+
<a class="download-button" title="<?php if ( $dlm_download->has_version_number() ) {
|
22 |
+
printf( __( 'Version %s', 'download-monitor' ), $dlm_download->get_the_version_number() );
|
23 |
+
} ?>" href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
24 |
<?php _e( 'Download File', 'download-monitor' ); ?>
|
25 |
<small><?php $dlm_download->the_filename(); ?> – <?php $dlm_download->the_filesize(); ?></small>
|
26 |
</a>
|
templates/content-download-button.php
CHANGED
@@ -3,9 +3,9 @@
|
|
3 |
* Download button
|
4 |
*/
|
5 |
|
6 |
-
global $dlm_download
|
7 |
?>
|
8 |
<p><a class="aligncenter download-button" href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
9 |
-
|
10 |
-
|
11 |
-
</a></p>
|
3 |
* Download button
|
4 |
*/
|
5 |
|
6 |
+
global $dlm_download;
|
7 |
?>
|
8 |
<p><a class="aligncenter download-button" href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
9 |
+
<?php printf( __( 'Download “%s”', 'download-monitor' ), $dlm_download->get_the_title() ); ?>
|
10 |
+
<small><?php $dlm_download->the_filename(); ?> – <?php printf( _n( 'Downloaded 1 time', 'Downloaded %d times', $dlm_download->get_the_download_count(), 'download-monitor' ), $dlm_download->get_the_download_count() ) ?> – <?php $dlm_download->the_filesize(); ?></small>
|
11 |
+
</a></p>
|
templates/content-download-filename.php
CHANGED
@@ -5,6 +5,11 @@
|
|
5 |
|
6 |
global $dlm_download;
|
7 |
?>
|
8 |
-
<a class="download-link filetype-icon <?php echo 'filetype-' .
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
10 |
</a>
|
5 |
|
6 |
global $dlm_download;
|
7 |
?>
|
8 |
+
<a class="download-link filetype-icon <?php echo 'filetype-' . $dlm_download->get_the_filetype(); ?>"
|
9 |
+
title="<?php if ( $dlm_download->has_version_number() ) {
|
10 |
+
printf( __( 'Version %s', 'download-monitor' ), $dlm_download->get_the_version_number() );
|
11 |
+
} ?>" href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
12 |
+
<?php $dlm_download->the_filename(); ?>
|
13 |
+
(<?php printf( _n( '1 download', '%d downloads', $dlm_download->get_the_download_count(), 'download-monitor' ), $dlm_download->get_the_download_count() ) ?>
|
14 |
+
)
|
15 |
</a>
|
templates/content-download-title.php
CHANGED
@@ -5,6 +5,8 @@
|
|
5 |
|
6 |
global $dlm_download;
|
7 |
?>
|
8 |
-
<a class="download-link" title="<?php if ( $dlm_download->has_version_number() )
|
|
|
|
|
9 |
<?php $dlm_download->the_title(); ?>
|
10 |
</a>
|
5 |
|
6 |
global $dlm_download;
|
7 |
?>
|
8 |
+
<a class="download-link" title="<?php if ( $dlm_download->has_version_number() ) {
|
9 |
+
printf( __( 'Version %s', 'download-monitor' ), $dlm_download->get_the_version_number() );
|
10 |
+
} ?>" href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
11 |
<?php $dlm_download->the_title(); ?>
|
12 |
</a>
|
templates/content-download-version-list.php
CHANGED
@@ -10,15 +10,19 @@ $versions = $dlm_download->get_file_versions();
|
|
10 |
if ( $versions ) : ?>
|
11 |
<ul class="download-versions">
|
12 |
<?php
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
19 |
</a></li>
|
20 |
-
|
21 |
-
|
22 |
?>
|
23 |
</ul>
|
24 |
<?php endif; ?>
|
10 |
if ( $versions ) : ?>
|
11 |
<ul class="download-versions">
|
12 |
<?php
|
13 |
+
foreach ( $versions as $version ) {
|
14 |
+
$dlm_download->set_version( $version->id );
|
15 |
+
$version_post = get_post( $version->id );
|
16 |
+
?>
|
17 |
+
<li><a class="download-link"
|
18 |
+
title="<?php printf( _n( 'Downloaded 1 time', 'Downloaded %d times', $dlm_download->get_the_download_count(), 'download-monitor' ), $dlm_download->get_the_download_count() ) ?>"
|
19 |
+
href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
20 |
+
<?php $dlm_download->the_filename(); ?> <?php if ( $dlm_download->has_version_number() ) {
|
21 |
+
echo '- ' . $dlm_download->get_the_version_number();
|
22 |
+
} ?>
|
23 |
</a></li>
|
24 |
+
<?php
|
25 |
+
}
|
26 |
?>
|
27 |
</ul>
|
28 |
<?php endif; ?>
|
templates/content-download.php
CHANGED
@@ -5,6 +5,10 @@
|
|
5 |
|
6 |
global $dlm_download;
|
7 |
?>
|
8 |
-
<a class="download-link" title="<?php if ( $dlm_download->has_version_number() )
|
9 |
-
|
|
|
|
|
|
|
|
|
10 |
</a>
|
5 |
|
6 |
global $dlm_download;
|
7 |
?>
|
8 |
+
<a class="download-link" title="<?php if ( $dlm_download->has_version_number() ) {
|
9 |
+
printf( __( 'Version %s', 'download-monitor' ), $dlm_download->get_the_version_number() );
|
10 |
+
} ?>" href="<?php $dlm_download->the_download_link(); ?>" rel="nofollow">
|
11 |
+
<?php $dlm_download->the_title(); ?>
|
12 |
+
(<?php printf( _n( '1 download', '%d downloads', $dlm_download->get_the_download_count(), 'download-monitor' ), $dlm_download->get_the_download_count() ) ?>
|
13 |
+
)
|
14 |
</a>
|
templates/pagination.php
CHANGED
@@ -2,25 +2,28 @@
|
|
2 |
/**
|
3 |
* Pagination - Show numbered pagination.
|
4 |
*/
|
5 |
-
if ( ! defined( 'ABSPATH' ) )
|
|
|
|
|
6 |
|
7 |
global $dlm_max_num_pages;
|
8 |
|
9 |
-
if ( $dlm_max_num_pages <= 1 )
|
10 |
return;
|
|
|
11 |
?>
|
12 |
<nav class="download-monitor-pagination">
|
13 |
<?php
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
?>
|
26 |
</nav>
|
2 |
/**
|
3 |
* Pagination - Show numbered pagination.
|
4 |
*/
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
} // Exit if accessed directly
|
8 |
|
9 |
global $dlm_max_num_pages;
|
10 |
|
11 |
+
if ( $dlm_max_num_pages <= 1 ) {
|
12 |
return;
|
13 |
+
}
|
14 |
?>
|
15 |
<nav class="download-monitor-pagination">
|
16 |
<?php
|
17 |
+
echo paginate_links( apply_filters( 'download_monitor_pagination_args', array(
|
18 |
+
'base' => str_replace( 999999999, '%#%', get_pagenum_link( 999999999 ) ),
|
19 |
+
'format' => '',
|
20 |
+
'current' => max( 1, get_query_var( 'paged' ) ),
|
21 |
+
'total' => $dlm_max_num_pages,
|
22 |
+
'prev_text' => '←',
|
23 |
+
'next_text' => '→',
|
24 |
+
'type' => 'list',
|
25 |
+
'end_size' => 3,
|
26 |
+
'mid_size' => 3
|
27 |
+
) ) );
|
28 |
?>
|
29 |
</nav>
|