Download Monitor - Version 1.8.0

Version Description

Download this release

Release Info

Developer barrykooij
Plugin Icon 128x128 Download Monitor
Version 1.8.0
Comparing to
See all releases

Code changes from version 1.7.2 to 1.8.0

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-information p{overflow:hidden}#download-monitor-information p label{width:100%;font-weight:700;box-sizing:border-box;line-height:28px;float:left}#download-monitor-information p label input{width:65%;padding:5px;font-size:11px;font-weight:400;background:#eaeaea;border:0;box-shadow:none;box-sizing:border-box;float:right}#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}
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:18px;line-height:18px;width:18px;display:inline-block;background:url(../images/log-status-icons.png) top left no-repeat}#dlm_logs td.column-status .completed{background-color:#6cc644}#dlm_logs td.column-status .failed{background-color:#bd2c00;background-position-y:-18px}#dlm_logs td.column-status .redirected{background-color:#1c769b;background-position-y:-36px}#dlm_logs td.column-user_agent,#dlm_logs td.column-user_ip{font-family:monospace;font-weight:400}#dlm_logs span.dlm-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-information p{overflow:hidden}#download-monitor-information p label{width:100%;font-weight:700;box-sizing:border-box;line-height:28px;float:left}#download-monitor-information p label input{width:65%;padding:5px;font-size:11px;font-weight:400;background:#eaeaea;border:0;box-shadow:none;box-sizing:border-box;float:right}#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 .dlm-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
@@ -35,26 +35,29 @@
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 {
@@ -475,7 +478,7 @@ table.wp-list-table {
475
  width: auto;
476
  vertical-align: middle;
477
  }
478
- .description {
479
  padding: 4px 0 0 0;
480
  display: block;
481
  }
35
  -moz-border-radius: 50%;
36
  -webkit-border-radius: 50%;
37
  border-radius: 50%;
38
+ height: 18px;
39
+ line-height: 18px;
40
+ width: 18px;
41
  display: inline-block;
42
+ background: url('../images/log-status-icons.png') top left no-repeat;
43
+ }
44
+ .completed {
45
+ background-color: #6cc644;
46
  }
47
  .failed {
48
+ background-color: #bd2c00;
49
+ background-position-y: -18px;
50
  }
51
  .redirected {
 
 
 
52
  background-color: #1c769b;
53
+ background-position-y: -36px;
54
  }
55
  }
56
  td.column-user_ip, td.column-user_agent {
57
  font-family: monospace;
58
  font-weight: normal;
59
  }
60
+ span.dlm-description {
61
  font-weight: normal;
62
  }
63
  .column-download, .column-file, .column-user, .column-user_ua {
478
  width: auto;
479
  vertical-align: middle;
480
  }
481
+ .dlm-description {
482
  padding: 4px 0 0 0;
483
  display: block;
484
  }
assets/css/frontend.css CHANGED
@@ -1 +1 @@
1
- .download-box{width:250px;border:1px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-align:center;position:relative;margin:1em auto;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4)}.download-box img.wp-post-image{margin:0;padding:0;display:block;width:100%;-moz-border-radius:0;-webkit-border-radius:0;-moz-border-top-left-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-radius:0;border-top-left-radius:3px;border-top-right-radius:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.download-box .download-box-content{padding:0 1em 1em}.download-box .download-count{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;color:#777;text-shadow:0 1px 0 rgba(255,255,255,.5);background:#ddd;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);position:absolute;top:0;right:0;padding:.5em;height:1em;width:auto;min-width:1em;font-size:1em;text-align:center;vertical-align:middle;line-height:1em;border:1px solid #bbb;margin:-.5em -.5em 0 0}.download-button{text-align:center;text-decoration:none;padding:.75em 1em;color:#fff;display:block;font-size:1.2em;line-height:1.5em;background-color:#09c;background-image:-webkit-linear-gradient(#009fd4,#09c,#0086b2);background-image:-moz-linear-gradient(#009fd4,#09c,#0086b2);-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-shadow:0 -1px 0 rgba(0,0,0,.5);box-shadow:0 2px 4px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.4);border:1px solid #0086b2;cursor:pointer}.download-button:hover{color:#fff;background-color:#09c;background-image:-webkit-linear-gradient(#09c,#0086b2);background-image:-moz-linear-gradient(#09c,#0086b2)}.download-button small{font-size:.8em;opacity:.8;display:block}.filetype-icon{padding-left:19px;background-repeat:no-repeat;background-position:left;background-image:url(../images/filetypes/document.png)}.filetype-pdf{background-image:url(../images/filetypes/document-pdf.png)}.filetype-aif,.filetype-aifc,.filetype-aiff,.filetype-au,.filetype-kar,.filetype-m3u,.filetype-m4r,.filetype-mid,.filetype-midi,.filetype-mp2,.filetype-mp3,.filetype-mpga,.filetype-ra,.filetype-ram,.filetype-rm,.filetype-rpm,.filetype-snd,.filetype-wav,.filetype-wave{background-image:url(../images/filetypes/document-music.png)}.filetype-avi,.filetype-divx,.filetype-mov,.filetype-movie,.filetype-mp4,.filetype-mpe,.filetype-mpeg,.filetype-mpg,.filetype-mxu,.filetype-qt{background-image:url(../images/filetypes/document-film.png)}.filetype-7z,.filetype-gz,.filetype-rar,.filetype-sit,.filetype-tar,.filetype-zip{background-image:url(../images/filetypes/document-zipper.png)}.filetype-csv,.filetype-tsv,.filetype-xls{background-image:url(../images/filetypes/document-excel.png)}.filetype-doc,.filetype-docx{background-image:url(../images/filetypes/document-word-text.png)}.filetype-ai{background-image:url(../images/filetypes/document-illustrator.png)}.filetype-swf{background-image:url(../images/filetypes/document-flash-movie.png)}.filetype-bmp,.filetype-djv,.filetype-eps,.filetype-gif,.filetype-ief,.filetype-jpe,.filetype-jpeg,.filetype-jpg,.filetype-pbm,.filetype-pgm,.filetype-png,.filetype-pnm,.filetype-ppm,.filetype-ps,.filetype-ras,.filetype-rgb,.filetype-tif,.filetype-tiff,.filetype-wbmp,.filetype-xbm,.filetype-xpm,.filetype-xwd{background-image:url(../images/filetypes/document-image.png)}.filetype-psd{background-image:url(../images/filetypes/document-photoshop.png)}.filetype-ppt{background-image:url(../images/filetypes/document-powerpoint.png)}.filetype-as,.filetype-css,.filetype-htaccess,.filetype-htm,.filetype-html,.filetype-js,.filetype-php,.filetype-sql,.filetype-xml,.filetype-xsl{background-image:url(../images/filetypes/document-code.png)}.filetype-rtf,.filetype-rtx{background-image:url(../images/filetypes/document-text-image.png)}.filetype-txt{background-image:url(../images/filetypes/document-text.png)}#content nav.download-monitor-pagination,nav.download-monitor-pagination{text-align:center}#content nav.download-monitor-pagination ul,nav.download-monitor-pagination ul{display:inline-block;white-space:nowrap;padding:0;clear:both;border:1px solid #eee;border-right:0;margin:1px}#content nav.download-monitor-pagination ul li,nav.download-monitor-pagination ul li{border-right:1px solid #eee;padding:0;margin:0;float:left;display:inline;overflow:hidden}#content nav.download-monitor-pagination ul li a,#content nav.download-monitor-pagination ul li span,nav.download-monitor-pagination ul li a,nav.download-monitor-pagination ul li span{margin:0;text-decoration:none;line-height:1em;font-size:1em;font-weight:400;padding:.5em;min-width:1em;display:block}#content nav.download-monitor-pagination ul li a:focus,#content nav.download-monitor-pagination ul li a:hover,#content nav.download-monitor-pagination ul li span.current,nav.download-monitor-pagination ul li a:focus,nav.download-monitor-pagination ul li a:hover,nav.download-monitor-pagination ul li span.current{background:#eee;color:#888}
1
+ .download-box{width:250px;border:1px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-align:center;position:relative;margin:1em auto;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4)}.download-box img.wp-post-image{margin:0;padding:0;display:block;width:100%;-moz-border-radius:0;-webkit-border-radius:0;-moz-border-top-left-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-radius:0;border-top-left-radius:3px;border-top-right-radius:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.download-box .download-box-content{padding:0 1em 1em}.download-box .download-count{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;color:#777;text-shadow:0 1px 0 rgba(255,255,255,.5);background:#ddd;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);position:absolute;top:0;right:0;padding:.5em;height:1em;width:auto;min-width:1em;font-size:1em;text-align:center;vertical-align:middle;line-height:1em;border:1px solid #bbb;margin:-.5em -.5em 0 0}.download-button{text-align:center;text-decoration:none;padding:.75em 1em;color:#fff;display:block;font-size:1.2em;line-height:1.5em;background-color:#09c;background-image:-webkit-linear-gradient(#009fd4,#09c,#0086b2);background-image:-moz-linear-gradient(#009fd4,#09c,#0086b2);-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-shadow:0 -1px 0 rgba(0,0,0,.5);box-shadow:0 2px 4px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.4);border:1px solid #0086b2;cursor:pointer}.download-button:hover{color:#fff;background-color:#09c;background-image:-webkit-linear-gradient(#09c,#0086b2);background-image:-moz-linear-gradient(#09c,#0086b2)}.download-button small{font-size:.8em;opacity:.8;display:block}.filetype-icon{padding-left:19px;background-repeat:no-repeat;background-position:left;background-image:url(../images/filetypes/document.png)}.filetype-pdf{background-image:url(../images/filetypes/document-pdf.png)}.filetype-aif,.filetype-aifc,.filetype-aiff,.filetype-au,.filetype-kar,.filetype-m3u,.filetype-m4r,.filetype-mid,.filetype-midi,.filetype-mp2,.filetype-mp3,.filetype-mpga,.filetype-ra,.filetype-ram,.filetype-rm,.filetype-rpm,.filetype-snd,.filetype-wav,.filetype-wave{background-image:url(../images/filetypes/document-music.png)}.filetype-avi,.filetype-divx,.filetype-mov,.filetype-movie,.filetype-mp4,.filetype-mpe,.filetype-mpeg,.filetype-mpg,.filetype-mxu,.filetype-qt{background-image:url(../images/filetypes/document-film.png)}.filetype-7z,.filetype-gz,.filetype-rar,.filetype-sit,.filetype-tar,.filetype-zip{background-image:url(../images/filetypes/document-zipper.png)}.filetype-csv,.filetype-tsv,.filetype-xls,.filetype-xlsx{background-image:url(../images/filetypes/document-excel.png)}.filetype-doc,.filetype-docx{background-image:url(../images/filetypes/document-word-text.png)}.filetype-ai{background-image:url(../images/filetypes/document-illustrator.png)}.filetype-swf{background-image:url(../images/filetypes/document-flash-movie.png)}.filetype-bmp,.filetype-djv,.filetype-eps,.filetype-gif,.filetype-ief,.filetype-jpe,.filetype-jpeg,.filetype-jpg,.filetype-pbm,.filetype-pgm,.filetype-png,.filetype-pnm,.filetype-ppm,.filetype-ps,.filetype-ras,.filetype-rgb,.filetype-tif,.filetype-tiff,.filetype-wbmp,.filetype-xbm,.filetype-xpm,.filetype-xwd{background-image:url(../images/filetypes/document-image.png)}.filetype-psd{background-image:url(../images/filetypes/document-photoshop.png)}.filetype-ppt,.filetype-pptx{background-image:url(../images/filetypes/document-powerpoint.png)}.filetype-as,.filetype-css,.filetype-htaccess,.filetype-htm,.filetype-html,.filetype-js,.filetype-php,.filetype-sql,.filetype-xml,.filetype-xsl{background-image:url(../images/filetypes/document-code.png)}.filetype-rtf,.filetype-rtx{background-image:url(../images/filetypes/document-text-image.png)}.filetype-txt{background-image:url(../images/filetypes/document-text.png)}#content nav.download-monitor-pagination,nav.download-monitor-pagination{text-align:center}#content nav.download-monitor-pagination ul,nav.download-monitor-pagination ul{display:inline-block;white-space:nowrap;padding:0;clear:both;border:1px solid #eee;border-right:0;margin:1px}#content nav.download-monitor-pagination ul li,nav.download-monitor-pagination ul li{border-right:1px solid #eee;padding:0;margin:0;float:left;display:inline;overflow:hidden}#content nav.download-monitor-pagination ul li a,#content nav.download-monitor-pagination ul li span,nav.download-monitor-pagination ul li a,nav.download-monitor-pagination ul li span{margin:0;text-decoration:none;line-height:1em;font-size:1em;font-weight:400;padding:.5em;min-width:1em;display:block}#content nav.download-monitor-pagination ul li a:focus,#content nav.download-monitor-pagination ul li a:hover,#content nav.download-monitor-pagination ul li span.current,nav.download-monitor-pagination ul li a:focus,nav.download-monitor-pagination ul li a:hover,nav.download-monitor-pagination ul li span.current{background:#eee;color:#888}
assets/css/frontend.less CHANGED
@@ -110,7 +110,7 @@
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
 
@@ -134,7 +134,7 @@
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
 
110
  background-image: url(../images/filetypes/document-zipper.png);
111
  }
112
 
113
+ .filetype-xls, .filetype-tsv, .filetype-csv, .filetype-xlsx {
114
  background-image: url(../images/filetypes/document-excel.png);
115
  }
116
 
134
  background-image: url(../images/filetypes/document-photoshop.png);
135
  }
136
 
137
+ .filetype-ppt, .filetype-pptx {
138
  background-image: url(../images/filetypes/document-powerpoint.png);
139
  }
140
 
assets/images/log-status-icons.png ADDED
Binary file
assets/js/settings.js CHANGED
@@ -13,6 +13,30 @@ jQuery( function ( $ ) {
13
  $( '#setting-dlm_custom_template' ).closest( 'tr' ).hide();
14
  }
15
  } ).change();
 
 
 
 
 
 
 
16
 
17
  $( '.nav-tab-wrapper a:first' ).click();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  } );
13
  $( '#setting-dlm_custom_template' ).closest( 'tr' ).hide();
14
  }
15
  } ).change();
16
+ $( '#setting-dlm_enable_logging' ).change( function () {
17
+ if ( $( this ).is(":checked") === true ) {
18
+ $( '#setting-dlm_count_unique_ips' ).closest( 'tr' ).show();
19
+ } else {
20
+ $( '#setting-dlm_count_unique_ips' ).closest( 'tr' ).hide();
21
+ }
22
+ } ).change();
23
 
24
  $( '.nav-tab-wrapper a:first' ).click();
25
+
26
+ $( '.dlm-notice.is-dismissible' ).on( 'click', '.notice-dismiss', function ( event ) {
27
+ //$( '#dlm-ajax-nonce' ).val()
28
+ var notice_el = $( this ).closest( '.dlm-notice' );
29
+
30
+ var notice = notice_el.attr( 'id' );
31
+ var notice_nonce = notice_el.attr( 'data-nonce' );
32
+ $.post(
33
+ ajaxurl,
34
+ {
35
+ action: 'dlm_dismiss_notice',
36
+ nonce: notice_nonce,
37
+ notice: notice
38
+ },
39
+ function ( response ) {}
40
+ )
41
+ } );
42
  } );
assets/js/settings.min.js CHANGED
@@ -1 +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()});
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("#setting-dlm_enable_logging").change(function(){a(this).is(":checked")===!0?a("#setting-dlm_count_unique_ips").closest("tr").show():a("#setting-dlm_count_unique_ips").closest("tr").hide()}).change(),a(".nav-tab-wrapper a:first").click(),a(".dlm-notice.is-dismissible").on("click",".notice-dismiss",function(){var b=a(this).closest(".dlm-notice"),c=b.attr("id"),d=b.attr("data-nonce");a.post(ajaxurl,{action:"dlm_dismiss_notice",nonce:d,notice:c},function(){})})});
download-monitor.php CHANGED
@@ -3,11 +3,11 @@
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.7.2
7
- Author: Barry Kooij & Mike Jolley
8
- Author URI: https://www.download-monitor.com
9
  Requires at least: 3.8
10
- Tested up to: 4.2.1
11
 
12
  License: GPL v3
13
 
@@ -23,6 +23,8 @@
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' ) ) {
@@ -30,7 +32,7 @@ if ( ! defined( 'ABSPATH' ) ) {
30
  } // Exit if accessed directly
31
 
32
  // Define DLM Version
33
- define( 'DLM_VERSION', '1.7.2' );
34
 
35
  function __download_monitor_main() {
36
 
@@ -50,27 +52,23 @@ function __download_monitor_main() {
50
  // Init plugin
51
  add_action( 'plugins_loaded', '__download_monitor_main', 10 );
52
 
53
- if ( is_admin() && ! is_multisite() && ( false === defined( 'DOING_AJAX' ) || false === DOING_AJAX ) ) {
54
 
 
55
  define( 'DLM_PLUGIN_FILE_INSTALLER', __FILE__ );
56
 
57
- // Installer function
58
- function __download_monitor_install() {
59
-
60
- // Load installer functions
61
- require_once plugin_dir_path( DLM_PLUGIN_FILE_INSTALLER ) . 'includes/class-dlm-installer.php';
62
-
63
- // DLM Installer
64
- $installer = new DLM_Installer();
65
-
66
- // Install DLM
67
- $installer->install();
68
-
69
- }
70
 
71
  // Activation hook
72
  register_activation_hook( DLM_PLUGIN_FILE_INSTALLER, '__download_monitor_install' );
73
 
74
  // Flush Rewrites on Activation
75
  register_activation_hook( DLM_PLUGIN_FILE_INSTALLER, 'flush_rewrite_rules', 11 );
 
 
 
 
 
 
76
  }
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.8.0
7
+ Author: Never5
8
+ Author URI: https://www.never5.com
9
  Requires at least: 3.8
10
+ Tested up to: 4.2.2
11
 
12
  License: GPL v3
13
 
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
+ Original project created by Mike Jolley.
28
  */
29
 
30
  if ( ! defined( 'ABSPATH' ) ) {
32
  } // Exit if accessed directly
33
 
34
  // Define DLM Version
35
+ define( 'DLM_VERSION', '1.8.0' );
36
 
37
  function __download_monitor_main() {
38
 
52
  // Init plugin
53
  add_action( 'plugins_loaded', '__download_monitor_main', 10 );
54
 
55
+ if ( is_admin() && ( false === defined( 'DOING_AJAX' ) || false === DOING_AJAX ) ) {
56
 
57
+ // set installer file constant
58
  define( 'DLM_PLUGIN_FILE_INSTALLER', __FILE__ );
59
 
60
+ // include installer functions
61
+ require_once( 'installer-functions.php' );
 
 
 
 
 
 
 
 
 
 
 
62
 
63
  // Activation hook
64
  register_activation_hook( DLM_PLUGIN_FILE_INSTALLER, '__download_monitor_install' );
65
 
66
  // Flush Rewrites on Activation
67
  register_activation_hook( DLM_PLUGIN_FILE_INSTALLER, 'flush_rewrite_rules', 11 );
68
+
69
+ // Multisite new blog hook
70
+ add_action( 'wpmu_new_blog', '__download_monitor_mu_new_blog', 10, 6 );
71
+
72
+ // Multisite blog delete
73
+ add_filter( 'wpmu_drop_tables', '__download_monitor_mu_delete_blog' );
74
  }
includes/admin/class-dlm-admin-cpt.php CHANGED
@@ -102,7 +102,7 @@ class DLM_Admin_CPT {
102
  *
103
  * @access public
104
  *
105
- * @param mixed $id
106
  *
107
  * @return void
108
  */
@@ -133,8 +133,11 @@ class DLM_Admin_CPT {
133
  /**
134
  * enter_title_here function.
135
  *
 
 
 
136
  * @access public
137
- * @return void
138
  */
139
  public function enter_title_here( $text, $post ) {
140
  if ( 'dlm_download' == $post->post_type ) {
@@ -149,9 +152,9 @@ class DLM_Admin_CPT {
149
  *
150
  * @access public
151
  *
152
- * @param mixed $messages
153
  *
154
- * @return void
155
  */
156
  public function post_updated_messages( $messages ) {
157
  global $post;
@@ -179,7 +182,7 @@ class DLM_Admin_CPT {
179
  *
180
  * @access public
181
  *
182
- * @param mixed $columns
183
  *
184
  * @return array
185
  */
@@ -298,7 +301,7 @@ class DLM_Admin_CPT {
298
  *
299
  * @param mixed $columns
300
  *
301
- * @return void
302
  */
303
  public function sortable_columns( $columns ) {
304
  $custom = array(
@@ -317,9 +320,9 @@ class DLM_Admin_CPT {
317
  *
318
  * @access public
319
  *
320
- * @param mixed $vars
321
  *
322
- * @return void
323
  */
324
  public function sort_columns( $vars ) {
325
  if ( isset( $vars['orderby'] ) ) {
102
  *
103
  * @access public
104
  *
105
+ * @param int $id
106
  *
107
  * @return void
108
  */
133
  /**
134
  * enter_title_here function.
135
  *
136
+ * @param string $text
137
+ * @param WP_Post $post
138
+ *
139
  * @access public
140
+ * @return string
141
  */
142
  public function enter_title_here( $text, $post ) {
143
  if ( 'dlm_download' == $post->post_type ) {
152
  *
153
  * @access public
154
  *
155
+ * @param array $messages
156
  *
157
+ * @return array
158
  */
159
  public function post_updated_messages( $messages ) {
160
  global $post;
182
  *
183
  * @access public
184
  *
185
+ * @param array $columns
186
  *
187
  * @return array
188
  */
301
  *
302
  * @param mixed $columns
303
  *
304
+ * @return array
305
  */
306
  public function sortable_columns( $columns ) {
307
  $custom = array(
320
  *
321
  * @access public
322
  *
323
+ * @param array $vars
324
  *
325
+ * @return array
326
  */
327
  public function sort_columns( $vars ) {
328
  if ( isset( $vars['orderby'] ) ) {
includes/admin/class-dlm-admin-writepanels.php CHANGED
@@ -61,7 +61,7 @@ class DLM_Admin_Writepanels {
61
  *
62
  * @access public
63
  *
64
- * @param mixed $post
65
  *
66
  * @return void
67
  */
@@ -100,7 +100,7 @@ class DLM_Admin_Writepanels {
100
  *
101
  * @access public
102
  *
103
- * @param mixed $post
104
  *
105
  * @return void
106
  */
@@ -116,19 +116,19 @@ class DLM_Admin_Writepanels {
116
  echo '<p class="form-field form-field-checkbox">
117
  <input type="checkbox" name="_featured" id="_featured" ' . checked( get_post_meta( $thepostid, '_featured', true ), 'yes', false ) . ' />
118
  <label for="_featured">' . __( 'Featured download', 'download-monitor' ) . '</label>
119
- <span class="description">' . __( 'Mark this download as featured. Used by shortcodes and widgets.', 'download-monitor' ) . '</span>
120
  </p>';
121
 
122
  echo '<p class="form-field form-field-checkbox">
123
  <input type="checkbox" name="_members_only" id="_members_only" ' . checked( get_post_meta( $thepostid, '_members_only', true ), 'yes', false ) . ' />
124
  <label for="_members_only">' . __( 'Members only', 'download-monitor' ) . '</label>
125
- <span class="description">' . __( 'Only logged in users will be able to access the file via a download link if this is enabled.', 'download-monitor' ) . '</span>
126
  </p>';
127
 
128
  echo '<p class="form-field form-field-checkbox">
129
  <input type="checkbox" name="_redirect_only" id="_redirect_only" ' . checked( get_post_meta( $thepostid, '_redirect_only', true ), 'yes', false ) . ' />
130
  <label for="_redirect_only">' . __( 'Redirect to file', 'download-monitor' ) . '</label>
131
- <span class="description">' . __( 'Don\'t force download. If the <code>dlm_upload</code> folder is protected you may need to move your file.', 'download-monitor' ) . '</span>
132
  </p>';
133
 
134
  do_action( 'dlm_options_end', $thepostid );
@@ -202,7 +202,7 @@ class DLM_Admin_Writepanels {
202
  *
203
  * @access public
204
  *
205
- * @param mixed $post
206
  *
207
  * @return void
208
  */
@@ -223,8 +223,8 @@ class DLM_Admin_Writepanels {
223
  *
224
  * @access public
225
  *
226
- * @param mixed $post_id
227
- * @param mixed $post
228
  *
229
  * @return void
230
  */
@@ -259,8 +259,8 @@ class DLM_Admin_Writepanels {
259
  *
260
  * @access public
261
  *
262
- * @param mixed $post_id
263
- * @param mixed $post
264
  *
265
  * @return void
266
  */
@@ -371,4 +371,4 @@ class DLM_Admin_Writepanels {
371
 
372
  do_action( 'dlm_save_metabox', $post_id, $post );
373
  }
374
- }
61
  *
62
  * @access public
63
  *
64
+ * @param WP_Post $post
65
  *
66
  * @return void
67
  */
100
  *
101
  * @access public
102
  *
103
+ * @param WP_Post $post
104
  *
105
  * @return void
106
  */
116
  echo '<p class="form-field form-field-checkbox">
117
  <input type="checkbox" name="_featured" id="_featured" ' . checked( get_post_meta( $thepostid, '_featured', true ), 'yes', false ) . ' />
118
  <label for="_featured">' . __( 'Featured download', 'download-monitor' ) . '</label>
119
+ <span class="dlm-description">' . __( 'Mark this download as featured. Used by shortcodes and widgets.', 'download-monitor' ) . '</span>
120
  </p>';
121
 
122
  echo '<p class="form-field form-field-checkbox">
123
  <input type="checkbox" name="_members_only" id="_members_only" ' . checked( get_post_meta( $thepostid, '_members_only', true ), 'yes', false ) . ' />
124
  <label for="_members_only">' . __( 'Members only', 'download-monitor' ) . '</label>
125
+ <span class="dlm-description">' . __( 'Only logged in users will be able to access the file via a download link if this is enabled.', 'download-monitor' ) . '</span>
126
  </p>';
127
 
128
  echo '<p class="form-field form-field-checkbox">
129
  <input type="checkbox" name="_redirect_only" id="_redirect_only" ' . checked( get_post_meta( $thepostid, '_redirect_only', true ), 'yes', false ) . ' />
130
  <label for="_redirect_only">' . __( 'Redirect to file', 'download-monitor' ) . '</label>
131
+ <span class="dlm-description">' . __( 'Don\'t force download. If the <code>dlm_uploads</code> folder is protected you may need to move your file.', 'download-monitor' ) . '</span>
132
  </p>';
133
 
134
  do_action( 'dlm_options_end', $thepostid );
202
  *
203
  * @access public
204
  *
205
+ * @param WP_Post $post
206
  *
207
  * @return void
208
  */
223
  *
224
  * @access public
225
  *
226
+ * @param int $post_id
227
+ * @param WP_Post $post
228
  *
229
  * @return void
230
  */
259
  *
260
  * @access public
261
  *
262
+ * @param int $post_id
263
+ * @param WP_Post $post
264
  *
265
  * @return void
266
  */
371
 
372
  do_action( 'dlm_save_metabox', $post_id, $post );
373
  }
374
+ }
includes/admin/class-dlm-admin.php CHANGED
@@ -144,14 +144,6 @@ class DLM_Admin {
144
  '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' ),
145
  'type' => 'checkbox'
146
  ),
147
- array(
148
- 'name' => 'dlm_no_access_error',
149
- 'std' => sprintf( __( 'You do not have permission to access this download. %sGo to homepage%s', 'download-monitor' ), '<a href="' . home_url() . '">', '</a>' ),
150
- 'placeholder' => '',
151
- 'label' => __( 'No access message', 'download-monitor' ),
152
- 'desc' => __( "The message that will be displayed to visitors when they don't have access to a file.", 'download-monitor' ),
153
- 'type' => 'textarea'
154
- ),
155
  ),
156
  ),
157
  'endpoints' => array(
@@ -217,11 +209,32 @@ class DLM_Admin {
217
  'desc' => __( 'Log download attempts, IP addresses and more.', 'download-monitor' ),
218
  'type' => 'checkbox'
219
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  array(
221
  'name' => 'dlm_ip_blacklist',
222
- 'std' => '192.168.0.*',
223
  'label' => __( 'Blacklist IPs', 'download-monitor' ),
224
- 'desc' => __( 'List IP Addresses to blacklist, 1 per line. Use <code>*</code> for a wildcard.', 'download-monitor' ),
225
  'placeholder' => '',
226
  'type' => 'textarea'
227
  ),
@@ -346,6 +359,30 @@ class DLM_Admin {
346
  $admin_extensions->output();
347
  }
348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  /**
350
  * settings_page function.
351
  *
@@ -353,7 +390,12 @@ class DLM_Admin {
353
  * @return void
354
  */
355
  public function settings_page() {
 
 
356
  $this->init_settings();
 
 
 
357
  ?>
358
  <div class="wrap">
359
  <form method="post" action="options.php">
@@ -370,9 +412,11 @@ class DLM_Admin {
370
  </h2><br/>
371
 
372
  <?php
 
373
  if ( ! empty( $_GET['settings-updated'] ) ) {
 
374
  flush_rewrite_rules();
375
- echo '<div class="updated fade"><p>' . __( 'Settings successfully saved', 'download-monitor' ) . '</p></div>';
376
  }
377
 
378
  foreach ( $this->settings as $key => $section ) {
@@ -403,7 +447,7 @@ class DLM_Admin {
403
  </label><?php
404
 
405
  if ( $option['desc'] ) {
406
- echo ' <p class="description">' . $option['desc'] . '</p>';
407
  }
408
 
409
  break;
@@ -414,7 +458,7 @@ class DLM_Admin {
414
  name="<?php echo $option['name']; ?>" <?php echo $placeholder; ?>><?php echo esc_textarea( $value ); ?></textarea><?php
415
 
416
  if ( $option['desc'] ) {
417
- echo ' <p class="description">' . $option['desc'] . '</p>';
418
  }
419
 
420
  break;
@@ -428,7 +472,7 @@ class DLM_Admin {
428
  ?></select><?php
429
 
430
  if ( $option['desc'] ) {
431
- echo ' <p class="description">' . $option['desc'] . '</p>';
432
  }
433
 
434
  break;
@@ -439,7 +483,7 @@ class DLM_Admin {
439
  value="<?php esc_attr_e( $value ); ?>" <?php echo $placeholder; ?> /><?php
440
 
441
  if ( $option['desc'] ) {
442
- echo ' <p class="description">' . $option['desc'] . '</p>';
443
  }
444
 
445
  break;
144
  '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' ),
145
  'type' => 'checkbox'
146
  ),
 
 
 
 
 
 
 
 
147
  ),
148
  ),
149
  'endpoints' => array(
209
  'desc' => __( 'Log download attempts, IP addresses and more.', 'download-monitor' ),
210
  'type' => 'checkbox'
211
  ),
212
+ array(
213
+ 'name' => 'dlm_count_unique_ips',
214
+ 'std' => '',
215
+ 'label' => __( 'Count unique IPs only', 'download-monitor' ),
216
+ 'cb_label' => __( 'Enable', 'download-monitor' ),
217
+ 'desc' => __( 'If enabled, the counter for each download will only increment and create a log entry once per IP address.', 'download-monitor' ),
218
+ 'type' => 'checkbox'
219
+ ),
220
+ )
221
+ ),
222
+ 'access' => array(
223
+ __( 'Access', 'download-monitor' ),
224
+ array(
225
+ array(
226
+ 'name' => 'dlm_no_access_error',
227
+ 'std' => sprintf( __( 'You do not have permission to access this download. %sGo to homepage%s', 'download-monitor' ), '<a href="' . home_url() . '">', '</a>' ),
228
+ 'placeholder' => '',
229
+ 'label' => __( 'No access message', 'download-monitor' ),
230
+ 'desc' => __( "The message that will be displayed to visitors when they don't have access to a file.", 'download-monitor' ),
231
+ 'type' => 'textarea'
232
+ ),
233
  array(
234
  'name' => 'dlm_ip_blacklist',
235
+ 'std' => '192.168.0.0/24',
236
  'label' => __( 'Blacklist IPs', 'download-monitor' ),
237
+ 'desc' => __( 'List IP Addresses to blacklist, 1 per line. Use IP/CIDR netmask format for ranges. IPv4 examples: <code>198.51.100.1</code> or <code>198.51.100.0/24</code>. IPv6 examples: <code>2001:db8::1</code> or <code>2001:db8::/32</code>.', 'download-monitor' ),
238
  'placeholder' => '',
239
  'type' => 'textarea'
240
  ),
359
  $admin_extensions->output();
360
  }
361
 
362
+ /**
363
+ * Print global notices
364
+ */
365
+ private function print_global_notices() {
366
+
367
+ // check for nginx
368
+ if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'nginx' ) !== false && 1 != get_option( 'dlm_hide_notice-nginx_rules', 0 ) ) {
369
+
370
+ // get upload dir
371
+ $upload_dir = wp_upload_dir();
372
+
373
+ // replace document root because nginx uses path from document root
374
+ $upload_path = str_replace( $_SERVER['DOCUMENT_ROOT'], '', $upload_dir['basedir'] );
375
+
376
+ // form nginx rules
377
+ $nginx_rules = "location " . $upload_path . "/dlm_uploads {<br/>deny all;<br/>return 403;<br/>}";
378
+ echo '<div class="error notice is-dismissible dlm-notice" id="nginx_rules" data-nonce="' . wp_create_nonce( 'dlm_hide_notice-nginx_rules' ) . '">';
379
+ echo '<p>' . __( "Because your server is running on nginx, our .htaccess file can't protect your downloads.", 'download-monitor' );
380
+ echo '<br/>' . sprintf( __( "Please add the following rules to your nginx config to disable direct file access: %s", 'download-monitor' ), '<br/><br/><code>' . $nginx_rules . '</code>' ) . '</p>';
381
+ echo '</div>';
382
+ }
383
+
384
+ }
385
+
386
  /**
387
  * settings_page function.
388
  *
390
  * @return void
391
  */
392
  public function settings_page() {
393
+
394
+ // initialize settings
395
  $this->init_settings();
396
+
397
+ // print global notices
398
+ $this->print_global_notices();
399
  ?>
400
  <div class="wrap">
401
  <form method="post" action="options.php">
412
  </h2><br/>
413
 
414
  <?php
415
+
416
  if ( ! empty( $_GET['settings-updated'] ) ) {
417
+
418
  flush_rewrite_rules();
419
+ echo '<div class="updated notice is-dismissible"><p>' . __( 'Settings successfully saved', 'download-monitor' ) . '</p></div>';
420
  }
421
 
422
  foreach ( $this->settings as $key => $section ) {
447
  </label><?php
448
 
449
  if ( $option['desc'] ) {
450
+ echo ' <p class="dlm-description">' . $option['desc'] . '</p>';
451
  }
452
 
453
  break;
458
  name="<?php echo $option['name']; ?>" <?php echo $placeholder; ?>><?php echo esc_textarea( $value ); ?></textarea><?php
459
 
460
  if ( $option['desc'] ) {
461
+ echo ' <p class="dlm-description">' . $option['desc'] . '</p>';
462
  }
463
 
464
  break;
472
  ?></select><?php
473
 
474
  if ( $option['desc'] ) {
475
+ echo ' <p class="dlm-description">' . $option['desc'] . '</p>';
476
  }
477
 
478
  break;
483
  value="<?php esc_attr_e( $value ); ?>" <?php echo $placeholder; ?> /><?php
484
 
485
  if ( $option['desc'] ) {
486
+ echo ' <p class="dlm-description">' . $option['desc'] . '</p>';
487
  }
488
 
489
  break;
includes/admin/class-dlm-logging-list-table.php CHANGED
@@ -52,13 +52,13 @@ class DLM_Logging_List_Table extends WP_List_Table {
52
  case 'status' :
53
  switch ( $log->download_status ) {
54
  case 'failed' :
55
- $download_status = '<span class="failed" title="' . esc_attr( $log->download_status_message ) . '">&#10082;</span>';
56
  break;
57
  case 'redirected' :
58
- $download_status = '<span class="redirected" title="' . esc_attr( $log->download_status_message ) . '">&#10140;</span>';
59
  break;
60
  default :
61
- $download_status = '<span class="completed" title="' . __( 'Download Complete', 'download-monitor' ) . '">&#10004;</span>';
62
  break;
63
  }
64
 
52
  case 'status' :
53
  switch ( $log->download_status ) {
54
  case 'failed' :
55
+ $download_status = '<span class="failed" title="' . esc_attr( $log->download_status_message ) . '">&nbsp;</span>';
56
  break;
57
  case 'redirected' :
58
+ $download_status = '<span class="redirected" title="' . esc_attr( $log->download_status_message ) . '">&nbsp;</span>';
59
  break;
60
  default :
61
+ $download_status = '<span class="completed" title="' . __( 'Download Complete', 'download-monitor' ) . '">&nbsp;</span>';
62
  break;
63
  }
64
 
includes/admin/uaparser/uaparser.php CHANGED
@@ -44,7 +44,7 @@ class UAParser {
44
 
45
  $regexesFile = ($customRegexesFile !== null) ? $customRegexesFile : dirname(__FILE__).DIRECTORY_SEPARATOR.'resources/regexes.json';
46
  if (file_exists($regexesFile)) {
47
- $this->regexes = json_decode(file_get_contents($regexesFile));
48
  } else {
49
  $title = 'Error loading ua-parser';
50
  if ($customRegexesFile !== null) {
44
 
45
  $regexesFile = ($customRegexesFile !== null) ? $customRegexesFile : dirname(__FILE__).DIRECTORY_SEPARATOR.'resources/regexes.json';
46
  if (file_exists($regexesFile)) {
47
+ $this->regexes = apply_filters( 'dlm_ua_parser_regexes', json_decode( file_get_contents( $regexesFile ) ) );
48
  } else {
49
  $title = 'Error loading ua-parser';
50
  if ($customRegexesFile !== null) {
includes/class-dlm-ajax-handler.php CHANGED
@@ -20,6 +20,7 @@ class DLM_Ajax_Handler {
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
  /**
@@ -152,6 +153,29 @@ class DLM_Ajax_Handler {
152
  die();
153
  }
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  /**
156
  * Handle extensions AJAX
157
  */
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
+ add_action( 'wp_ajax_dlm_dismiss_notice', array( $this, 'dismiss_notice' ) );
24
  }
25
 
26
  /**
153
  die();
154
  }
155
 
156
+ /**
157
+ * Handle notice dismissal
158
+ */
159
+ public function dismiss_notice() {
160
+
161
+ // check notice
162
+ if ( ! isset( $_POST['notice'] ) || empty( $_POST['notice'] ) ) {
163
+ exit;
164
+ }
165
+
166
+ // the notice
167
+ $notice = $_POST['notice'];
168
+
169
+ // check nonce
170
+ check_ajax_referer( 'dlm_hide_notice-' . $notice, 'nonce' );
171
+
172
+ // update option
173
+ update_option( 'dlm_hide_notice-' . $notice, 1 );
174
+
175
+ // send JSON
176
+ wp_send_json( array( 'response' => 'success' ) );
177
+ }
178
+
179
  /**
180
  * Handle extensions AJAX
181
  */
includes/class-dlm-download-handler.php CHANGED
@@ -27,12 +27,12 @@ class DLM_Download_Handler {
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_filter( '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
  *
@@ -43,10 +43,10 @@ class DLM_Download_Handler {
43
  *
44
  * @return boolean
45
  */
46
- public function check_access( $can_download, $download ) {
47
 
48
  // Check if download is a 'members only' download
49
- if ( $download->is_members_only() ) {
50
 
51
  // Check if user is logged in
52
  if ( ! is_user_logged_in() ) {
@@ -61,6 +61,99 @@ class DLM_Download_Handler {
61
  return $can_download;
62
  }
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  /**
65
  * add_query_vars function.
66
  *
@@ -170,7 +263,7 @@ class DLM_Download_Handler {
170
  if ( post_password_required( $download_id ) ) {
171
  wp_die( get_the_password_form( $download_id ), __( 'Password Required', 'download-monitor' ) );
172
  }
173
- $this->trigger( $download, $version_id );
174
  } elseif ( $redirect = apply_filters( 'dlm_404_redirect', false ) ) {
175
  wp_redirect( $redirect );
176
  } else {
@@ -183,17 +276,34 @@ class DLM_Download_Handler {
183
 
184
  /**
185
  * Create a log if logging is enabled
 
 
 
 
 
 
186
  */
187
  private function log( $type = '', $status = '', $message = '', $download, $version ) {
188
 
189
  // Logging object
190
  $logging = new DLM_Logging();
191
 
192
- // Check if logging is enabled
193
  if ( $logging->is_logging_enabled() ) {
194
 
195
- // Create log
196
- $logging->create_log( $type, $status, $message, $download, $version );
 
 
 
 
 
 
 
 
 
 
 
197
 
198
  }
199
 
@@ -241,15 +351,29 @@ class DLM_Download_Handler {
241
  exit;
242
  }
243
 
244
- if ( empty( $_COOKIE['wp_dlm_downloading'] ) || $download->id != $_COOKIE['wp_dlm_downloading'] ) {
245
- // Increase download count
246
- $version->increase_download_count();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
 
248
  // Trigger Download Action
249
  do_action( 'dlm_downloading', $download, $version, $file_path );
250
 
251
  // Set cookie to prevent double logging
252
- setcookie( 'wp_dlm_downloading', $download->id, time() + 60, COOKIEPATH, COOKIE_DOMAIN, false, true );
253
  }
254
 
255
  // Redirect to the file...
@@ -358,7 +482,7 @@ class DLM_Download_Handler {
358
  }
359
 
360
  // Get file name
361
- $file_name = urldecode( basename( $file_path ) );
362
 
363
  if ( strstr( $file_name, '?' ) ) {
364
  $file_name = current( explode( '?', $file_name ) );
@@ -425,11 +549,11 @@ class DLM_Download_Handler {
425
  *
426
  * @access public
427
  *
428
- * @param string file
429
- * @param boolean return bytes of file
430
- * @param range if HTTP RANGE to seek
431
  *
432
- * @return void
433
  */
434
  public function readfile_chunked( $file, $retbytes = true, $range = false ) {
435
  $chunksize = 1 * ( 1024 * 1024 );
@@ -462,4 +586,17 @@ class DLM_Download_Handler {
462
 
463
  return $status;
464
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  }
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_filter( 'dlm_can_download', array( $this, 'check_members_only' ), 10, 2 );
31
+ add_filter( 'dlm_can_download', array( $this, 'check_blacklist' ), 10, 2 );
32
  }
33
 
 
34
  /**
35
+ * Check members only (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
  *
43
  *
44
  * @return boolean
45
  */
46
+ public function check_members_only( $can_download, $download ) {
47
 
48
  // Check if download is a 'members only' download
49
+ if ( false !== $can_download && $download->is_members_only() ) {
50
 
51
  // Check if user is logged in
52
  if ( ! is_user_logged_in() ) {
61
  return $can_download;
62
  }
63
 
64
+ /**
65
+ * Check blacklist (hooked into dlm_can_download) checks if the download request comes from blacklisted IP address or user agent
66
+ *
67
+ * Other plugins can use the 'dlm_can_download' filter directly to change access rights.
68
+ *
69
+ * @access public
70
+ *
71
+ * @param boolean $can_download
72
+ * @param mixed $download
73
+ *
74
+ * @return boolean
75
+ */
76
+ public function check_blacklist( $can_download, $download ) {
77
+
78
+ // Check if IP is blacklisted
79
+ if ( false !== $can_download ) {
80
+
81
+ $visitor_ip = DLM_Utils::get_visitor_ip();
82
+ $ip_type = 0;
83
+
84
+ if ( filter_var( $visitor_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
85
+ $ip_type = 4;
86
+ } elseif ( filter_var( $visitor_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
87
+ $ip_type = 6;
88
+ }
89
+
90
+ $blacklisted_ips = preg_split( "/\r?\n/", trim( get_option( 'dlm_ip_blacklist', "" ) ) );
91
+
92
+ /**
93
+ * Until IPs are validated at time of save, we need to ensure entries
94
+ * are legitimate before using them. Allow formats:
95
+ * IPv4, e.g. 198.51.100.1
96
+ * IPv4/CIDR netmask, e.g. 198.51.100.0/24
97
+ * IPv6, e.g. 2001:db8::1
98
+ * IPv6/CIDR netmask, e.g. 2001:db8::/32
99
+ */
100
+
101
+ // IP/CIDR netmask regexes
102
+ // http://blog.markhatton.co.uk/2011/03/15/regular-expressions-for-ip-addresses-cidr-ranges-and-hostnames/
103
+ // http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
104
+ $ip4_with_mask_pattern = '/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$/';
105
+ $ip6_with_mask_pattern = '/^((([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))(\/[0-9][0-9]?|1([01][0-9]|2[0-8])))$/';
106
+
107
+ if ( 4 === $ip_type ) {
108
+ foreach ( $blacklisted_ips as $blacklisted_ip ) {
109
+
110
+ // Detect unique IPv4 address and ranges of IPv4 addresses in IP/CIDR netmask format
111
+ if ( filter_var( $blacklisted_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) || preg_match( $ip4_with_mask_pattern, $blacklisted_ip ) ) {
112
+ if ( DLM_Utils::ipv4_in_range( $visitor_ip, $blacklisted_ip ) ) {
113
+ $can_download = false;
114
+ break;
115
+ }
116
+ }
117
+ }
118
+ } elseif ( 6 === $ip_type ) {
119
+ foreach ( $blacklisted_ips as $blacklisted_ip ) {
120
+
121
+ // Detect unique IPv6 address and ranges of IPv6 addresses in IP/CIDR netmask format
122
+ if ( filter_var( $blacklisted_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) || preg_match( $ip6_with_mask_pattern, $blacklisted_ip ) ) {
123
+ if ( DLM_Utils::ipv6_in_range( $visitor_ip, $blacklisted_ip ) ) {
124
+ $can_download = false;
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ }
130
+
131
+ }
132
+
133
+ // Check if user agent is blacklisted
134
+ if ( false !== $can_download ) {
135
+
136
+ // get request user agent
137
+ $visitor_ua = DLM_Utils::get_visitor_ua();
138
+
139
+ // get blacklisted user agents
140
+ $blacklisted_uas = preg_split( "/\r?\n/", trim( get_option( 'dlm_user_agent_blacklist', "" ) ) );
141
+
142
+ // loop through blacklisted user agents
143
+ foreach ( $blacklisted_uas as $blacklisted_ua ) {
144
+
145
+ // check if blacklisted user agent is found in request user agent
146
+ if ( false !== stristr( $visitor_ua, $blacklisted_ua ) ) {
147
+ $can_download = false;
148
+ break;
149
+ }
150
+ }
151
+
152
+ }
153
+
154
+ return $can_download;
155
+ }
156
+
157
  /**
158
  * add_query_vars function.
159
  *
263
  if ( post_password_required( $download_id ) ) {
264
  wp_die( get_the_password_form( $download_id ), __( 'Password Required', 'download-monitor' ) );
265
  }
266
+ $this->trigger( $download );
267
  } elseif ( $redirect = apply_filters( 'dlm_404_redirect', false ) ) {
268
  wp_redirect( $redirect );
269
  } else {
276
 
277
  /**
278
  * Create a log if logging is enabled
279
+ *
280
+ * @param string $type
281
+ * @param string $status
282
+ * @param string $message
283
+ * @param DLM_Download $download
284
+ * @param DLM_Download_Version $version
285
  */
286
  private function log( $type = '', $status = '', $message = '', $download, $version ) {
287
 
288
  // Logging object
289
  $logging = new DLM_Logging();
290
 
291
+ // Check if logging is enabled and if unique ips is enabled
292
  if ( $logging->is_logging_enabled() ) {
293
 
294
+ // set create_log to true
295
+ $create_log = true;
296
+
297
+ // check if requester downloaded this version before
298
+ if ( '1' == get_option( 'dlm_count_unique_ips', '0' ) && true === $this->has_ip_downloaded_version( $version ) ) {
299
+ $create_log = false;
300
+ }
301
+
302
+ // check if we need to create the log
303
+ if ( $create_log ) {
304
+ // Create log
305
+ $logging->create_log( $type, $status, $message, $download, $version );
306
+ }
307
 
308
  }
309
 
351
  exit;
352
  }
353
 
354
+ // check if user downloaded this version in the past minute
355
+ if ( empty( $_COOKIE['wp_dlm_downloading'] ) || $download->get_the_version_number() != $_COOKIE['wp_dlm_downloading'] ) {
356
+
357
+
358
+ // bool if we need to increment download count
359
+ $increment_download_count = true;
360
+
361
+ // check if unique ips option is enabled and if so, if visitor already downloaded this file version
362
+ if ( '1' == get_option( 'dlm_enable_logging' ) && '1' == get_option( 'dlm_count_unique_ips' ) && true === $this->has_ip_downloaded_version( $version ) ) {
363
+ $increment_download_count = false;
364
+ }
365
+
366
+ // check if we need to increment the download count
367
+ if ( true === $increment_download_count ) {
368
+ // Increase download count
369
+ $version->increase_download_count();
370
+ }
371
 
372
  // Trigger Download Action
373
  do_action( 'dlm_downloading', $download, $version, $file_path );
374
 
375
  // Set cookie to prevent double logging
376
+ setcookie( 'wp_dlm_downloading', $download->get_the_version_number(), time() + 60, COOKIEPATH, COOKIE_DOMAIN, false, true );
377
  }
378
 
379
  // Redirect to the file...
482
  }
483
 
484
  // Get file name
485
+ $file_name = urldecode( DLM_Utils::basename( $file_path ) );
486
 
487
  if ( strstr( $file_name, '?' ) ) {
488
  $file_name = current( explode( '?', $file_name ) );
549
  *
550
  * @access public
551
  *
552
+ * @param string $file
553
+ * @param boolean $retbytes return bytes of file
554
+ * @param boolean $range if HTTP RANGE to seek
555
  *
556
+ * @return mixed
557
  */
558
  public function readfile_chunked( $file, $retbytes = true, $range = false ) {
559
  $chunksize = 1 * ( 1024 * 1024 );
586
 
587
  return $status;
588
  }
589
+
590
+ /**
591
+ * Check if visitor has downloaded version in the past 24 hours
592
+ *
593
+ * @param DLM_Download_Version $version
594
+ *
595
+ * @return bool
596
+ */
597
+ private function has_ip_downloaded_version( $version ) {
598
+ global $wpdb;
599
+
600
+ return ( absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->download_log} WHERE type = 'download' AND `version_id` = %d AND `user_ip` = %s", $version->id, DLM_Utils::get_visitor_ip() ) ) ) > 0 );
601
+ }
602
  }
includes/class-dlm-download-version.php CHANGED
@@ -92,7 +92,7 @@ class DLM_Download_Version {
92
  }
93
 
94
  $this->url = current( $this->mirrors );
95
- $this->filename = current( explode( '?', basename( $this->url ) ) );
96
  $this->filetype = strtolower( substr( strrchr( $this->filename, "." ), 1 ) );
97
 
98
  // If we don't have a filesize, lets get it now
92
  }
93
 
94
  $this->url = current( $this->mirrors );
95
+ $this->filename = current( explode( '?', DLM_Utils::basename( $this->url ) ) );
96
  $this->filetype = strtolower( substr( strrchr( $this->filename, "." ), 1 ) );
97
 
98
  // If we don't have a filesize, lets get it now
includes/class-dlm-file-manager.php CHANGED
@@ -14,40 +14,27 @@ class DLM_File_Manager {
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
  /**
14
  *
15
  * @param string $folder (default: '')
16
  *
17
+ * @return array
18
  */
19
  public function list_files( $folder = '' ) {
20
  if ( empty( $folder ) ) {
21
  return false;
22
  }
23
 
24
+ // A listing of all files and dirs in $folder, excepting . and ..
25
+ // By default, the sorted order is alphabetical in ascending order
26
+ $files = array_diff( scandir( $folder ), array( '..', '.' ) );
 
 
 
 
 
27
 
28
+ $dlm_files = array();
 
 
 
 
 
29
 
30
+ foreach ( $files as $file ) {
31
+ $dlm_files[] = array(
32
+ 'type' => ( is_dir( $folder . '/' . $file ) ? 'folder' : 'file' ),
33
+ 'path' => $folder . '/' . $file
34
+ );
 
 
35
  }
 
36
 
37
+ return $dlm_files;
38
  }
39
 
40
  /**
includes/class-dlm-logging.php CHANGED
@@ -34,8 +34,8 @@ class DLM_Logging {
34
  array(
35
  'type' => $type,
36
  'user_id' => absint( get_current_user_id() ),
37
- 'user_ip' => $this->get_user_ip(),
38
- 'user_agent' => $this->get_user_ua(),
39
  'download_id' => absint( $download->id ),
40
  'version_id' => absint( $version->id ),
41
  'version' => $version->version,
@@ -59,30 +59,5 @@ class DLM_Logging {
59
  return $wpdb->insert_id;
60
  }
61
 
62
- /**
63
- * get_user_ip function.
64
- *
65
- * @access private
66
- * @return void
67
- */
68
- private function get_user_ip() {
69
- return sanitize_text_field( ! empty( $_SERVER['HTTP_X_FORWARD_FOR'] ) ? $_SERVER['HTTP_X_FORWARD_FOR'] : $_SERVER['REMOTE_ADDR'] );
70
- }
71
-
72
- /**
73
- * get_user_ua function.
74
- *
75
- * @access private
76
- * @return void
77
- */
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
 
34
  array(
35
  'type' => $type,
36
  'user_id' => absint( get_current_user_id() ),
37
+ 'user_ip' => DLM_Utils::get_visitor_ip(),
38
+ 'user_agent' => DLM_Utils::get_visitor_ua(),
39
  'download_id' => absint( $download->id ),
40
  'version_id' => absint( $version->id ),
41
  'version' => $version->version,
59
  return $wpdb->insert_id;
60
  }
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
 
includes/class-dlm-shortcodes.php CHANGED
@@ -82,7 +82,7 @@ class DLM_Shortcodes {
82
  $hijacked_content = apply_filters( 'dlm_shortcode_download_content', '', $id, $atts );
83
 
84
  // If there's hijacked content, return it and be done with it
85
- if( '' !== $hijacked_content ) {
86
  return $hijacked_content;
87
  }
88
 
@@ -93,7 +93,7 @@ class DLM_Shortcodes {
93
 
94
  if ( $download->exists() ) {
95
 
96
- if ( isset( $version ) && 0 != $version ) {
97
  $version_id = $dlm_download->get_version_id( $version );
98
  }
99
 
@@ -124,7 +124,7 @@ class DLM_Shortcodes {
124
  while ( $downloads->have_posts() ) {
125
  $downloads->the_post();
126
 
127
- if ( isset( $version ) && 0 != $version ) {
128
  $version_id = $dlm_download->get_version_id( $version );
129
  }
130
 
@@ -178,7 +178,7 @@ class DLM_Shortcodes {
178
 
179
  $download = new DLM_Download( $id );
180
 
181
- if ( isset( $version ) && 0 != $version ) {
182
  $version_id = $download->get_version_id( $version );
183
  }
184
 
@@ -315,16 +315,55 @@ class DLM_Shortcodes {
315
  if ( $category || $tag ) {
316
  $args['tax_query'] = array( 'relation' => 'AND' );
317
 
318
- $categories = array_filter( explode( ',', $category ) );
319
- $tags = array_filter( explode( ',', $tag ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
 
321
- if ( ! empty( $categories ) ) {
322
- $args['tax_query'][] = array(
323
- 'taxonomy' => 'dlm_download_category',
324
- 'field' => 'slug',
325
- 'terms' => $categories,
326
- 'include_children' => ( $category_include_children === 'true' || $category_include_children === true )
327
- );
328
  }
329
 
330
  if ( ! empty( $tags ) ) {
82
  $hijacked_content = apply_filters( 'dlm_shortcode_download_content', '', $id, $atts );
83
 
84
  // If there's hijacked content, return it and be done with it
85
+ if ( '' !== $hijacked_content ) {
86
  return $hijacked_content;
87
  }
88
 
93
 
94
  if ( $download->exists() ) {
95
 
96
+ if ( ! empty( $version ) ) {
97
  $version_id = $dlm_download->get_version_id( $version );
98
  }
99
 
124
  while ( $downloads->have_posts() ) {
125
  $downloads->the_post();
126
 
127
+ if ( ! empty( $version ) ) {
128
  $version_id = $dlm_download->get_version_id( $version );
129
  }
130
 
178
 
179
  $download = new DLM_Download( $id );
180
 
181
+ if ( ! empty( $version ) ) {
182
  $version_id = $download->get_version_id( $version );
183
  }
184
 
315
  if ( $category || $tag ) {
316
  $args['tax_query'] = array( 'relation' => 'AND' );
317
 
318
+ $tags = array_filter( explode( ',', $tag ) );
319
+
320
+ // check if we include category children
321
+ $include_children = ( $category_include_children === 'true' || $category_include_children === true );
322
+
323
+ if ( ! empty( $category ) ) {
324
+
325
+ if ( preg_match( '/\+/', $category ) ) {
326
+
327
+ // categories with AND
328
+
329
+ // string to array
330
+ $categories = array_filter( explode( '+', $category ) );
331
+
332
+ // check if explode had results
333
+ if ( ! empty( $categories ) ) {
334
+
335
+ foreach($categories as $category) {
336
+ $args['tax_query'][] = array(
337
+ 'taxonomy' => 'dlm_download_category',
338
+ 'field' => 'slug',
339
+ 'terms' => $category,
340
+ 'include_children' => $include_children
341
+ );
342
+ }
343
+
344
+ }
345
+
346
+ }else {
347
+
348
+ // categories with OR
349
+
350
+ // string to array
351
+ $categories = array_filter( explode( ',', $category ) );
352
+
353
+ // check if explode had results
354
+ if ( ! empty( $categories ) ) {
355
+
356
+ $args['tax_query'][] = array(
357
+ 'taxonomy' => 'dlm_download_category',
358
+ 'field' => 'slug',
359
+ 'terms' => $categories,
360
+ 'include_children' => $include_children
361
+ );
362
+
363
+ }
364
+
365
+ }
366
 
 
 
 
 
 
 
 
367
  }
368
 
369
  if ( ! empty( $tags ) ) {
includes/class-dlm-utils.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class DLM_Utils {
4
+
5
+ /**
6
+ * Get visitor's IP address
7
+ *
8
+ * @return string
9
+ */
10
+ public static function get_visitor_ip() {
11
+ return sanitize_text_field( ! empty( $_SERVER['HTTP_X_FORWARD_FOR'] ) ? $_SERVER['HTTP_X_FORWARD_FOR'] : $_SERVER['REMOTE_ADDR'] );
12
+ }
13
+
14
+ /**
15
+ * Get visitor's user agent
16
+ *
17
+ * @return string
18
+ */
19
+ public static function get_visitor_ua() {
20
+ $ua = sanitize_text_field( isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '' );
21
+
22
+ if ( strlen( $ua ) > 200 ) {
23
+ $ua = substr( $ua, 0, 199 );
24
+ }
25
+
26
+ return $ua;
27
+ }
28
+
29
+ /**
30
+ * Check if a given ip is in a network (IPv4)
31
+ * https://gist.github.com/tott/7684443
32
+ *
33
+ * @param string $ip IP to check in IPv4 format eg. 127.0.0.1
34
+ * @param string $range IP/CIDR netmask eg. 127.0.0.0/24, also 127.0.0.1 is accepted and /32 assumed
35
+ * @return boolean true if the ip is in this range / false if not.
36
+ */
37
+ public static function ipv4_in_range( $ip, $range ) {
38
+ if ( strpos( $range, '/' ) == false ) {
39
+ $range .= '/32';
40
+ }
41
+
42
+ list( $range, $netmask ) = explode( '/', $range, 2 );
43
+ $range_decimal = ip2long( $range );
44
+ $ip_decimal = ip2long( $ip );
45
+ $wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
46
+ $netmask_decimal = ~ $wildcard_decimal;
47
+ return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
48
+ }
49
+
50
+ /**
51
+ * Helper function for ipv6_in_range()
52
+ * Converts inet_pton output to string with bits
53
+ */
54
+ private static function inet_to_bits( $inet ) {
55
+ $unpacked = unpack( 'A16', $inet );
56
+ $unpacked = str_split( $unpacked[1] );
57
+ $binaryip = '';
58
+
59
+ foreach ( $unpacked as $char ) {
60
+ $binaryip .= str_pad( decbin( ord( $char ) ), 8, '0', STR_PAD_LEFT );
61
+ }
62
+
63
+ return $binaryip;
64
+ }
65
+
66
+ /**
67
+ * Check if a given ip is in a network (IPv6)
68
+ * http://stackoverflow.com/questions/7951061/matching-ipv6-address-to-a-cidr-subnet
69
+ *
70
+ * @param string $ip IP to check in IPv6 format eg. 2001:db8::1
71
+ * @param string $range IP/CIDR netmask eg. 2001:db8::/32, also 2001:db8::1 is accepted and /128 assumed
72
+ * @return boolean true if the ip is in this range / false if not.
73
+ */
74
+ public static function ipv6_in_range( $ip, $range ) {
75
+ // Windows didn't get inet_pton until PHP 5.3.0
76
+ if ( ! function_exists( 'inet_pton' ) ) {
77
+ return false;
78
+ }
79
+
80
+ if ( strpos( $range, '/' ) == false ) {
81
+ $range .= '/128';
82
+ }
83
+
84
+ $ip = inet_pton( $ip );
85
+ $binaryip = self::inet_to_bits( $ip );
86
+
87
+ list( $net, $maskbits ) = explode( '/', $range, 3 );
88
+ $net = inet_pton( $net );
89
+ $binarynet = self::inet_to_bits( $net );
90
+
91
+ $ip_net_bits = substr( $binaryip, 0, $maskbits );
92
+ $net_bits = substr( $binarynet, 0, $maskbits );
93
+
94
+ return ( $ip_net_bits === $net_bits );
95
+ }
96
+
97
+ /**
98
+ * Local independent basename
99
+ *
100
+ * @param string $filepath
101
+ *
102
+ * @return string
103
+ */
104
+ public static function basename( $filepath ) {
105
+ return preg_replace('/^.+[\\\\\\/]/', '', $filepath);
106
+ }
107
+
108
+ }
includes/class-wp-dlm.php CHANGED
@@ -74,6 +74,8 @@ class WP_DLM {
74
  // Setup admin classes
75
  if ( is_admin() ) {
76
 
 
 
77
  // Setup admin scripts
78
  $admin_scripts = new DLM_Admin_Scripts();
79
  $admin_scripts->setup();
@@ -140,7 +142,7 @@ class WP_DLM {
140
  private function setup_actions() {
141
  add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_links' ) );
142
  add_action( 'init', array( $this, 'register_globals' ) );
143
- add_action( 'after_setup_theme', array( $this, 'compatibility' ) );
144
  add_action( 'the_post', array( $this, 'setup_download_data' ) );
145
  add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ) );
146
  add_action( 'admin_init', array( $this, 'load_extensions' ) );
@@ -171,6 +173,7 @@ class WP_DLM {
171
  * @return void
172
  */
173
  public function compatibility() {
 
174
  // Post thumbnail support
175
  if ( ! current_theme_supports( 'post-thumbnails' ) ) {
176
  add_theme_support( 'post-thumbnails' );
74
  // Setup admin classes
75
  if ( is_admin() ) {
76
 
77
+ // check if multisite and needs to create DB table
78
+
79
  // Setup admin scripts
80
  $admin_scripts = new DLM_Admin_Scripts();
81
  $admin_scripts->setup();
142
  private function setup_actions() {
143
  add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_links' ) );
144
  add_action( 'init', array( $this, 'register_globals' ) );
145
+ add_action( 'after_setup_theme', array( $this, 'compatibility' ), 20 );
146
  add_action( 'the_post', array( $this, 'setup_download_data' ) );
147
  add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ) );
148
  add_action( 'admin_init', array( $this, 'load_extensions' ) );
173
  * @return void
174
  */
175
  public function compatibility() {
176
+
177
  // Post thumbnail support
178
  if ( ! current_theme_supports( 'post-thumbnails' ) ) {
179
  add_theme_support( 'post-thumbnails' );
includes/widgets/class-dlm-widget-downloads.php CHANGED
@@ -20,9 +20,8 @@ class DLM_Widget_Downloads extends WP_Widget {
20
  * constructor
21
  *
22
  * @access public
23
- * @return void
24
  */
25
- function DLM_Widget_Downloads() {
26
 
27
  /* Widget variable settings. */
28
  $this->widget_cssclass = 'dlm_widget_downloads';
@@ -34,7 +33,7 @@ class DLM_Widget_Downloads extends WP_Widget {
34
  $widget_ops = array( 'classname' => $this->widget_cssclass, 'description' => $this->widget_description );
35
 
36
  /* Create the widget. */
37
- $this->WP_Widget( 'dlm_widget_downloads', $this->widget_name, $widget_ops );
38
  }
39
 
40
  /**
@@ -48,7 +47,7 @@ class DLM_Widget_Downloads extends WP_Widget {
48
  *
49
  * @return void
50
  */
51
- function widget( $args, $instance ) {
52
 
53
  // Extract the arguments
54
  extract( $args );
@@ -133,7 +132,7 @@ class DLM_Widget_Downloads extends WP_Widget {
133
  *
134
  * @return array
135
  */
136
- function update( $new_instance, $old_instance ) {
137
  $instance = $old_instance;
138
  $instance['title'] = strip_tags( $new_instance['title'] );
139
  $instance['posts_per_page'] = absint( $new_instance['posts_per_page'] );
@@ -156,7 +155,7 @@ class DLM_Widget_Downloads extends WP_Widget {
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'] ) : '';
20
  * constructor
21
  *
22
  * @access public
 
23
  */
24
+ public function __construct() {
25
 
26
  /* Widget variable settings. */
27
  $this->widget_cssclass = 'dlm_widget_downloads';
33
  $widget_ops = array( 'classname' => $this->widget_cssclass, 'description' => $this->widget_description );
34
 
35
  /* Create the widget. */
36
+ parent::__construct('dlm_widget_downloads', $this->widget_name, $widget_ops );
37
  }
38
 
39
  /**
47
  *
48
  * @return void
49
  */
50
+ public function widget( $args, $instance ) {
51
 
52
  // Extract the arguments
53
  extract( $args );
132
  *
133
  * @return array
134
  */
135
+ public function update( $new_instance, $old_instance ) {
136
  $instance = $old_instance;
137
  $instance['title'] = strip_tags( $new_instance['title'] );
138
  $instance['posts_per_page'] = absint( $new_instance['posts_per_page'] );
155
  *
156
  * @return void
157
  */
158
+ public function form( $instance ) {
159
  $title = isset( $instance['title'] ) ? $instance['title'] : __( 'Featured Downloads', 'download-monitor' );
160
  $posts_per_page = isset( $instance['posts_per_page'] ) ? absint( $instance['posts_per_page'] ) : 10;
161
  $format = isset( $instance['format'] ) ? sanitize_title( $instance['format'] ) : '';
installer-functions.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
+ /**
8
+ * Plugin activation hook.
9
+ * When site is multisite and plugin is network activated, installer will run for each blog
10
+ *
11
+ * @param bool $network_wide
12
+ */
13
+ function __download_monitor_install( $network_wide = false ) {
14
+
15
+ // Load installer functions
16
+ require_once plugin_dir_path( DLM_PLUGIN_FILE_INSTALLER ) . 'includes/class-dlm-installer.php';
17
+
18
+ // DLM Installer
19
+ $installer = new DLM_Installer();
20
+
21
+ // check if
22
+ if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
23
+ require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
24
+ }
25
+
26
+ // check if it's multisite
27
+ if ( is_multisite() && true == $network_wide ) {
28
+
29
+ // get websites
30
+ $sites = wp_get_sites();
31
+
32
+ // loop
33
+ if ( count( $sites ) > 0 ) {
34
+ foreach ( $sites as $site ) {
35
+
36
+ // switch to blog
37
+ switch_to_blog( $site['blog_id'] );
38
+
39
+ // run installer on blog
40
+ $installer->install();
41
+
42
+ // restore current blog
43
+ restore_current_blog();
44
+ }
45
+ }
46
+
47
+ } else {
48
+ // no multisite so do normal install
49
+ $installer->install();
50
+ }
51
+
52
+ }
53
+
54
+
55
+ /**
56
+ * Run installer for new blogs on multisite when plugin is network activated
57
+ *
58
+ * @param $blog_id
59
+ * @param $user_id
60
+ * @param $domain
61
+ * @param $path
62
+ * @param $site_id
63
+ * @param $meta
64
+ */
65
+ function __download_monitor_mu_new_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
66
+
67
+ // check if plugin is network activated
68
+ if ( is_plugin_active_for_network( 'download-monitor/download-monitor.php' ) ) {
69
+
70
+ // DLM Installer
71
+ $installer = new DLM_Installer();
72
+
73
+ // switch to new blog
74
+ switch_to_blog( $blog_id );
75
+
76
+ // run installer on blog
77
+ $installer->install();
78
+
79
+
80
+ // restore current bloh
81
+ restore_current_blog();
82
+ }
83
+ }
84
+ /**
85
+ * Delete DLM log table on multisite when blog is deleted
86
+ *
87
+ * @param $tables
88
+ *
89
+ * @return array
90
+ */
91
+ function __download_monitor_mu_delete_blog( $tables ) {
92
+ global $wpdb;
93
+ $tables[] = $wpdb->prefix . 'download_log';
94
+
95
+ return $tables;
96
+ }
languages/download-monitor-da_DK.mo ADDED
Binary file
languages/download-monitor-da_DK.po ADDED
@@ -0,0 +1,1023 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2015 Barry Kooij & Mike Jolley
2
+ # This file is distributed under the GPL v3.
3
+ # Translators:
4
+ msgid ""
5
+ msgstr ""
6
+ "Project-Id-Version: Download Monitor\n"
7
+ "Report-Msgid-Bugs-To: https://github.com/download-monitor/download-monitor/issues\n"
8
+ "POT-Creation-Date: 2015-03-22 12:53:18+00:00\n"
9
+ "PO-Revision-Date: 2015-05-06 18:23+0000\n"
10
+ "Last-Translator: Barry Kooij <mail@barrykooij.nl>\n"
11
+ "Language-Team: Danish (Denmark) (http://www.transifex.com/p/download-monitor/language/da_DK/)\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Language: da_DK\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Generator: grunt-wp-i18n 0.4.9\n"
18
+
19
+ #: includes/admin/class-dlm-admin-cpt.php:74
20
+ msgid "Select a category"
21
+ msgstr "Vælg en kategori"
22
+
23
+ #: includes/admin/class-dlm-admin-cpt.php:141
24
+ msgid "Download title"
25
+ msgstr "Downloadtitel"
26
+
27
+ #: includes/admin/class-dlm-admin-cpt.php:161
28
+ #: includes/admin/class-dlm-admin-cpt.php:164
29
+ msgid "Download updated."
30
+ msgstr "Download opdateret."
31
+
32
+ #: includes/admin/class-dlm-admin-cpt.php:162
33
+ msgid "Custom field updated."
34
+ msgstr "Brugerdefineret felt opdateret."
35
+
36
+ #: includes/admin/class-dlm-admin-cpt.php:163
37
+ msgid "Custom field deleted."
38
+ msgstr "Brugerdefineret felt slettet."
39
+
40
+ #: includes/admin/class-dlm-admin-cpt.php:165
41
+ msgid "Download restored to revision from %s"
42
+ msgstr "Download gendannet til revision fra %s"
43
+
44
+ #: includes/admin/class-dlm-admin-cpt.php:166
45
+ msgid "Download published."
46
+ msgstr "Download udgivet."
47
+
48
+ #: includes/admin/class-dlm-admin-cpt.php:167
49
+ msgid "Download saved."
50
+ msgstr "Download gemt."
51
+
52
+ #: includes/admin/class-dlm-admin-cpt.php:168
53
+ msgid "Download submitted."
54
+ msgstr "Download indsendt."
55
+
56
+ #: includes/admin/class-dlm-admin-cpt.php:169
57
+ msgid "Download scheduled for: <strong>%1$s</strong>."
58
+ msgstr "Download planlagt til <strong>%1$s</strong>."
59
+
60
+ #: includes/admin/class-dlm-admin-cpt.php:170
61
+ msgid "M j, Y @ G:i"
62
+ msgstr "j. F Y H.i"
63
+
64
+ #: includes/admin/class-dlm-admin-cpt.php:171
65
+ msgid "Download draft updated."
66
+ msgstr "Downloadkladde opdateret."
67
+
68
+ #: includes/admin/class-dlm-admin-cpt.php:190
69
+ msgid "Image"
70
+ msgstr "Billede"
71
+
72
+ #: includes/admin/class-dlm-admin-cpt.php:191
73
+ #: includes/widgets/class-dlm-widget-downloads.php:170
74
+ #: includes/widgets/class-dlm-widget-downloads.php:196
75
+ msgid "Title"
76
+ msgstr "Titel"
77
+
78
+ #: includes/admin/class-dlm-admin-cpt.php:192
79
+ #: includes/admin/class-dlm-admin-writepanels.php:78
80
+ #: includes/widgets/class-dlm-widget-downloads.php:200
81
+ msgid "ID"
82
+ msgstr "ID"
83
+
84
+ #: includes/admin/class-dlm-admin-cpt.php:193
85
+ #: includes/admin/class-dlm-logging-list-table.php:131
86
+ msgid "File"
87
+ msgstr "Fil"
88
+
89
+ #: includes/admin/class-dlm-admin-cpt.php:194
90
+ #: includes/admin/class-dlm-admin-media-insert.php:237
91
+ #: includes/admin/html-downloadable-file-version.php:17
92
+ msgid "Version"
93
+ msgstr "Version"
94
+
95
+ #: includes/admin/class-dlm-admin-cpt.php:195
96
+ #: includes/class-dlm-taxonomy-manager.php:27
97
+ #: includes/class-dlm-taxonomy-manager.php:29
98
+ msgid "Categories"
99
+ msgstr "Kategorier"
100
+
101
+ #: includes/admin/class-dlm-admin-cpt.php:196
102
+ #: includes/class-dlm-taxonomy-manager.php:58
103
+ #: includes/class-dlm-taxonomy-manager.php:60
104
+ msgid "Tags"
105
+ msgstr "Tags"
106
+
107
+ #: includes/admin/class-dlm-admin-cpt.php:197
108
+ #: includes/admin/class-dlm-admin-dashboard.php:77
109
+ #: includes/admin/html-downloadable-file-version.php:59
110
+ #: includes/widgets/class-dlm-widget-downloads.php:206
111
+ msgid "Download count"
112
+ msgstr "Downloadantal"
113
+
114
+ #: includes/admin/class-dlm-admin-cpt.php:198
115
+ msgid "Featured"
116
+ msgstr "Fremhævet"
117
+
118
+ #: includes/admin/class-dlm-admin-cpt.php:199
119
+ #: includes/admin/class-dlm-admin-writepanels.php:124
120
+ msgid "Members only"
121
+ msgstr "Kun medlemmer"
122
+
123
+ #: includes/admin/class-dlm-admin-cpt.php:200
124
+ msgid "Redirect only"
125
+ msgstr "Kun redirect"
126
+
127
+ #: includes/admin/class-dlm-admin-cpt.php:201
128
+ msgid "Date posted"
129
+ msgstr "Udgivelsesdato"
130
+
131
+ #: includes/admin/class-dlm-admin-cpt.php:244
132
+ #: includes/admin/class-dlm-admin-cpt.php:251
133
+ #: includes/admin/class-dlm-admin-cpt.php:258
134
+ msgid "Yes"
135
+ msgstr "Ja"
136
+
137
+ #: includes/admin/class-dlm-admin-dashboard.php:23
138
+ msgid "Popular Downloads"
139
+ msgstr "Populære downloads"
140
+
141
+ #: includes/admin/class-dlm-admin-dashboard.php:58
142
+ msgid "There are no stats available yet!"
143
+ msgstr "Der er endnu ikke nogen statistik!"
144
+
145
+ #: includes/admin/class-dlm-admin-dashboard.php:76
146
+ #: includes/admin/class-dlm-logging-list-table.php:130
147
+ #: includes/class-dlm-post-type-manager.php:23
148
+ msgid "Download"
149
+ msgstr "Download"
150
+
151
+ #: includes/admin/class-dlm-admin-extensions.php:45
152
+ #: includes/admin/class-dlm-admin.php:335
153
+ msgid "Download Monitor Extensions"
154
+ msgstr "Download Monitor-udvidelser"
155
+
156
+ #: includes/admin/class-dlm-admin-extensions.php:76
157
+ msgid ""
158
+ "Extend Download Monitor with its powerful free and paid extensions. %sClick "
159
+ "here to browse all extensions%s"
160
+ msgstr "Udvid Download Monitor ‒ gratis eller mod betaling. %sKlik for at gennemse alle udvidelserne%s"
161
+
162
+ #: includes/admin/class-dlm-admin-media-browser.php:34
163
+ #: includes/admin/class-dlm-admin-scripts.php:96
164
+ msgid "Browse for a file"
165
+ msgstr "Gennemse for fil"
166
+
167
+ #: includes/admin/class-dlm-admin-media-browser.php:108
168
+ msgid "No files found"
169
+ msgstr "Ingen filer fundet"
170
+
171
+ #: includes/admin/class-dlm-admin-media-insert.php:36
172
+ #: includes/admin/class-dlm-admin-media-insert.php:55
173
+ #: includes/admin/class-dlm-admin-scripts.php:90
174
+ msgid "Insert Download"
175
+ msgstr "Indsæt download"
176
+
177
+ #: includes/admin/class-dlm-admin-media-insert.php:66
178
+ #: includes/admin/class-dlm-admin-media-insert.php:200
179
+ msgid "Insert Shortcode"
180
+ msgstr "Indsæt shortcode"
181
+
182
+ #: includes/admin/class-dlm-admin-media-insert.php:67
183
+ msgid "Quick-add download"
184
+ msgstr "Lyntilføj download"
185
+
186
+ #: includes/admin/class-dlm-admin-media-insert.php:111
187
+ msgid "Error: File was not created."
188
+ msgstr "Fejl: Fil blev ikke oprettet."
189
+
190
+ #: includes/admin/class-dlm-admin-media-insert.php:131
191
+ msgid "Download successfully created."
192
+ msgstr "Download oprettet uden problemer."
193
+
194
+ #: includes/admin/class-dlm-admin-media-insert.php:134
195
+ msgid "Error: Download was not created."
196
+ msgstr "Fejl: Download blev ikke oprettet."
197
+
198
+ #: includes/admin/class-dlm-admin-media-insert.php:154
199
+ msgid "Choose a download"
200
+ msgstr "Vælg en download"
201
+
202
+ #: includes/admin/class-dlm-admin-media-insert.php:190
203
+ msgid "Template"
204
+ msgstr "Skabelon"
205
+
206
+ #: includes/admin/class-dlm-admin-media-insert.php:192
207
+ msgid "Template Name"
208
+ msgstr "Skabelonnavn"
209
+
210
+ #: includes/admin/class-dlm-admin-media-insert.php:194
211
+ msgid ""
212
+ "Leaving this blank will use the default <code>content-download.php</code> "
213
+ "template file. If you enter, for example, <code>image</code>, the <code"
214
+ ">content-download-image.php</code> template will be used instead."
215
+ msgstr "Hvis uudfyldt bruges standardskabelonfilen <code>content-download.php</code>. Hvis du f.eks. indtaster <code>image</code>, bruges skabelonen <code>content-download-image.php</code> i stedet for."
216
+
217
+ #: includes/admin/class-dlm-admin-media-insert.php:211
218
+ msgid "Drop file here"
219
+ msgstr "Slip fil her"
220
+
221
+ #: includes/admin/class-dlm-admin-media-insert.php:216
222
+ msgid "Select File"
223
+ msgstr "Vælg fil"
224
+
225
+ #: includes/admin/class-dlm-admin-media-insert.php:220
226
+ msgid "Enter URL manually"
227
+ msgstr "Indtast URL manuelt"
228
+
229
+ #: includes/admin/class-dlm-admin-media-insert.php:225
230
+ msgid "Download URL"
231
+ msgstr "Download-URL"
232
+
233
+ #: includes/admin/class-dlm-admin-media-insert.php:227
234
+ msgid "Required URL"
235
+ msgstr "Påkrævet URL"
236
+
237
+ #: includes/admin/class-dlm-admin-media-insert.php:231
238
+ msgid "Download Title"
239
+ msgstr "Downloadtitel"
240
+
241
+ #: includes/admin/class-dlm-admin-media-insert.php:233
242
+ msgid "Required title"
243
+ msgstr "Påkrævet titel"
244
+
245
+ #: includes/admin/class-dlm-admin-media-insert.php:239
246
+ msgid "Optional version number"
247
+ msgstr "Valgfri versionsnummer"
248
+
249
+ #: includes/admin/class-dlm-admin-media-insert.php:244
250
+ msgid "Save Download"
251
+ msgstr "Gem download"
252
+
253
+ #: includes/admin/class-dlm-admin-media-insert.php:300
254
+ msgid "Allowed Files"
255
+ msgstr "Tilladte filer"
256
+
257
+ #: includes/admin/class-dlm-admin-media-insert.php:350
258
+ msgid "Please wait..."
259
+ msgstr "Vent venligst …"
260
+
261
+ #: includes/admin/class-dlm-admin-scripts.php:95
262
+ msgid "Are you sure you want to delete this file ? "
263
+ msgstr "Er du sikker på, du vil slette denne fil? "
264
+
265
+ #: includes/admin/class-dlm-admin-writepanels.php:32
266
+ msgid "Download Information"
267
+ msgstr "Downloadinformation"
268
+
269
+ #: includes/admin/class-dlm-admin-writepanels.php:38
270
+ msgid "Download Options"
271
+ msgstr "Downloadindstillinger"
272
+
273
+ #: includes/admin/class-dlm-admin-writepanels.php:44
274
+ msgid "Downloadable Files/Versions"
275
+ msgstr "Filer/Versioner, der kan downloades"
276
+
277
+ #: includes/admin/class-dlm-admin-writepanels.php:52
278
+ msgid "Short Description"
279
+ msgstr "Kort beskrivelse"
280
+
281
+ #: includes/admin/class-dlm-admin-writepanels.php:83
282
+ msgid "URL"
283
+ msgstr "URL"
284
+
285
+ #: includes/admin/class-dlm-admin-writepanels.php:88
286
+ msgid "Shortcode"
287
+ msgstr "Kortkode"
288
+
289
+ #: includes/admin/class-dlm-admin-writepanels.php:118
290
+ msgid "Featured download"
291
+ msgstr "Fremhævet download"
292
+
293
+ #: includes/admin/class-dlm-admin-writepanels.php:119
294
+ msgid "Mark this download as featured. Used by shortcodes and widgets."
295
+ msgstr "Markér denne download som fremhævet. Bruges af shortcodes og widgets."
296
+
297
+ #: includes/admin/class-dlm-admin-writepanels.php:125
298
+ msgid ""
299
+ "Only logged in users will be able to access the file via a download link if "
300
+ "this is enabled."
301
+ msgstr "Kun brugere, der er logget ind, vil få adgang til filen via et downloadlink, hvis dette aktiveres."
302
+
303
+ #: includes/admin/class-dlm-admin-writepanels.php:130
304
+ msgid "Redirect to file"
305
+ msgstr "Redirigér til fil"
306
+
307
+ #: includes/admin/class-dlm-admin-writepanels.php:131
308
+ msgid ""
309
+ "Don't force download. If the <code>dlm_upload</code> folder is protected you"
310
+ " may need to move your file."
311
+ msgstr "Gennemtving ikke download. Hvis mappen <code>dlm_upload</code> er beskyttet, kan du blive nødt til at flytte din fil."
312
+
313
+ #: includes/admin/class-dlm-admin-writepanels.php:160
314
+ msgid "Add file"
315
+ msgstr "Tilføj fil"
316
+
317
+ #: includes/admin/class-dlm-admin-writepanels.php:161
318
+ msgid "Close all"
319
+ msgstr "Luk alle"
320
+
321
+ #: includes/admin/class-dlm-admin-writepanels.php:162
322
+ msgid "Expand all"
323
+ msgstr "Udvid alle"
324
+
325
+ #: includes/admin/class-dlm-admin.php:107
326
+ msgid "General"
327
+ msgstr "Generelt"
328
+
329
+ #: includes/admin/class-dlm-admin.php:112
330
+ msgid "Default Template"
331
+ msgstr "Standardskabelon"
332
+
333
+ #: includes/admin/class-dlm-admin.php:113
334
+ msgid ""
335
+ "Choose which template is used for <code>[download]</code> shortcodes by "
336
+ "default (this can be overridden by the <code>format</code> argument)."
337
+ msgstr "Vælg hvilken skabelon der bruges for <code>[download]</code>-shortcodes som standard (dette kan tilsidesættes af argumentet <code>format</code>)."
338
+
339
+ #: includes/admin/class-dlm-admin.php:116
340
+ msgid "Default - Title and count"
341
+ msgstr "Standard - Titel og antal"
342
+
343
+ #: includes/admin/class-dlm-admin.php:117
344
+ msgid "Button - CSS styled button showing title and count"
345
+ msgstr "Knap - CSS-stylet knap, der viser titel og antal"
346
+
347
+ #: includes/admin/class-dlm-admin.php:118
348
+ msgid "Box - Box showing thumbnail, title, count, filename and filesize."
349
+ msgstr "Boks - Boks, der viser miniature, titel, antal, filnavn og filstørrelse."
350
+
351
+ #: includes/admin/class-dlm-admin.php:119
352
+ msgid "Filename - Filename and download count"
353
+ msgstr "Filnavn - Filnavn og antal downloads"
354
+
355
+ #: includes/admin/class-dlm-admin.php:120
356
+ msgid "Title - Shows download title only"
357
+ msgstr "Titel ‒ Viser kun downloadtitel"
358
+
359
+ #: includes/admin/class-dlm-admin.php:121
360
+ msgid "Version list - Lists all download versions in an unordered list"
361
+ msgstr "Versionsliste - Laver en liste med alle downloadversioner i uordnet rækkefølge"
362
+
363
+ #: includes/admin/class-dlm-admin.php:122
364
+ msgid "Custom template"
365
+ msgstr "Brugerdefineret skabelon"
366
+
367
+ #: includes/admin/class-dlm-admin.php:128
368
+ msgid "Custom Template"
369
+ msgstr "Brugerdefineret skabelon"
370
+
371
+ #: includes/admin/class-dlm-admin.php:129
372
+ msgid ""
373
+ "Leaving this blank will use the default <code>content-download.php</code> "
374
+ "template file. If you enter, for example, <code>image</code>, the <code"
375
+ ">content-download-image.php</code> template will be used instead. You can "
376
+ "add custom templates inside your theme folder."
377
+ msgstr "Hvis uudfyldt bruges standardskabelonfilen <code>content-download.php</code>. Hvis du f.eks. indtaster <code>image</code>, bruges skabelonen <code>content-download-image.php</code> i stedet for. Du kan tilføje brugerdefinerede skabeloner i din temamappe."
378
+
379
+ #: includes/admin/class-dlm-admin.php:134
380
+ msgid "X-Accel-Redirect / X-Sendfile"
381
+ msgstr ""
382
+
383
+ #: includes/admin/class-dlm-admin.php:135
384
+ #: includes/admin/class-dlm-admin.php:143
385
+ #: includes/admin/class-dlm-admin.php:214
386
+ msgid "Enable"
387
+ msgstr "Aktivér"
388
+
389
+ #: includes/admin/class-dlm-admin.php:136
390
+ msgid ""
391
+ "If supported, <code>X-Accel-Redirect</code> / <code>X-Sendfile</code> can be"
392
+ " used to serve downloads instead of PHP (server requires "
393
+ "<code>mod_xsendfile</code>)."
394
+ msgstr "Hvis understøttet, kan <code>X-Accel-Redirect</code> / <code>X-Sendfile</code> bruges til at levere downloads i stedet for PHP (serveren skal have <code>mod_xsendfile</code>)."
395
+
396
+ #: includes/admin/class-dlm-admin.php:142
397
+ msgid "Prevent hotlinking"
398
+ msgstr "Forhindr hotlinking"
399
+
400
+ #: includes/admin/class-dlm-admin.php:144
401
+ msgid ""
402
+ "If enabled, the download handler will check the PHP referer to see if it "
403
+ "originated from your site and if not, redirect them to the homepage."
404
+ msgstr "Hvis aktiveret, vil downloadhandleren tjekke PHP-referrer for at se, om den stammer fra dit site. Hvis ikke, viderestilles de til forsiden."
405
+
406
+ #: includes/admin/class-dlm-admin.php:149 includes/class-dlm-installer.php:41
407
+ #: includes/class-dlm-upgrade-manager.php:47
408
+ msgid "You do not have permission to access this download. %sGo to homepage%s"
409
+ msgstr "Du har ikke adgang til denne download. %sGå til hjemmeside%s"
410
+
411
+ #: includes/admin/class-dlm-admin.php:151
412
+ msgid "No access message"
413
+ msgstr "Ingen adgang-besked"
414
+
415
+ #: includes/admin/class-dlm-admin.php:152
416
+ msgid ""
417
+ "The message that will be displayed to visitors when they don't have access "
418
+ "to a file."
419
+ msgstr "Den besked, der vil blive vist til besøgende, når de ikke har adgang til en fil."
420
+
421
+ #: includes/admin/class-dlm-admin.php:158
422
+ msgid "Endpoint"
423
+ msgstr "Slutpunkt"
424
+
425
+ #: includes/admin/class-dlm-admin.php:163
426
+ msgid "download"
427
+ msgstr "download"
428
+
429
+ #: includes/admin/class-dlm-admin.php:164
430
+ msgid "Download Endpoint"
431
+ msgstr "Downloadslutpunkt"
432
+
433
+ #: includes/admin/class-dlm-admin.php:165
434
+ msgid ""
435
+ "Define what endpoint should be used for download links. By default this will"
436
+ " be <code>%s</code>."
437
+ msgstr "Definér hvilket slutpunkt skal bruges for downloadlinks. Det vil som standard være <code>%s</code>."
438
+
439
+ #: includes/admin/class-dlm-admin.php:170
440
+ msgid "Endpoint Value"
441
+ msgstr "Slutpunktsværdi"
442
+
443
+ #: includes/admin/class-dlm-admin.php:171
444
+ msgid ""
445
+ "Define what unique value should be used on the end of your endpoint to "
446
+ "identify the downloadable file. e.g. ID would give a link like "
447
+ "<code>%s</code>"
448
+ msgstr "Definér, hvilken unik værdi der skal bruges i slutningen af dit slutpunkt for at identficere filen, der kan downloades. Fx vil ID give et link som <code>%s</code>"
449
+
450
+ #: includes/admin/class-dlm-admin.php:174
451
+ #: includes/admin/class-dlm-admin.php:541
452
+ msgid "Download ID"
453
+ msgstr "Download‑ID"
454
+
455
+ #: includes/admin/class-dlm-admin.php:175
456
+ msgid "Download slug"
457
+ msgstr "Downloadkorttitel"
458
+
459
+ #: includes/admin/class-dlm-admin.php:181
460
+ msgid "Hashes"
461
+ msgstr ""
462
+
463
+ #: includes/admin/class-dlm-admin.php:186
464
+ msgid "MD5 hashes"
465
+ msgstr "MD5-hashes"
466
+
467
+ #: includes/admin/class-dlm-admin.php:187
468
+ msgid "Generate MD5 hash for uploaded files"
469
+ msgstr "Generér MD5-hash for uploadede filer"
470
+
471
+ #: includes/admin/class-dlm-admin.php:194
472
+ msgid "SHA1 hashes"
473
+ msgstr "SHA1-hashes"
474
+
475
+ #: includes/admin/class-dlm-admin.php:195
476
+ msgid "Generate SHA1 hash for uploaded files"
477
+ msgstr "Generér SHA1-hash for uploadede filer"
478
+
479
+ #: includes/admin/class-dlm-admin.php:202
480
+ msgid "CRC32B hashes"
481
+ msgstr "CRC32B-hashes"
482
+
483
+ #: includes/admin/class-dlm-admin.php:203
484
+ msgid "Generate CRC32B hash for uploaded files"
485
+ msgstr "Generér CRC32B-hash for uploadede filer"
486
+
487
+ #: includes/admin/class-dlm-admin.php:204
488
+ msgid ""
489
+ "Hashes can optionally be output via shortcodes, but may cause performance "
490
+ "issues with large files."
491
+ msgstr "Hashes kan medtages, når du bruger kortkoder, hvis du ønsker det, men det kan medføre forsinkelser ved store filer."
492
+
493
+ #: includes/admin/class-dlm-admin.php:210
494
+ msgid "Logging"
495
+ msgstr "Logging"
496
+
497
+ #: includes/admin/class-dlm-admin.php:216
498
+ msgid "Download Log"
499
+ msgstr "Downloadlog"
500
+
501
+ #: includes/admin/class-dlm-admin.php:217
502
+ msgid "Log download attempts, IP addresses and more."
503
+ msgstr "Log downloadforsøg, IP-adresser m.m."
504
+
505
+ #: includes/admin/class-dlm-admin.php:223
506
+ msgid "Blacklist IPs"
507
+ msgstr "Blacklist IP-adresser"
508
+
509
+ #: includes/admin/class-dlm-admin.php:224
510
+ msgid ""
511
+ "List IP Addresses to blacklist, 1 per line. Use <code>*</code> for a "
512
+ "wildcard."
513
+ msgstr "Lav liste med IP-adresser, der skal blacklistes, 1 per linje. Brug <code>*</code> som wildcard."
514
+
515
+ #: includes/admin/class-dlm-admin.php:231
516
+ msgid "Blacklist user agents"
517
+ msgstr "Blacklist brugeragenter"
518
+
519
+ #: includes/admin/class-dlm-admin.php:232
520
+ msgid "List browser user agents to blacklist, 1 per line."
521
+ msgstr "Lav liste med browsere, der skal blacklistes, 1 per linje."
522
+
523
+ #: includes/admin/class-dlm-admin.php:316
524
+ msgid "Logs"
525
+ msgstr "Logs"
526
+
527
+ #: includes/admin/class-dlm-admin.php:323 includes/class-wp-dlm.php:202
528
+ msgid "Settings"
529
+ msgstr "Indstillinger"
530
+
531
+ #: includes/admin/class-dlm-admin.php:335 includes/class-wp-dlm.php:203
532
+ msgid "Extensions"
533
+ msgstr "Udvidelser"
534
+
535
+ #: includes/admin/class-dlm-admin.php:375
536
+ msgid "Settings successfully saved"
537
+ msgstr "Indstillingerne gemt med succes"
538
+
539
+ #: includes/admin/class-dlm-admin.php:458
540
+ msgid "Save Changes"
541
+ msgstr "Gem ændringer"
542
+
543
+ #: includes/admin/class-dlm-admin.php:484
544
+ msgid "Download Logs"
545
+ msgstr "Download-logs"
546
+
547
+ #: includes/admin/class-dlm-admin.php:486
548
+ msgid "Export CSV"
549
+ msgstr "Eksportér CSV"
550
+
551
+ #: includes/admin/class-dlm-admin.php:488
552
+ msgid "Delete Logs"
553
+ msgstr "Slet logs"
554
+
555
+ #: includes/admin/class-dlm-admin.php:542
556
+ msgid "Version ID"
557
+ msgstr "Version-ID"
558
+
559
+ #: includes/admin/class-dlm-admin.php:543
560
+ msgid "Filename"
561
+ msgstr "Filnavn"
562
+
563
+ #: includes/admin/class-dlm-admin.php:544
564
+ msgid "User ID"
565
+ msgstr "Bruger-ID"
566
+
567
+ #: includes/admin/class-dlm-admin.php:545
568
+ msgid "User Login"
569
+ msgstr "Brugerlogin"
570
+
571
+ #: includes/admin/class-dlm-admin.php:546
572
+ msgid "User Email"
573
+ msgstr "Bruger-e-mail"
574
+
575
+ #: includes/admin/class-dlm-admin.php:547
576
+ msgid "User IP"
577
+ msgstr "Bruger-IP"
578
+
579
+ #: includes/admin/class-dlm-admin.php:548
580
+ #: includes/admin/class-dlm-logging-list-table.php:134
581
+ msgid "User Agent"
582
+ msgstr "Brugeragent"
583
+
584
+ #: includes/admin/class-dlm-admin.php:549
585
+ #: includes/admin/class-dlm-logging-list-table.php:135
586
+ msgid "Date"
587
+ msgstr "Dato"
588
+
589
+ #: includes/admin/class-dlm-admin.php:550
590
+ msgid "Status"
591
+ msgstr "Status"
592
+
593
+ #: includes/admin/class-dlm-admin.php:635
594
+ msgid ""
595
+ "If you like %sDownload Monitor%s please leave us a %s★★★★★%s rating. A huge "
596
+ "thank you from us in advance!"
597
+ msgstr "Hvis du kan lide %sDownload Monitor%s, så giv os en %s★★★★★%s-bedømmelse. En kæmpetak fra os på forhånd!"
598
+
599
+ #: includes/admin/class-dlm-logging-list-table.php:54
600
+ msgid "Download Complete"
601
+ msgstr "Download fuldført"
602
+
603
+ #: includes/admin/class-dlm-logging-list-table.php:61
604
+ msgid "%s ago"
605
+ msgstr "%s siden"
606
+
607
+ #: includes/admin/class-dlm-logging-list-table.php:68
608
+ msgid "Download #%d (no longer exists)"
609
+ msgstr "Download #%d (eksisterer ikke længere)"
610
+
611
+ #: includes/admin/class-dlm-logging-list-table.php:76
612
+ msgid "v%s"
613
+ msgstr "v%s"
614
+
615
+ #: includes/admin/class-dlm-logging-list-table.php:99
616
+ msgid "Non-member"
617
+ msgstr "Ikke-medlem"
618
+
619
+ #: includes/admin/class-dlm-logging-list-table.php:132
620
+ msgid "User"
621
+ msgstr "Bruger"
622
+
623
+ #: includes/admin/class-dlm-logging-list-table.php:133
624
+ msgid "IP Address"
625
+ msgstr "IP-adresse"
626
+
627
+ #: includes/admin/class-dlm-logging-list-table.php:150
628
+ msgid "Any status"
629
+ msgstr "Enhver status"
630
+
631
+ #: includes/admin/class-dlm-logging-list-table.php:152
632
+ msgid "Failed"
633
+ msgstr "Mislykkede"
634
+
635
+ #: includes/admin/class-dlm-logging-list-table.php:154
636
+ msgid "Redirected"
637
+ msgstr "Redirigeret"
638
+
639
+ #: includes/admin/class-dlm-logging-list-table.php:156
640
+ msgid "Completed"
641
+ msgstr "Fuldført"
642
+
643
+ #: includes/admin/class-dlm-logging-list-table.php:175
644
+ msgid "Show all dates"
645
+ msgstr "Vis alle datoer"
646
+
647
+ #: includes/admin/class-dlm-logging-list-table.php:189
648
+ msgid "%1$s %2$d"
649
+ msgstr "%1$s %2$d"
650
+
651
+ #: includes/admin/class-dlm-logging-list-table.php:197
652
+ msgid "25 per page"
653
+ msgstr "25 per side"
654
+
655
+ #: includes/admin/class-dlm-logging-list-table.php:199
656
+ msgid "50 per page"
657
+ msgstr "50 per side"
658
+
659
+ #: includes/admin/class-dlm-logging-list-table.php:201
660
+ msgid "100 per page"
661
+ msgstr "100 per side"
662
+
663
+ #: includes/admin/class-dlm-logging-list-table.php:203
664
+ msgid "200 per page"
665
+ msgstr "200 per side"
666
+
667
+ #: includes/admin/class-dlm-logging-list-table.php:205
668
+ msgid "Show All"
669
+ msgstr "Vis alle"
670
+
671
+ #: includes/admin/class-dlm-logging-list-table.php:209
672
+ msgid "Filter"
673
+ msgstr "Filtrér"
674
+
675
+ #: includes/admin/html-downloadable-file-version.php:3
676
+ msgid "Remove"
677
+ msgstr "Fjern"
678
+
679
+ #: includes/admin/html-downloadable-file-version.php:4
680
+ msgid "Click to toggle"
681
+ msgstr "Klik for at vise/skjule"
682
+
683
+ #: includes/admin/html-downloadable-file-version.php:5
684
+ msgid "Version <span class=\"version\">%s</span> (%s)"
685
+ msgstr "Version <span class=\"version\">%s</span> (%s)"
686
+
687
+ #: includes/admin/html-downloadable-file-version.php:5
688
+ #: includes/admin/html-downloadable-file-version.php:19
689
+ msgid "n/a"
690
+ msgstr "&nbsp;‒&nbsp;"
691
+
692
+ #: includes/admin/html-downloadable-file-version.php:5
693
+ msgid "Downloaded %s time"
694
+ msgid_plural "Downloaded %s times"
695
+ msgstr[0] "Downloadet %s gang"
696
+ msgstr[1] "Downloadet %s gange"
697
+
698
+ #: includes/admin/html-downloadable-file-version.php:23
699
+ msgid "File URL(s)"
700
+ msgstr "Fil-URL(&#39;er)"
701
+
702
+ #: includes/admin/html-downloadable-file-version.php:26
703
+ msgid ""
704
+ "Enter one file path/URL per line - multiple files will be used as mirrors "
705
+ "(chosen at random)."
706
+ msgstr "Indtast én filsti/URL per linje ‒ flere filer vil blive brugt som mirrors (tilfældigt valgt)."
707
+
708
+ #: includes/admin/html-downloadable-file-version.php:32
709
+ msgid "Upload file"
710
+ msgstr "Upload fil"
711
+
712
+ #: includes/admin/html-downloadable-file-version.php:34
713
+ msgid "Choose a file"
714
+ msgstr "Vælg en fil"
715
+
716
+ #: includes/admin/html-downloadable-file-version.php:35
717
+ msgid "Insert file URL"
718
+ msgstr "Indsæt fil-URL"
719
+
720
+ #: includes/admin/html-downloadable-file-version.php:39
721
+ msgid "Browse for file"
722
+ msgstr "Gennemse for fil"
723
+
724
+ #: includes/admin/html-downloadable-file-version.php:66
725
+ msgid "File Date"
726
+ msgstr "Fildato"
727
+
728
+ #: includes/admin/html-downloadable-file-version.php:69
729
+ msgid "h"
730
+ msgstr ""
731
+
732
+ #: includes/admin/html-downloadable-file-version.php:72
733
+ msgid "m"
734
+ msgstr ""
735
+
736
+ #: includes/class-dlm-download-handler.php:171
737
+ msgid "Password Required"
738
+ msgstr "Adgangskode påkrævet"
739
+
740
+ #: includes/class-dlm-download-handler.php:177
741
+ msgid "Download does not exist."
742
+ msgstr "Download eksisterer ikke."
743
+
744
+ #: includes/class-dlm-download-handler.php:177
745
+ #: includes/class-dlm-download-handler.php:218
746
+ #: includes/class-dlm-download-handler.php:226
747
+ #: includes/class-dlm-download-handler.php:337
748
+ msgid "Go to homepage &rarr;"
749
+ msgstr "Gå til forside &rarr;"
750
+
751
+ #: includes/class-dlm-download-handler.php:177
752
+ #: includes/class-dlm-download-handler.php:218
753
+ #: includes/class-dlm-download-handler.php:226
754
+ #: includes/class-dlm-download-handler.php:238
755
+ #: includes/class-dlm-download-handler.php:337
756
+ msgid "Download Error"
757
+ msgstr "Downloadfejl"
758
+
759
+ #: includes/class-dlm-download-handler.php:218
760
+ #: includes/class-dlm-download-handler.php:226
761
+ msgid "No file paths defined."
762
+ msgstr "Ingen filstier defineret."
763
+
764
+ #: includes/class-dlm-download-handler.php:257
765
+ #: includes/class-dlm-download-handler.php:277
766
+ #: includes/class-dlm-download-handler.php:284
767
+ #: includes/class-dlm-download-handler.php:291
768
+ msgid "Redirected to file"
769
+ msgstr "Redirigeret til fil"
770
+
771
+ #: includes/class-dlm-download-handler.php:330
772
+ msgid "Redirected to remote file."
773
+ msgstr "Redirigeret til fjernfil."
774
+
775
+ #: includes/class-dlm-download-handler.php:335
776
+ #: includes/class-dlm-download-handler.php:337
777
+ msgid "File not found."
778
+ msgstr "Fil ikke fundet."
779
+
780
+ #: includes/class-dlm-post-type-manager.php:21
781
+ msgid "All Downloads"
782
+ msgstr "Alle downloads"
783
+
784
+ #: includes/class-dlm-post-type-manager.php:22
785
+ msgid "Downloads"
786
+ msgstr "Downloads"
787
+
788
+ #: includes/class-dlm-post-type-manager.php:24
789
+ msgid "Add New"
790
+ msgstr "Tilføj ny"
791
+
792
+ #: includes/class-dlm-post-type-manager.php:25
793
+ msgid "Add Download"
794
+ msgstr "Tilføj download"
795
+
796
+ #: includes/class-dlm-post-type-manager.php:26
797
+ msgid "Edit"
798
+ msgstr "Redigér"
799
+
800
+ #: includes/class-dlm-post-type-manager.php:27
801
+ msgid "Edit Download"
802
+ msgstr "Redigér download"
803
+
804
+ #: includes/class-dlm-post-type-manager.php:28
805
+ msgid "New Download"
806
+ msgstr "Ny download"
807
+
808
+ #: includes/class-dlm-post-type-manager.php:29
809
+ #: includes/class-dlm-post-type-manager.php:30
810
+ msgid "View Download"
811
+ msgstr "Se download"
812
+
813
+ #: includes/class-dlm-post-type-manager.php:31
814
+ msgid "Search Downloads"
815
+ msgstr "Søg i downloads"
816
+
817
+ #: includes/class-dlm-post-type-manager.php:32
818
+ msgid "No Downloads found"
819
+ msgstr "Ingen downloads fundet"
820
+
821
+ #: includes/class-dlm-post-type-manager.php:33
822
+ msgid "No Downloads found in trash"
823
+ msgstr "Ingen downloads fundet i Papirkurven"
824
+
825
+ #: includes/class-dlm-post-type-manager.php:34
826
+ msgid "Parent Download"
827
+ msgstr "Overdownload"
828
+
829
+ #: includes/class-dlm-post-type-manager.php:36
830
+ msgid "This is where you can create and manage downloads for your site."
831
+ msgstr "Her kan du oprette og administrere downloads for dit site."
832
+
833
+ #: includes/class-dlm-shortcodes.php:107 includes/class-dlm-shortcodes.php:142
834
+ msgid "Download not found"
835
+ msgstr "Download ikke fundet"
836
+
837
+ #: includes/class-dlm-taxonomy-manager.php:30
838
+ msgid "Download Category"
839
+ msgstr "Downloadkategori"
840
+
841
+ #: includes/class-dlm-taxonomy-manager.php:31
842
+ msgid "Search Download Categories"
843
+ msgstr "Søg i downloadkategorier"
844
+
845
+ #: includes/class-dlm-taxonomy-manager.php:32
846
+ msgid "All Download Categories"
847
+ msgstr "Alle downloadkategorier"
848
+
849
+ #: includes/class-dlm-taxonomy-manager.php:33
850
+ #: includes/class-dlm-taxonomy-manager.php:34
851
+ msgid "Parent Download Category"
852
+ msgstr "Overkategori for download"
853
+
854
+ #: includes/class-dlm-taxonomy-manager.php:35
855
+ msgid "Edit Download Category"
856
+ msgstr "Redigér downloadkategori"
857
+
858
+ #: includes/class-dlm-taxonomy-manager.php:36
859
+ msgid "Update Download Category"
860
+ msgstr "Opdatér downloadkategori"
861
+
862
+ #: includes/class-dlm-taxonomy-manager.php:37
863
+ msgid "Add New Download Category"
864
+ msgstr "Tilføj ny downloadkategori"
865
+
866
+ #: includes/class-dlm-taxonomy-manager.php:38
867
+ msgid "New Download Category Name"
868
+ msgstr "Navn på ny downloadkategori"
869
+
870
+ #: includes/class-dlm-taxonomy-manager.php:61
871
+ msgid "Download Tag"
872
+ msgstr "Downloadtag"
873
+
874
+ #: includes/class-dlm-taxonomy-manager.php:62
875
+ msgid "Search Download Tags"
876
+ msgstr "Søg i downloadtags"
877
+
878
+ #: includes/class-dlm-taxonomy-manager.php:63
879
+ msgid "All Download Tags"
880
+ msgstr "Alle downloadtags"
881
+
882
+ #: includes/class-dlm-taxonomy-manager.php:64
883
+ #: includes/class-dlm-taxonomy-manager.php:65
884
+ msgid "Parent Download Tag"
885
+ msgstr "Overtag for download"
886
+
887
+ #: includes/class-dlm-taxonomy-manager.php:66
888
+ msgid "Edit Download Tag"
889
+ msgstr "Redigér downloadtag"
890
+
891
+ #: includes/class-dlm-taxonomy-manager.php:67
892
+ msgid "Update Download Tag"
893
+ msgstr "Opdatér downloadtag"
894
+
895
+ #: includes/class-dlm-taxonomy-manager.php:68
896
+ msgid "Add New Download Tag"
897
+ msgstr "Tilføj nyt downloadtag"
898
+
899
+ #: includes/class-dlm-taxonomy-manager.php:69
900
+ msgid "New Download Tag Name"
901
+ msgstr "Navn på nyt downloadtag"
902
+
903
+ #: includes/class-wp-dlm.php:204
904
+ msgid "Docs"
905
+ msgstr "Dok."
906
+
907
+ #: includes/product/class-dlm-product.php:149
908
+ msgid "License successfully activated."
909
+ msgstr "Licens aktiveret med succes."
910
+
911
+ #: includes/widgets/class-dlm-widget-downloads.php:29
912
+ msgid "Display a list of your downloads."
913
+ msgstr "Vis en liste med dine downloads."
914
+
915
+ #: includes/widgets/class-dlm-widget-downloads.php:31
916
+ msgid "Downloads List"
917
+ msgstr "Downloadsliste"
918
+
919
+ #: includes/widgets/class-dlm-widget-downloads.php:56
920
+ #: includes/widgets/class-dlm-widget-downloads.php:160
921
+ msgid "Featured Downloads"
922
+ msgstr "Fremhævede downloads"
923
+
924
+ #: includes/widgets/class-dlm-widget-downloads.php:177
925
+ msgid "Limit"
926
+ msgstr "Begrænsning"
927
+
928
+ #: includes/widgets/class-dlm-widget-downloads.php:184
929
+ msgid "Output template"
930
+ msgstr "Outputskabelon"
931
+
932
+ #: includes/widgets/class-dlm-widget-downloads.php:188
933
+ msgid "Default template"
934
+ msgstr "Standardskabelon"
935
+
936
+ #: includes/widgets/class-dlm-widget-downloads.php:192
937
+ msgid "Order by"
938
+ msgstr "Sortér efter"
939
+
940
+ #: includes/widgets/class-dlm-widget-downloads.php:198
941
+ msgid "Random"
942
+ msgstr "Tilfældig"
943
+
944
+ #: includes/widgets/class-dlm-widget-downloads.php:202
945
+ msgid "Date added"
946
+ msgstr "Dato tilføjet"
947
+
948
+ #: includes/widgets/class-dlm-widget-downloads.php:204
949
+ msgid "Date modified"
950
+ msgstr "Dato ændret"
951
+
952
+ #: includes/widgets/class-dlm-widget-downloads.php:211
953
+ msgid "Order"
954
+ msgstr "Sorteringsrækkefølge"
955
+
956
+ #: includes/widgets/class-dlm-widget-downloads.php:215
957
+ msgid "ASC"
958
+ msgstr "STIG"
959
+
960
+ #: includes/widgets/class-dlm-widget-downloads.php:217
961
+ msgid "DESC"
962
+ msgstr "FALD"
963
+
964
+ #: includes/widgets/class-dlm-widget-downloads.php:225
965
+ msgid "Show only featured downloads"
966
+ msgstr "Vis kun fremhævede downloads"
967
+
968
+ #: includes/widgets/class-dlm-widget-downloads.php:232
969
+ msgid "Show only members only downloads"
970
+ msgstr "Vis kun medlemmer kun downloads"
971
+
972
+ #: templates/content-download-box.php:13
973
+ #: templates/content-download-filename.php:13
974
+ #: templates/content-download.php:12
975
+ msgid "1 download"
976
+ msgid_plural "%d downloads"
977
+ msgstr[0] "1 download"
978
+ msgstr[1] "%d downloads"
979
+
980
+ #: templates/content-download-box.php:22
981
+ #: templates/content-download-filename.php:10
982
+ #: templates/content-download-title.php:9 templates/content-download.php:9
983
+ msgid "Version %s"
984
+ msgstr "Version %s"
985
+
986
+ #: templates/content-download-box.php:24
987
+ msgid "Download File"
988
+ msgstr "Download fil"
989
+
990
+ #: templates/content-download-button.php:9
991
+ msgid "Download &ldquo;%s&rdquo;"
992
+ msgstr "Download &ldquo;%s&rdquo;"
993
+
994
+ #: templates/content-download-button.php:10
995
+ #: templates/content-download-version-list.php:18
996
+ msgid "Downloaded 1 time"
997
+ msgid_plural "Downloaded %d times"
998
+ msgstr[0] "Downloadet 1 gang"
999
+ msgstr[1] "Downloadet %d gange"
1000
+
1001
+ #. Plugin Name of the plugin/theme
1002
+ msgid "Download Monitor"
1003
+ msgstr ""
1004
+
1005
+ #. Author URI of the plugin/theme
1006
+ msgid "https://www.download-monitor.com"
1007
+ msgstr ""
1008
+
1009
+ #. Description of the plugin/theme
1010
+ msgid ""
1011
+ "A full solution for managing downloadable files, monitoring downloads and "
1012
+ "outputting download links and file information on your WordPress powered "
1013
+ "site."
1014
+ msgstr ""
1015
+
1016
+ #. Author of the plugin/theme
1017
+ msgid "Barry Kooij & Mike Jolley"
1018
+ msgstr ""
1019
+
1020
+ #: includes/admin/class-dlm-admin-media-insert.php:213
1021
+ msgctxt "Drop file here *or* select file"
1022
+ msgid "or"
1023
+ msgstr ""
languages/download-monitor-de_DE.mo CHANGED
Binary file
languages/download-monitor-de_DE.po CHANGED
@@ -1,6 +1,7 @@
1
  # Copyright (C) 2015 Barry Kooij & Mike Jolley
2
  # This file is distributed under the GPL v3.
3
  # Translators:
 
4
  # Barry Kooij <mail@barrykooij.nl>, 2015
5
  # Marcel Pietschmann <inactive+maphy_psd@transifex.com>, 2015
6
  # Patrick Brückner, 2014
@@ -9,9 +10,9 @@ msgstr ""
9
  "Project-Id-Version: Download Monitor\n"
10
  "Report-Msgid-Bugs-To: https://github.com/download-monitor/download-monitor/issues\n"
11
  "POT-Creation-Date: 2015-03-22 12:53:18+00:00\n"
12
- "PO-Revision-Date: 2015-03-22 12:55+0000\n"
13
- "Last-Translator: Barry Kooij <mail@barrykooij.nl>\n"
14
- "Language-Team: German (Germany) (http://www.transifex.com/projects/p/download-monitor/language/de_DE/)\n"
15
  "MIME-Version: 1.0\n"
16
  "Content-Type: text/plain; charset=UTF-8\n"
17
  "Content-Transfer-Encoding: 8bit\n"
@@ -154,13 +155,13 @@ msgstr "Download"
154
  #: includes/admin/class-dlm-admin-extensions.php:45
155
  #: includes/admin/class-dlm-admin.php:335
156
  msgid "Download Monitor Extensions"
157
- msgstr ""
158
 
159
  #: includes/admin/class-dlm-admin-extensions.php:76
160
  msgid ""
161
  "Extend Download Monitor with its powerful free and paid extensions. %sClick "
162
  "here to browse all extensions%s"
163
- msgstr ""
164
 
165
  #: includes/admin/class-dlm-admin-media-browser.php:34
166
  #: includes/admin/class-dlm-admin-scripts.php:96
@@ -263,11 +264,11 @@ msgstr "Bitte warten ..."
263
 
264
  #: includes/admin/class-dlm-admin-scripts.php:95
265
  msgid "Are you sure you want to delete this file ? "
266
- msgstr ""
267
 
268
  #: includes/admin/class-dlm-admin-writepanels.php:32
269
  msgid "Download Information"
270
- msgstr ""
271
 
272
  #: includes/admin/class-dlm-admin-writepanels.php:38
273
  msgid "Download Options"
@@ -283,11 +284,11 @@ msgstr "Kurzbeschreibung"
283
 
284
  #: includes/admin/class-dlm-admin-writepanels.php:83
285
  msgid "URL"
286
- msgstr ""
287
 
288
  #: includes/admin/class-dlm-admin-writepanels.php:88
289
  msgid "Shortcode"
290
- msgstr ""
291
 
292
  #: includes/admin/class-dlm-admin-writepanels.php:118
293
  msgid "Featured download"
@@ -409,7 +410,7 @@ msgstr "Wenn dies aktiviert ist, leitet der Download-Handler alle Nutzeranfragen
409
  #: includes/admin/class-dlm-admin.php:149 includes/class-dlm-installer.php:41
410
  #: includes/class-dlm-upgrade-manager.php:47
411
  msgid "You do not have permission to access this download. %sGo to homepage%s"
412
- msgstr ""
413
 
414
  #: includes/admin/class-dlm-admin.php:151
415
  msgid "No access message"
@@ -419,7 +420,7 @@ msgstr ""
419
  msgid ""
420
  "The message that will be displayed to visitors when they don't have access "
421
  "to a file."
422
- msgstr ""
423
 
424
  #: includes/admin/class-dlm-admin.php:158
425
  msgid "Endpoint"
@@ -533,7 +534,7 @@ msgstr "Einstellungen"
533
 
534
  #: includes/admin/class-dlm-admin.php:335 includes/class-wp-dlm.php:203
535
  msgid "Extensions"
536
- msgstr ""
537
 
538
  #: includes/admin/class-dlm-admin.php:375
539
  msgid "Settings successfully saved"
@@ -597,7 +598,7 @@ msgstr "Status"
597
  msgid ""
598
  "If you like %sDownload Monitor%s please leave us a %s★★★★★%s rating. A huge "
599
  "thank you from us in advance!"
600
- msgstr ""
601
 
602
  #: includes/admin/class-dlm-logging-list-table.php:54
603
  msgid "Download Complete"
@@ -909,7 +910,7 @@ msgstr "Doku"
909
 
910
  #: includes/product/class-dlm-product.php:149
911
  msgid "License successfully activated."
912
- msgstr ""
913
 
914
  #: includes/widgets/class-dlm-widget-downloads.php:29
915
  msgid "Display a list of your downloads."
@@ -926,7 +927,7 @@ msgstr "Hervorgehobene Downloads"
926
 
927
  #: includes/widgets/class-dlm-widget-downloads.php:177
928
  msgid "Limit"
929
- msgstr ""
930
 
931
  #: includes/widgets/class-dlm-widget-downloads.php:184
932
  msgid "Output template"
@@ -954,7 +955,7 @@ msgstr "Letzte Änderung"
954
 
955
  #: includes/widgets/class-dlm-widget-downloads.php:211
956
  msgid "Order"
957
- msgstr ""
958
 
959
  #: includes/widgets/class-dlm-widget-downloads.php:215
960
  msgid "ASC"
1
  # Copyright (C) 2015 Barry Kooij & Mike Jolley
2
  # This file is distributed under the GPL v3.
3
  # Translators:
4
+ # Andre, 2015
5
  # Barry Kooij <mail@barrykooij.nl>, 2015
6
  # Marcel Pietschmann <inactive+maphy_psd@transifex.com>, 2015
7
  # Patrick Brückner, 2014
10
  "Project-Id-Version: Download Monitor\n"
11
  "Report-Msgid-Bugs-To: https://github.com/download-monitor/download-monitor/issues\n"
12
  "POT-Creation-Date: 2015-03-22 12:53:18+00:00\n"
13
+ "PO-Revision-Date: 2015-06-08 19:23+0000\n"
14
+ "Last-Translator: Andre\n"
15
+ "Language-Team: German (Germany) (http://www.transifex.com/p/download-monitor/language/de_DE/)\n"
16
  "MIME-Version: 1.0\n"
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
  "Content-Transfer-Encoding: 8bit\n"
155
  #: includes/admin/class-dlm-admin-extensions.php:45
156
  #: includes/admin/class-dlm-admin.php:335
157
  msgid "Download Monitor Extensions"
158
+ msgstr "Download Monitor Erweiterungen"
159
 
160
  #: includes/admin/class-dlm-admin-extensions.php:76
161
  msgid ""
162
  "Extend Download Monitor with its powerful free and paid extensions. %sClick "
163
  "here to browse all extensions%s"
164
+ msgstr "Erweitere Download Monitor mit seinen leistungsstarken kostenlosen und kostenpflichtigen Erweiterungen. %sKlicke hier, um alle Erweiterungen zu durchsuchen%s"
165
 
166
  #: includes/admin/class-dlm-admin-media-browser.php:34
167
  #: includes/admin/class-dlm-admin-scripts.php:96
264
 
265
  #: includes/admin/class-dlm-admin-scripts.php:95
266
  msgid "Are you sure you want to delete this file ? "
267
+ msgstr "Soll die Datei wirklich gelöscht werden?"
268
 
269
  #: includes/admin/class-dlm-admin-writepanels.php:32
270
  msgid "Download Information"
271
+ msgstr "Download Informationen"
272
 
273
  #: includes/admin/class-dlm-admin-writepanels.php:38
274
  msgid "Download Options"
284
 
285
  #: includes/admin/class-dlm-admin-writepanels.php:83
286
  msgid "URL"
287
+ msgstr "URL"
288
 
289
  #: includes/admin/class-dlm-admin-writepanels.php:88
290
  msgid "Shortcode"
291
+ msgstr "Shortcode"
292
 
293
  #: includes/admin/class-dlm-admin-writepanels.php:118
294
  msgid "Featured download"
410
  #: includes/admin/class-dlm-admin.php:149 includes/class-dlm-installer.php:41
411
  #: includes/class-dlm-upgrade-manager.php:47
412
  msgid "You do not have permission to access this download. %sGo to homepage%s"
413
+ msgstr "Sie besitzen nicht die nötige Berechtigung, um auf diese Download-Datei zuzugreifen. %sGehe zur Homepage%s"
414
 
415
  #: includes/admin/class-dlm-admin.php:151
416
  msgid "No access message"
420
  msgid ""
421
  "The message that will be displayed to visitors when they don't have access "
422
  "to a file."
423
+ msgstr "Die Nachricht die angezeigt wird, wenn Besucher keinen Zugriff auf eine Datei haben."
424
 
425
  #: includes/admin/class-dlm-admin.php:158
426
  msgid "Endpoint"
534
 
535
  #: includes/admin/class-dlm-admin.php:335 includes/class-wp-dlm.php:203
536
  msgid "Extensions"
537
+ msgstr "Erweiterungen"
538
 
539
  #: includes/admin/class-dlm-admin.php:375
540
  msgid "Settings successfully saved"
598
  msgid ""
599
  "If you like %sDownload Monitor%s please leave us a %s★★★★★%s rating. A huge "
600
  "thank you from us in advance!"
601
+ msgstr "Wenn du %sDownload Monitor%s magst, hinterlasse uns doch eine %s★★★★★%s Bewertung. Ein großes Dankeschön von uns im Voraus!"
602
 
603
  #: includes/admin/class-dlm-logging-list-table.php:54
604
  msgid "Download Complete"
910
 
911
  #: includes/product/class-dlm-product.php:149
912
  msgid "License successfully activated."
913
+ msgstr "Lizenz erfolgreich aktiviert."
914
 
915
  #: includes/widgets/class-dlm-widget-downloads.php:29
916
  msgid "Display a list of your downloads."
927
 
928
  #: includes/widgets/class-dlm-widget-downloads.php:177
929
  msgid "Limit"
930
+ msgstr "Limit"
931
 
932
  #: includes/widgets/class-dlm-widget-downloads.php:184
933
  msgid "Output template"
955
 
956
  #: includes/widgets/class-dlm-widget-downloads.php:211
957
  msgid "Order"
958
+ msgstr "Reihenfolge"
959
 
960
  #: includes/widgets/class-dlm-widget-downloads.php:215
961
  msgid "ASC"
languages/download-monitor-nl_NL.mo CHANGED
Binary file
languages/download-monitor-nl_NL.po CHANGED
@@ -7,9 +7,9 @@ msgstr ""
7
  "Project-Id-Version: Download Monitor\n"
8
  "Report-Msgid-Bugs-To: https://github.com/download-monitor/download-monitor/issues\n"
9
  "POT-Creation-Date: 2015-03-22 12:53:18+00:00\n"
10
- "PO-Revision-Date: 2015-03-22 12:53+0000\n"
11
  "Last-Translator: Barry Kooij <mail@barrykooij.nl>\n"
12
- "Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/download-monitor/language/nl_NL/)\n"
13
  "MIME-Version: 1.0\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
@@ -997,7 +997,7 @@ msgstr "Download &ldquo;%s&rdquo;"
997
  msgid "Downloaded 1 time"
998
  msgid_plural "Downloaded %d times"
999
  msgstr[0] "% keer gedownload"
1000
- msgstr[1] "% keer gedownload"
1001
 
1002
  #. Plugin Name of the plugin/theme
1003
  msgid "Download Monitor"
7
  "Project-Id-Version: Download Monitor\n"
8
  "Report-Msgid-Bugs-To: https://github.com/download-monitor/download-monitor/issues\n"
9
  "POT-Creation-Date: 2015-03-22 12:53:18+00:00\n"
10
+ "PO-Revision-Date: 2015-07-09 09:39+0000\n"
11
  "Last-Translator: Barry Kooij <mail@barrykooij.nl>\n"
12
+ "Language-Team: Dutch (Netherlands) (http://www.transifex.com/p/download-monitor/language/nl_NL/)\n"
13
  "MIME-Version: 1.0\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
997
  msgid "Downloaded 1 time"
998
  msgid_plural "Downloaded %d times"
999
  msgstr[0] "% keer gedownload"
1000
+ msgstr[1] "%d keer gedownload"
1001
 
1002
  #. Plugin Name of the plugin/theme
1003
  msgid "Download Monitor"
readme.txt CHANGED
@@ -1,10 +1,10 @@
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, AJAX, digital, documents, download category, download manager, download template, downloadmanager, file manager, file tree, grid, hits, ip-address, manager, media, monitor, password, protect downloads, tracker
5
  Requires at least: 3.8
6
- Tested up to: 4.2.1
7
- Stable tag: 1.7.2
8
  License: GPLv3
9
 
10
  Download Monitor is a plugin for uploading and managing downloads, tracking downloads, and displaying links.
@@ -107,30 +107,54 @@ Legacy versions can still be [found here](http://wordpress.org/plugins/download-
107
 
108
  == Changelog ==
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  = 1.7.2: April 29, 2015 =
111
- * Fixed a bug that caused logs not to be displayed in WP 4.2.
112
 
113
  = 1.7.1: April 17, 2015 =
114
- * Pass third arg to add_query_arg to prevent XSS.
115
 
116
  = 1.7.0: March 22, 2015 =
117
- * Feature - Added 'Download Information' meta box to edit download screen that displays useful download information.
118
- * Feature - Error message shown when visitor has no access to download is now an option.
119
- * Fix - Fixing a bug where versions with spaces did not work, versions now are checked on a sanitized title.
120
- * Tweak - Viewing logs now needs custom capability: dlm_manage_logs (automatically added to administrators).
121
- * Tweak - Improved hotlink prevention check.
122
- * Tweak - Extension page tweaks.
123
- * Tweak - Added $download_id argument to dlm_hotlink_redirect filter.
124
- * Tweak - Moved hash settings to their own tab.
125
- * Tweak - Moved 'X-Accel-Redirect / X-Sendfile' and 'Prevent hotlinking' settings to General tab.
126
- * Tweak - Optimized the Insert Download button.
127
- * Tweak - Introduced a multi-byte-safe pathinfo so we can handle 'special' filenames.
128
- * Tweak - Also set the post_date_gmt value for version dates.
129
- * Tweak - Updated French translation. Props Li-An.
130
- * Tweak - Updated German translation. Props maphy-psd.
131
- * Tweak - Updated Swedish translation. Props EyesX.
132
- * Tweak - Update Slovakian translation. Props attitude.
133
- * Tweak - Added Dutch translation.
134
 
135
  = 1.6.4: March 8, 2015 =
136
  * Removed unused library jqueryFileTree.
1
  === Download Monitor ===
2
+ Contributors: never5, barrykooij, mikejolley
3
+ Donate link: http://www.barrykooij.com/donate/
4
  Tags: download, downloads, monitor, hits, download monitor, tracking, admin, count, counter, files, versions, download count, logging, AJAX, digital, documents, download category, download manager, download template, downloadmanager, file manager, file tree, grid, hits, ip-address, manager, media, monitor, password, protect downloads, tracker
5
  Requires at least: 3.8
6
+ Tested up to: 4.2.2
7
+ Stable tag: 1.8.0
8
  License: GPLv3
9
 
10
  Download Monitor is a plugin for uploading and managing downloads, tracking downloads, and displaying links.
107
 
108
  == Changelog ==
109
 
110
+ = 1.8.0: July 10, 2015 =
111
+ * Feature: Added option to only count downloads and add logs from unique ip addresses, props [Matt Mower](https://github.com/mdmower).
112
+ * Feature: It's now possible to display downloads with the downloads shortcode that are in all given categories (AND instead of OR) by using + (plus_ instead of , (comma).
113
+ * Feature: Display nginx rules if server is running nginx.
114
+ * Feature: Added Multisite / Network compatibility.
115
+ * Feature: Redone blacklist IP feature, now available in the 'Access' tab.
116
+ * Feature: Redone blacklist user agent feature, now available in the 'Access' tab.
117
+ * Tweak: Added icon support for Office X Excel & PPT extensions.
118
+ * Tweak: Run thumbnail compatibility method later to allowed themes to register first.
119
+ * Tweak: Prefixed admin CSS classes to prevent plugin conflicts.
120
+ * Tweak: Fix checking shortcodes for empty version strings, props [Matt Mower](https://github.com/mdmower).
121
+ * Tweak: Fixed a call of trigger() in DLM_Download_Handler, props [Matt Mower](https://github.com/mdmower).
122
+ * Tweak: Remove trailing space from downloads count, props [Matt Mower](https://github.com/mdmower).
123
+ * Tweak: Directory browser items are now always in alphabetical order, props [Matt Mower](https://github.com/mdmower).
124
+ * Tweak: The 60 seconds download counter increment cool down is now set to version ID instead of download ID, props [Matt Mower](https://github.com/mdmower).
125
+ * Tweak: Created and implemented local independent basename fixing issues with Cyrillic alphabets.
126
+ * Tweak: Made user agents regexes filterable: dlm_ua_parser_regexes.
127
+ * Tweak: Optimized log status icons, also fixes WP emoji conflict.
128
+ * Tweak: Members Only check now only does check if requester can still download.
129
+ * Tweak: Replaced PHP4 constructors in widget.
130
+ * Tweak: Added Danish translation.
131
+ * Tweak: Updated Dutch translation.
132
+ * Tweak: Updated German translation.
133
+
134
  = 1.7.2: April 29, 2015 =
135
+ * Tweak: Fixed a bug that caused logs not to be displayed in WP 4.2.
136
 
137
  = 1.7.1: April 17, 2015 =
138
+ * Tweak: Pass third arg to add_query_arg to prevent XSS.
139
 
140
  = 1.7.0: March 22, 2015 =
141
+ * Feature: Added 'Download Information' meta box to edit download screen that displays useful download information.
142
+ * Feature: Error message shown when visitor has no access to download is now an option.
143
+ * Tweak: Fixing a bug where versions with spaces did not work, versions now are checked on a sanitized title.
144
+ * Tweak: Viewing logs now needs custom capability: dlm_manage_logs (automatically added to administrators).
145
+ * Tweak: Improved hotlink prevention check.
146
+ * Tweak: Extension page tweaks.
147
+ * Tweak: Added $download_id argument to dlm_hotlink_redirect filter.
148
+ * Tweak: Moved hash settings to their own tab.
149
+ * Tweak: Moved 'X-Accel-Redirect / X-Sendfile' and 'Prevent hotlinking' settings to General tab.
150
+ * Tweak: Optimized the Insert Download button.
151
+ * Tweak: Introduced a multi-byte-safe pathinfo so we can handle 'special' filenames.
152
+ * Tweak: Also set the post_date_gmt value for version dates.
153
+ * Tweak: Updated French translation. Props Li-An.
154
+ * Tweak: Updated German translation. Props maphy-psd.
155
+ * Tweak: Updated Swedish translation. Props EyesX.
156
+ * Tweak: Update Slovakian translation. Props attitude.
157
+ * Tweak: Added Dutch translation.
158
 
159
  = 1.6.4: March 8, 2015 =
160
  * Removed unused library jqueryFileTree.
templates/content-download-filename.php CHANGED
@@ -10,6 +10,5 @@ global $dlm_download;
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>
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
  </a>
templates/content-download.php CHANGED
@@ -9,6 +9,5 @@ global $dlm_download;
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>
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
  </a>