WP Job Manager - Version 1.25.1

Version Description

  • Feature - Adds a view button to the Admin UI for easy access to submitted files or URLs. Props tripflex (https://github.com/Automattic/WP-Job-Manager/pull/650)
  • Fix - Add hardening to file uploads to prevent accepting unexpected file times. Previously, other WP-allowed types were sometimes accepted.
  • Fix - Job post form categories are now properly cached and displayed per language when using WPML or Polylang. (https://github.com/Automattic/WP-Job-Manager/issues/692)
  • Fix - Refactored WPML workaround, which was causing no job listings on non-default languages. (https://github.com/Automattic/WP-Job-Manager/issues/617)
  • Fix - Allow employers to edit job listings when a listing is pending payment. (https://github.com/Automattic/WP-Job-Manager/pull/664)
  • Fix - No longer display Job Taxonomies in the WordPress tag cloud. (https://github.com/Automattic/WP-Job-Manager/pull/658)
  • Fix - Migrate away from jQuery.live, which is no longer supported. ( https://github.com/Automattic/WP-Job-Manager/pull/664 )
  • Tweak - Updated incorrect settings description. (https://github.com/Automattic/WP-Job-Manager/pull/632)
  • Dev - Adds hook to add items in a job's RSS feed item. (https://github.com/Automattic/WP-Job-Manager/pull/636)
  • Dev - Adds filter to disable Job Listings cache (https://github.com/Automattic/WP-Job-Manager/pull/684)
  • Dev - Inline docs and coding standards improvements.
Download this release

Release Info

Developer kraftbj
Plugin Icon 128x128 WP Job Manager
Version 1.25.1
Comparing to
See all releases

Code changes from version 1.25.0 to 1.25.1

.github/ISSUE_TEMPLATE.md DELETED
@@ -1,17 +0,0 @@
1
- <!--
2
- Thanks for contributing to WP Job Manager! Enter a clear title (e.g. "Search error when using plus sign") and proceed.
3
- -->
4
-
5
- #### What I Expected To Happen
6
-
7
- #### What Happened Instead
8
-
9
- #### Steps to Reproduce the Bug
10
-
11
- <!--
12
- PLEASE NOTE:
13
- - These comments won't show up when you submit the issue.
14
- - Try to add as much detail as possible. Be specific!
15
- - GitHub issues aren't for support! If you have questions, use this form: https://wpjobmanager.com/support/
16
- - If you're requesting a new feature, explain why you'd like it to be added.
17
- -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/admin.css CHANGED
@@ -1 +1 @@
1
- .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.job-manager-settings-wrap .updated{display:none}.job-manager-settings-wrap .job-manager-updated{display:block;margin:1em 0 0}.widefat td.column-featured_job,.widefat td.column-filled,.widefat td.column-job_status{width:46px;text-align:left;padding-left:11px}.widefat th.column-featured_job,.widefat th.column-filled,.widefat th.column-job_status{width:1em}.widefat th.column-featured_job span,.widefat th.column-filled span,.widefat th.column-job_status span{display:block;width:1em;height:1em;line-height:1em;padding:1px 0 0;overflow:hidden}.widefat th.column-featured_job span:before,.widefat th.column-filled span:before,.widefat th.column-job_status span:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.widefat th.column-filled span:before{content:'\e807'}.widefat th.column-job_status span:before{content:'\e828'}.widefat .column-job_posted strong{display:block;margin-bottom:.2em}.widefat td.column-job_status span{position:relative;font-size:1em;line-height:1.5em;width:1em;height:0;padding:2em 0 0;overflow:hidden;display:block}.widefat td.column-job_status span:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;position:absolute;top:0;left:0;line-height:1.5em;vertical-align:middle;color:#999;content:'\e829'}.widefat td.column-job_status .status-trash:before{content:'\e82b';color:#a00}.widefat td.column-job_status .status-pending:before{content:'\e82c';color:#ffba00}.widefat td.column-job_status .status-publish:before{content:'\e82f';color:#73a724}.widefat td.column-job_status .status-expired:before{content:'\e82e';color:#a00}.widefat .column-job_listing_type{text-align:left;width:6em;word-wrap:normal!important}.widefat .column-job_listing_type .job-type{color:#fff;padding:4px;font-size:11px;-webkit-border-radius:2px;border-radius:2px;display:block;background-color:#f08d3c;text-align:center}.widefat .column-job_listing_type .full-time{background-color:#90da36}.widefat .column-job_listing_type .part-time{background-color:#f08d3c}.widefat .column-job_listing_type .temporary{background-color:#d93674}.widefat .column-job_listing_type .freelance{background-color:#39c}.widefat .column-job_listing_type .internship{background-color:#6033cc}.widefat th.column-job_position{width:20%}.widefat td.column-job_position{width:20%;height:34px}.widefat td.column-job_position .job_position{position:relative;padding-right:50px!important}.widefat td.column-job_position a.job_title{font-weight:700}.widefat td.column-job_position img{width:32px;height:32px;position:absolute;right:7px;top:0;-webkit-border-radius:50%;border-radius:50%;box-shadow:0 1px 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 0 1px rgba(0,0,0,.1);border:1px solid #fff}.widefat td.column-job_position .company{margin-top:.2em;display:block;padding-top:2px;color:#bbb}.widefat .column-job_location{width:10%}.widefat .column-job_actions{text-align:right;width:128px}.widefat .column-job_actions strong{display:block;margin-bottom:.2em}.widefat .column-job_actions .actions{padding-top:2px}.widefat .column-job_actions a.button{display:inline-block;margin:0 0 2px 4px;cursor:pointer;padding:0 6px!important;font-size:1em!important;line-height:2em!important;overflow:hidden}.widefat .column-job_actions a.button-icon{width:2em!important;padding:0!important}.widefat .column-job_actions a.button-icon:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;text-align:center;font-variant:normal;text-transform:none;float:left;width:2em!important;line-height:2em}.widefat .column-job_actions .icon-view:before{content:'\e805'}.widefat .column-job_actions .icon-edit:before{content:'\e804'}.widefat .column-job_actions .icon-delete:before{content:'\e82b'}.widefat .column-job_actions .icon-approve:before{content:'\e802'}.wp_job_manager_meta_data{padding:12px;zoom:1}.wp_job_manager_meta_data:after,.wp_job_manager_meta_data:before{content:"";display:table}.wp_job_manager_meta_data:after{clear:both}.wp_job_manager_meta_data .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;padding:0 12px 0 0;margin:0 0 12px;clear:both}.wp_job_manager_meta_data .form-field:nth-child(even){float:right;padding:0 0 0 12px;clear:right}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wp_job_manager_meta_data .form-field label{vertical-align:middle;display:block;font-weight:700;margin:0}.wp_job_manager_meta_data .form-field .tips{cursor:help;float:right;font-weight:400;color:#999}.wp_job_manager_meta_data .form-field input{width:100%;margin:1px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.wp_job_manager_meta_data .form-field input.checkbox,.wp_job_manager_meta_data .form-field input.radio{width:auto;margin:4px 2px;display:inline-block}.wp_job_manager_meta_data .form-field .description{display:block;color:#999}.wp_job_manager_meta_data .form-field.form-field-checkbox .description{display:inline}.wp_job_manager_meta_data .form-field .file_url input{width:75%}.wp_job_manager_meta_data .form-field .button{margin-left:4px}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;padding:4px 8px;background:#464646;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.1);-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 3px rgba(0,0,0,.1);text-align:center}#tiptip_content code{background:#999;padding:1px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#464646}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#464646}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#464646}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#464646}.wp_job_manager_addons_wrap #job-manager-addons-banner{position:relative;background:#d85677;padding:0 2em 0 5em;color:#fff;margin:10px .25% 20px 0;border-color:rgba(0,0,0,.1);overflow:hidden}.wp_job_manager_addons_wrap #job-manager-addons-banner strong{font-size:1.25em;line-height:.8em;text-shadow:0 2px 0 rgba(0,0,0,.1);font-weight:400;float:left;padding:1.6em 0}.wp_job_manager_addons_wrap #job-manager-addons-banner a.button{color:#fff;text-decoration:none;font-weight:700;float:right;background:#d85677;border:1px solid #fff;line-height:1em;padding:1em;margin:1em 0;text-shadow:0 2px 0 rgba(0,0,0,.1);box-shadow:0 2px 0 rgba(0,0,0,.1);height:auto;position:relative}.wp_job_manager_addons_wrap #job-manager-addons-banner:before{display:inline-block;-webkit-font-smoothing:antialiased;vertical-align:top;font-family:jm-logo;content:"\e600";top:.02em;left:0;position:absolute;text-shadow:0 2px 0 rgba(0,0,0,.1);font-size:5em;font-weight:400;text-align:center;width:1em;height:1em;line-height:1em}.wp_job_manager_addons_wrap .products{overflow:hidden}.wp_job_manager_addons_wrap .products li{display:inline-block;margin:0 1% 10px 0!important;padding:0;vertical-align:top;width:24%;min-width:250px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;position:relative;opacity:.8}.wp_job_manager_addons_wrap .products li:nth-child(4n+0){margin-right:0!important}.wp_job_manager_addons_wrap .products li a{color:inherit;text-decoration:none}.wp_job_manager_addons_wrap .products li img{width:100%;height:auto;display:block;padding:0;margin:0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)}.wp_job_manager_addons_wrap .products li h2{margin:0!important;padding:10px 0!important;line-height:1;background:rgba(255,255,255,.6);border-bottom:1px solid rgba(0,0,0,.1);color:#000;text-align:center;position:absolute;width:100%;top:0;left:0;font-size:16px;text-shadow:none;display:none}.wp_job_manager_addons_wrap .products li:focus,.wp_job_manager_addons_wrap .products li:hover{opacity:1}.wp_job_manager_addons_wrap .products li:focus h2,.wp_job_manager_addons_wrap .products li:hover h2{display:block}.wp_job_manager_addons_wrap .products li .third_party{display:none}.wp_job_manager_addons_wrap .products li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.wp_job_manager_addons_wrap .products li .price{display:none}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.rtl .wp_job_manager_meta_data p{padding:0 20% 0 0}.rtl .wp_job_manager_meta_data label{left:auto;right:0}
1
+ .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.job-manager-settings-wrap .updated{display:none}.job-manager-settings-wrap .job-manager-updated{display:block;margin:1em 0 0}.widefat td.column-featured_job,.widefat td.column-filled,.widefat td.column-job_status{width:46px;text-align:left;padding-left:11px}.widefat th.column-featured_job,.widefat th.column-filled,.widefat th.column-job_status{width:1em}.widefat th.column-featured_job span,.widefat th.column-filled span,.widefat th.column-job_status span{display:block;width:1em;height:1em;line-height:1em;padding:1px 0 0;overflow:hidden}.widefat th.column-featured_job span:before,.widefat th.column-filled span:before,.widefat th.column-job_status span:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.widefat th.column-filled span:before{content:'\e807'}.widefat th.column-job_status span:before{content:'\e828'}.widefat .column-job_posted strong{display:block;margin-bottom:.2em}.widefat td.column-job_status span{position:relative;font-size:1em;line-height:1.5em;width:1em;height:0;padding:2em 0 0;overflow:hidden;display:block}.widefat td.column-job_status span:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;position:absolute;top:0;left:0;line-height:1.5em;vertical-align:middle;color:#999;content:'\e829'}.widefat td.column-job_status .status-trash:before{content:'\e82b';color:#a00}.widefat td.column-job_status .status-pending:before{content:'\e82c';color:#ffba00}.widefat td.column-job_status .status-publish:before{content:'\e82f';color:#73a724}.widefat td.column-job_status .status-expired:before{content:'\e82e';color:#a00}.widefat .column-job_listing_type{text-align:left;width:6em;word-wrap:normal!important}.widefat .column-job_listing_type .job-type{color:#fff;padding:4px;font-size:11px;-webkit-border-radius:2px;border-radius:2px;display:block;background-color:#f08d3c;text-align:center}.widefat .column-job_listing_type .full-time{background-color:#90da36}.widefat .column-job_listing_type .part-time{background-color:#f08d3c}.widefat .column-job_listing_type .temporary{background-color:#d93674}.widefat .column-job_listing_type .freelance{background-color:#39c}.widefat .column-job_listing_type .internship{background-color:#6033cc}.widefat th.column-job_position{width:20%}.widefat td.column-job_position{width:20%;height:34px}.widefat td.column-job_position .job_position{position:relative;padding-right:50px!important}.widefat td.column-job_position a.job_title{font-weight:700}.widefat td.column-job_position img{width:32px;height:32px;position:absolute;right:7px;top:0;-webkit-border-radius:50%;border-radius:50%;box-shadow:0 1px 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 0 1px rgba(0,0,0,.1);border:1px solid #fff}.widefat td.column-job_position .company{margin-top:.2em;display:block;padding-top:2px;color:#bbb}.widefat .column-job_location{width:10%}.widefat .column-job_actions{text-align:right;width:128px}.widefat .column-job_actions strong{display:block;margin-bottom:.2em}.widefat .column-job_actions .actions{padding-top:2px}.widefat .column-job_actions a.button{display:inline-block;margin:0 0 2px 4px;cursor:pointer;padding:0 6px!important;font-size:1em!important;line-height:2em!important;overflow:hidden}.widefat .column-job_actions a.button-icon{width:2em!important;padding:0!important}.widefat .column-job_actions a.button-icon:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;text-align:center;font-variant:normal;text-transform:none;float:left;width:2em!important;line-height:2em}.widefat .column-job_actions .icon-view:before{content:'\e805'}.widefat .column-job_actions .icon-edit:before{content:'\e804'}.widefat .column-job_actions .icon-delete:before{content:'\e82b'}.widefat .column-job_actions .icon-approve:before{content:'\e802'}.wp_job_manager_meta_data{padding:12px;zoom:1}.wp_job_manager_meta_data:after,.wp_job_manager_meta_data:before{content:"";display:table}.wp_job_manager_meta_data:after{clear:both}.wp_job_manager_meta_data .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;padding:0 12px 0 0;margin:0 0 12px;clear:both}.wp_job_manager_meta_data .form-field:nth-child(even){float:right;padding:0 0 0 12px;clear:right}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wp_job_manager_meta_data .form-field label{vertical-align:middle;display:block;font-weight:700;margin:0}.wp_job_manager_meta_data .form-field .tips{cursor:help;float:right;font-weight:400;color:#999}.wp_job_manager_meta_data .form-field input{width:100%;margin:1px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.wp_job_manager_meta_data .form-field input.checkbox,.wp_job_manager_meta_data .form-field input.radio{width:auto;margin:4px 2px;display:inline-block}.wp_job_manager_meta_data .form-field .description{display:block;color:#999}.wp_job_manager_meta_data .form-field.form-field-checkbox .description{display:inline}.wp_job_manager_meta_data .form-field .file_url input{width:75%}.wp_job_manager_meta_data .form-field .button{margin-left:4px}.wp_job_manager_meta_data .form-field .file_no_url{-o-animation:flash .3s linear infinite alternate;-webkit-animation:flash .3s linear infinite alternate;-moz-animation:flash .3s linear infinite alternate;animation:flash .3s linear infinite alternate}@-o-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-ms-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-moz-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-webkit-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@keyframes flash{from{background-color:unset}to{background-color:#dc3232}}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;padding:4px 8px;background:#464646;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.1);-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 3px rgba(0,0,0,.1);text-align:center}#tiptip_content code{background:#999;padding:1px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#464646}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#464646}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#464646}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#464646}.wp_job_manager_addons_wrap #job-manager-addons-banner{position:relative;background:#d85677;padding:0 2em 0 5em;color:#fff;margin:10px .25% 20px 0;border-color:rgba(0,0,0,.1);overflow:hidden}.wp_job_manager_addons_wrap #job-manager-addons-banner strong{font-size:1.25em;line-height:.8em;text-shadow:0 2px 0 rgba(0,0,0,.1);font-weight:400;float:left;padding:1.6em 0}.wp_job_manager_addons_wrap #job-manager-addons-banner a.button{color:#fff;text-decoration:none;font-weight:700;float:right;background:#d85677;border:1px solid #fff;line-height:1em;padding:1em;margin:1em 0;text-shadow:0 2px 0 rgba(0,0,0,.1);box-shadow:0 2px 0 rgba(0,0,0,.1);height:auto;position:relative}.wp_job_manager_addons_wrap #job-manager-addons-banner:before{display:inline-block;-webkit-font-smoothing:antialiased;vertical-align:top;font-family:jm-logo;content:"\e600";top:.02em;left:0;position:absolute;text-shadow:0 2px 0 rgba(0,0,0,.1);font-size:5em;font-weight:400;text-align:center;width:1em;height:1em;line-height:1em}.wp_job_manager_addons_wrap .products{overflow:hidden}.wp_job_manager_addons_wrap .products li{display:inline-block;margin:0 1% 10px 0!important;padding:0;vertical-align:top;width:24%;min-width:250px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;position:relative;opacity:.8}.wp_job_manager_addons_wrap .products li:nth-child(4n+0){margin-right:0!important}.wp_job_manager_addons_wrap .products li a{color:inherit;text-decoration:none}.wp_job_manager_addons_wrap .products li img{width:100%;height:auto;display:block;padding:0;margin:0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)}.wp_job_manager_addons_wrap .products li h2{margin:0!important;padding:10px 0!important;line-height:1;background:rgba(255,255,255,.6);border-bottom:1px solid rgba(0,0,0,.1);color:#000;text-align:center;position:absolute;width:100%;top:0;left:0;font-size:16px;text-shadow:none;display:none}.wp_job_manager_addons_wrap .products li:focus,.wp_job_manager_addons_wrap .products li:hover{opacity:1}.wp_job_manager_addons_wrap .products li:focus h2,.wp_job_manager_addons_wrap .products li:hover h2{display:block}.wp_job_manager_addons_wrap .products li .third_party{display:none}.wp_job_manager_addons_wrap .products li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.wp_job_manager_addons_wrap .products li .price{display:none}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.rtl .wp_job_manager_meta_data p{padding:0 20% 0 0}.rtl .wp_job_manager_meta_data label{left:auto;right:0}
assets/css/admin.less CHANGED
@@ -199,11 +199,11 @@
199
  zoom: 1;
200
  &:before,
201
  &:after {
202
-   content: "";
203
-   display: table;
204
  }
205
  &:after {
206
-   clear: both;
207
  }
208
  .form-field {
209
  width: 50%;
@@ -263,6 +263,14 @@
263
  .button {
264
  margin-left: 4px;
265
  }
 
 
 
 
 
 
 
 
266
  }
267
  }
268
 
199
  zoom: 1;
200
  &:before,
201
  &:after {
202
+ content: "";
203
+ display: table;
204
  }
205
  &:after {
206
+ clear: both;
207
  }
208
  .form-field {
209
  width: 50%;
263
  .button {
264
  margin-left: 4px;
265
  }
266
+ .file_no_url {
267
+ .keyframes(flash; {
268
+ from { background-color: unset; }
269
+ to { background-color: #dc3232; }
270
+ });
271
+
272
+ .animation(flash 0.3s linear infinite alternate);
273
+ }
274
  }
275
  }
276
 
assets/css/mixins.less CHANGED
@@ -87,4 +87,19 @@
87
  box-sizing: border-box; /* Opera/IE 8+ */
88
  }
89
  .darkorlighttextshadow ( @a, @opacity: 0.8 ) when (lightness(@a) >= 65%) { .text_shadow( 0, -1px, 0, rgba(0,0,0,@opacity) ); }
90
- .darkorlighttextshadow ( @a, @opacity: 0.8 ) when (lightness(@a) < 65%) { .text_shadow( 0, 1px, 0, rgba(255,255,255,@opacity) ); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  box-sizing: border-box; /* Opera/IE 8+ */
88
  }
89
  .darkorlighttextshadow ( @a, @opacity: 0.8 ) when (lightness(@a) >= 65%) { .text_shadow( 0, -1px, 0, rgba(0,0,0,@opacity) ); }
90
+ .darkorlighttextshadow ( @a, @opacity: 0.8 ) when (lightness(@a) < 65%) { .text_shadow( 0, 1px, 0, rgba(255,255,255,@opacity) ); }
91
+
92
+ .keyframes(@name; @arguments) {
93
+ @-o-keyframes @name { @arguments(); }
94
+ @-ms-keyframes @name { @arguments(); }
95
+ @-moz-keyframes @name { @arguments(); }
96
+ @-webkit-keyframes @name { @arguments(); }
97
+ @keyframes @name { @arguments(); }
98
+ }
99
+
100
+ .animation(@animation) {
101
+ -o-animation: @animation;
102
+ -webkit-animation: @animation;
103
+ -moz-animation: @animation;
104
+ animation: @animation;
105
+ }
assets/js/admin.js CHANGED
@@ -1,6 +1,7 @@
 
1
  jQuery(document).ready(function($) {
2
  // Tooltips
3
- $( ".tips, .help_tip" ).tipTip({
4
  'attribute' : 'data-tip',
5
  'fadeIn' : 50,
6
  'fadeOut' : 50,
@@ -8,7 +9,7 @@ jQuery(document).ready(function($) {
8
  });
9
 
10
  // Author
11
- $( "p.form-field-author" ).on( 'click', 'a.change-author', function() {
12
  $(this).closest( 'p' ).find('.current-author').hide();
13
  $(this).closest( 'p' ).find('.change-author').show();
14
  return false;
@@ -24,7 +25,7 @@ jQuery(document).ready(function($) {
24
  $( 'input.job-manager-datepicker, input#_job_expires' ).each( function(){
25
  if ( $(this).val() ) {
26
  var date = new Date( $(this).val() );
27
- $(this).datepicker( "setDate", date );
28
  }
29
  });
30
 
@@ -33,48 +34,67 @@ jQuery(document).ready(function($) {
33
  var file_target_input;
34
  var file_target_wrapper;
35
 
36
- $('.wp_job_manager_add_another_file_button').live('click', function( event ){
37
  event.preventDefault();
38
 
39
- var wrapper = $( this ).closest( '.form-field' );
40
  var field_name = $( this ).data( 'field_name' );
41
  var field_placeholder = $( this ).data( 'field_placeholder' );
42
  var button_text = $( this ).data( 'uploader_button_text' );
43
  var button = $( this ).data( 'uploader_button' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- $( this ).before('<span class="file_url"><input type="text" name="' + field_name + '[]" placeholder="' + field_placeholder + '" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="' + button_text + '">' + button + '</button></span>');
46
  });
47
 
48
- $('.wp_job_manager_upload_file_button').live('click', function( event ){
49
- event.preventDefault();
50
 
51
- file_target_wrapper = $( this ).closest('.file_url');
52
- file_target_input = file_target_wrapper.find('input');
53
 
54
- // If the media frame already exists, reopen it.
55
- if ( file_frame ) {
56
  file_frame.open();
57
  return;
58
- }
59
 
60
- // Create the media frame.
61
- file_frame = wp.media.frames.file_frame = wp.media({
62
  title: $( this ).data( 'uploader_title' ),
63
  button: {
64
- text: $( this ).data( 'uploader_button_text' ),
65
  },
66
  multiple: false // Set to true to allow multiple files to be selected
67
- });
68
 
69
- // When an image is selected, run a callback.
70
- file_frame.on( 'select', function() {
71
  // We set multiple to false so only get one image from the uploader
72
- attachment = file_frame.state().get('selection').first().toJSON();
73
 
74
  $( file_target_input ).val( attachment.url );
75
- });
76
 
77
- // Finally, open the modal
78
- file_frame.open();
79
  });
80
  });
1
+ /* global job_manager_admin */
2
  jQuery(document).ready(function($) {
3
  // Tooltips
4
+ $( '.tips, .help_tip' ).tipTip({
5
  'attribute' : 'data-tip',
6
  'fadeIn' : 50,
7
  'fadeOut' : 50,
9
  });
10
 
11
  // Author
12
+ $( 'p.form-field-author' ).on( 'click', 'a.change-author', function() {
13
  $(this).closest( 'p' ).find('.current-author').hide();
14
  $(this).closest( 'p' ).find('.change-author').show();
15
  return false;
25
  $( 'input.job-manager-datepicker, input#_job_expires' ).each( function(){
26
  if ( $(this).val() ) {
27
  var date = new Date( $(this).val() );
28
+ $(this).datepicker( 'setDate', date );
29
  }
30
  });
31
 
34
  var file_target_input;
35
  var file_target_wrapper;
36
 
37
+ $(document).on('click', '.wp_job_manager_add_another_file_button', function( event ){
38
  event.preventDefault();
39
 
 
40
  var field_name = $( this ).data( 'field_name' );
41
  var field_placeholder = $( this ).data( 'field_placeholder' );
42
  var button_text = $( this ).data( 'uploader_button_text' );
43
  var button = $( this ).data( 'uploader_button' );
44
+ var view_button = $( this ).data( 'view_button' );
45
+
46
+ $( this ).before( '<span class="file_url"><input type="text" name="' + field_name + '[]" placeholder="' + field_placeholder + '" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="' + button_text + '">' + button + '</button><button class="button button-small wp_job_manager_view_file_button">' + view_button + '</button></span>' );
47
+ } );
48
+
49
+ $(document).on('click', '.wp_job_manager_view_file_button', function ( event ) {
50
+ event.preventDefault();
51
+
52
+ file_target_wrapper = $( this ).closest( '.file_url' );
53
+ file_target_input = file_target_wrapper.find( 'input' );
54
+
55
+ var attachment_url = file_target_input.val();
56
+
57
+ if ( attachment_url.indexOf( '://' ) > - 1 ) {
58
+ window.open( attachment_url, '_blank' );
59
+ } else {
60
+ file_target_input.addClass( 'file_no_url' );
61
+ setTimeout( function () {
62
+ file_target_input.removeClass( 'file_no_url' );
63
+ }, 1000 );
64
+ }
65
 
 
66
  });
67
 
68
+ $(document).on('click', '.wp_job_manager_upload_file_button', function( event ){
69
+ event.preventDefault();
70
 
71
+ file_target_wrapper = $( this ).closest('.file_url');
72
+ file_target_input = file_target_wrapper.find('input');
73
 
74
+ // If the media frame already exists, reopen it.
75
+ if ( file_frame ) {
76
  file_frame.open();
77
  return;
78
+ }
79
 
80
+ // Create the media frame.
81
+ file_frame = wp.media.frames.file_frame = wp.media({
82
  title: $( this ).data( 'uploader_title' ),
83
  button: {
84
+ text: $( this ).data( 'uploader_button_text' )
85
  },
86
  multiple: false // Set to true to allow multiple files to be selected
87
+ });
88
 
89
+ // When an image is selected, run a callback.
90
+ file_frame.on( 'select', function() {
91
  // We set multiple to false so only get one image from the uploader
92
+ var attachment = file_frame.state().get('selection').first().toJSON();
93
 
94
  $( file_target_input ).val( attachment.url );
95
+ });
96
 
97
+ // Finally, open the modal
98
+ file_frame.open();
99
  });
100
  });
assets/js/admin.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){a(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),a("p.form-field-author").on("click","a.change-author",function(){return a(this).closest("p").find(".current-author").hide(),a(this).closest("p").find(".change-author").show(),!1}),a("input.job-manager-datepicker, input#_job_expires").datepicker({altFormat:"yy-mm-dd",dateFormat:job_manager_admin.date_format,minDate:0}),a("input.job-manager-datepicker, input#_job_expires").each(function(){if(a(this).val()){var b=new Date(a(this).val());a(this).datepicker("setDate",b)}});var b,c,d;a(".wp_job_manager_add_another_file_button").live("click",function(b){b.preventDefault();var c=(a(this).closest(".form-field"),a(this).data("field_name")),d=a(this).data("field_placeholder"),e=a(this).data("uploader_button_text"),f=a(this).data("uploader_button");a(this).before('<span class="file_url"><input type="text" name="'+c+'[]" placeholder="'+d+'" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="'+e+'">'+f+"</button></span>")}),a(".wp_job_manager_upload_file_button").live("click",function(e){return e.preventDefault(),d=a(this).closest(".file_url"),c=d.find("input"),b?void b.open():(b=wp.media.frames.file_frame=wp.media({title:a(this).data("uploader_title"),button:{text:a(this).data("uploader_button_text")},multiple:!1}),b.on("select",function(){attachment=b.state().get("selection").first().toJSON(),a(c).val(attachment.url)}),void b.open())})});
1
+ jQuery(document).ready(function(a){a(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),a("p.form-field-author").on("click","a.change-author",function(){return a(this).closest("p").find(".current-author").hide(),a(this).closest("p").find(".change-author").show(),!1}),a("input.job-manager-datepicker, input#_job_expires").datepicker({altFormat:"yy-mm-dd",dateFormat:job_manager_admin.date_format,minDate:0}),a("input.job-manager-datepicker, input#_job_expires").each(function(){if(a(this).val()){var b=new Date(a(this).val());a(this).datepicker("setDate",b)}});var b,c,d;a(document).on("click",".wp_job_manager_add_another_file_button",function(b){b.preventDefault();var c=a(this).data("field_name"),d=a(this).data("field_placeholder"),e=a(this).data("uploader_button_text"),f=a(this).data("uploader_button"),g=a(this).data("view_button");a(this).before('<span class="file_url"><input type="text" name="'+c+'[]" placeholder="'+d+'" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="'+e+'">'+f+'</button><button class="button button-small wp_job_manager_view_file_button">'+g+"</button></span>")}),a(document).on("click",".wp_job_manager_view_file_button",function(b){b.preventDefault(),d=a(this).closest(".file_url"),c=d.find("input");var e=c.val();e.indexOf("://")>-1?window.open(e,"_blank"):(c.addClass("file_no_url"),setTimeout(function(){c.removeClass("file_no_url")},1e3))}),a(document).on("click",".wp_job_manager_upload_file_button",function(e){return e.preventDefault(),d=a(this).closest(".file_url"),c=d.find("input"),b?void b.open():(b=wp.media.frames.file_frame=wp.media({title:a(this).data("uploader_title"),button:{text:a(this).data("uploader_button_text")},multiple:!1}),b.on("select",function(){var d=b.state().get("selection").first().toJSON();a(c).val(d.url)}),void b.open())})});
assets/js/ajax-file-upload.js CHANGED
@@ -1,9 +1,10 @@
 
1
  jQuery(function($) {
2
  $('.wp-job-manager-file-upload').each(function(){
3
  $(this).fileupload({
4
  dataType: 'json',
5
  dropZone: $(this),
6
- url: job_manager_ajax_file_upload.ajax_url.toString().replace( "%%endpoint%%", "upload_file" ),
7
  maxNumberOfFiles: 1,
8
  formData: {
9
  script: true
@@ -18,15 +19,15 @@ jQuery(function($) {
18
  var allowed_types = $(this).data('file_types');
19
 
20
  if ( allowed_types ) {
21
- var acceptFileTypes = new RegExp( "(\.|\/)(" + allowed_types + ")$", "i" );
22
 
23
- if ( data.originalFiles[0]['name'].length && ! acceptFileTypes.test( data.originalFiles[0]['name'] ) ) {
24
- uploadErrors.push( job_manager_ajax_file_upload.i18n_invalid_file_type + ' ' + allowed_types );
25
- }
26
- }
27
 
28
- if ( uploadErrors.length > 0 ) {
29
- alert( uploadErrors.join( "\n" ) );
30
  } else {
31
  $form.find(':input[type="submit"]').attr( 'disabled', 'disabled' );
32
  data.context = $('<progress value="" max="100"></progress>').appendTo( $uploaded_files );
@@ -34,8 +35,6 @@ jQuery(function($) {
34
  }
35
  },
36
  progress: function (e, data) {
37
- var $file_field = $( this );
38
- var $uploaded_files = $file_field.parent().find('.job-manager-uploaded-files');
39
  var progress = parseInt(data.loaded / data.total * 100, 10);
40
  data.context.val( progress );
41
  },
@@ -44,7 +43,7 @@ jQuery(function($) {
44
  var $form = $file_field.closest( 'form' );
45
 
46
  if ( data.errorThrown ) {
47
- alert( data.errorThrown );
48
  }
49
 
50
  data.context.remove();
@@ -62,13 +61,14 @@ jQuery(function($) {
62
 
63
  $.each(data.result.files, function(index, file) {
64
  if ( file.error ) {
65
- alert( file.error );
66
  } else {
 
67
  if ( $.inArray( file.extension, image_types ) >= 0 ) {
68
- var html = $.parseHTML( job_manager_ajax_file_upload.js_field_html_img );
69
  $( html ).find('.job-manager-uploaded-file-preview img').attr( 'src', file.url );
70
  } else {
71
- var html = $.parseHTML( job_manager_ajax_file_upload.js_field_html );
72
  $( html ).find('.job-manager-uploaded-file-name code').text( file.name );
73
  }
74
 
1
+ /* global job_manager_ajax_file_upload */
2
  jQuery(function($) {
3
  $('.wp-job-manager-file-upload').each(function(){
4
  $(this).fileupload({
5
  dataType: 'json',
6
  dropZone: $(this),
7
+ url: job_manager_ajax_file_upload.ajax_url.toString().replace( '%%endpoint%%', 'upload_file' ),
8
  maxNumberOfFiles: 1,
9
  formData: {
10
  script: true
19
  var allowed_types = $(this).data('file_types');
20
 
21
  if ( allowed_types ) {
22
+ var acceptFileTypes = new RegExp( '(\.|\/)(' + allowed_types + ')$', 'i' );
23
 
24
+ if ( data.originalFiles[0].name.length && ! acceptFileTypes.test( data.originalFiles[0].name ) ) {
25
+ uploadErrors.push( job_manager_ajax_file_upload.i18n_invalid_file_type + ' ' + allowed_types );
26
+ }
27
+ }
28
 
29
+ if ( uploadErrors.length > 0 ) {
30
+ window.alert( uploadErrors.join( '\n' ) );
31
  } else {
32
  $form.find(':input[type="submit"]').attr( 'disabled', 'disabled' );
33
  data.context = $('<progress value="" max="100"></progress>').appendTo( $uploaded_files );
35
  }
36
  },
37
  progress: function (e, data) {
 
 
38
  var progress = parseInt(data.loaded / data.total * 100, 10);
39
  data.context.val( progress );
40
  },
43
  var $form = $file_field.closest( 'form' );
44
 
45
  if ( data.errorThrown ) {
46
+ window.alert( data.errorThrown );
47
  }
48
 
49
  data.context.remove();
61
 
62
  $.each(data.result.files, function(index, file) {
63
  if ( file.error ) {
64
+ window.alert( file.error );
65
  } else {
66
+ var html;
67
  if ( $.inArray( file.extension, image_types ) >= 0 ) {
68
+ html = $.parseHTML( job_manager_ajax_file_upload.js_field_html_img );
69
  $( html ).find('.job-manager-uploaded-file-preview img').attr( 'src', file.url );
70
  } else {
71
+ html = $.parseHTML( job_manager_ajax_file_upload.js_field_html );
72
  $( html ).find('.job-manager-uploaded-file-name code').text( file.name );
73
  }
74
 
assets/js/ajax-file-upload.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(a){a(".wp-job-manager-file-upload").each(function(){a(this).fileupload({dataType:"json",dropZone:a(this),url:job_manager_ajax_file_upload.ajax_url.toString().replace("%%endpoint%%","upload_file"),maxNumberOfFiles:1,formData:{script:!0},add:function(b,c){var d=a(this),e=d.closest("form"),f=d.parent().find(".job-manager-uploaded-files"),g=[],h=a(this).data("file_types");if(h){var i=new RegExp("(.|/)("+h+")$","i");c.originalFiles[0].name.length&&!i.test(c.originalFiles[0].name)&&g.push(job_manager_ajax_file_upload.i18n_invalid_file_type+" "+h)}g.length>0?alert(g.join("\n")):(e.find(':input[type="submit"]').attr("disabled","disabled"),c.context=a('<progress value="" max="100"></progress>').appendTo(f),c.submit())},progress:function(b,c){var d=a(this),e=(d.parent().find(".job-manager-uploaded-files"),parseInt(c.loaded/c.total*100,10));c.context.val(e)},fail:function(b,c){var d=a(this),e=d.closest("form");c.errorThrown&&alert(c.errorThrown),c.context.remove(),e.find(':input[type="submit"]').removeAttr("disabled")},done:function(b,c){var d=a(this),e=d.closest("form"),f=d.parent().find(".job-manager-uploaded-files"),g=d.attr("multiple")?1:0,h=["jpg","gif","png","jpeg","jpe"];c.context.remove(),a.each(c.result.files,function(b,c){if(c.error)alert(c.error);else{if(a.inArray(c.extension,h)>=0){var e=a.parseHTML(job_manager_ajax_file_upload.js_field_html_img);a(e).find(".job-manager-uploaded-file-preview img").attr("src",c.url)}else{var e=a.parseHTML(job_manager_ajax_file_upload.js_field_html);a(e).find(".job-manager-uploaded-file-name code").text(c.name)}a(e).find(".input-text").val(c.url),a(e).find(".input-text").attr("name","current_"+d.attr("name")),g?f.append(e):f.html(e)}}),e.find(':input[type="submit"]').removeAttr("disabled")}})})});
1
+ jQuery(function(a){a(".wp-job-manager-file-upload").each(function(){a(this).fileupload({dataType:"json",dropZone:a(this),url:job_manager_ajax_file_upload.ajax_url.toString().replace("%%endpoint%%","upload_file"),maxNumberOfFiles:1,formData:{script:!0},add:function(b,c){var d=a(this),e=d.closest("form"),f=d.parent().find(".job-manager-uploaded-files"),g=[],h=a(this).data("file_types");if(h){var i=new RegExp("(.|/)("+h+")$","i");c.originalFiles[0].name.length&&!i.test(c.originalFiles[0].name)&&g.push(job_manager_ajax_file_upload.i18n_invalid_file_type+" "+h)}g.length>0?window.alert(g.join("\n")):(e.find(':input[type="submit"]').attr("disabled","disabled"),c.context=a('<progress value="" max="100"></progress>').appendTo(f),c.submit())},progress:function(a,b){var c=parseInt(b.loaded/b.total*100,10);b.context.val(c)},fail:function(b,c){var d=a(this),e=d.closest("form");c.errorThrown&&window.alert(c.errorThrown),c.context.remove(),e.find(':input[type="submit"]').removeAttr("disabled")},done:function(b,c){var d=a(this),e=d.closest("form"),f=d.parent().find(".job-manager-uploaded-files"),g=d.attr("multiple")?1:0,h=["jpg","gif","png","jpeg","jpe"];c.context.remove(),a.each(c.result.files,function(b,c){if(c.error)window.alert(c.error);else{var e;a.inArray(c.extension,h)>=0?(e=a.parseHTML(job_manager_ajax_file_upload.js_field_html_img),a(e).find(".job-manager-uploaded-file-preview img").attr("src",c.url)):(e=a.parseHTML(job_manager_ajax_file_upload.js_field_html),a(e).find(".job-manager-uploaded-file-name code").text(c.name)),a(e).find(".input-text").val(c.url),a(e).find(".input-text").attr("name","current_"+d.attr("name")),g?f.append(e):f.html(e)}}),e.find(':input[type="submit"]').removeAttr("disabled")}})})});
assets/js/ajax-filters.js CHANGED
@@ -1,3 +1,4 @@
 
1
  jQuery( document ).ready( function ( $ ) {
2
 
3
  var xhr = [];
@@ -14,6 +15,7 @@ jQuery( document ).ready( function ( $ ) {
14
  var featured = target.data( 'featured' );
15
  var filled = target.data( 'filled' );
16
  var index = $( 'div.job_listings' ).index(this);
 
17
 
18
  if ( index < 0 ) {
19
  return;
@@ -28,7 +30,7 @@ jQuery( document ).ready( function ( $ ) {
28
  $( 'li.job_listing, li.no_job_listings_found', results ).css( 'visibility', 'hidden' );
29
 
30
  // Not appending. If page > 1, we should show a load previous button so the user can get to earlier-page listings if needed
31
- if ( page > 1 && true != target.data( 'show_pagination' ) ) {
32
  $( results ).before( '<a class="load_more_jobs load_previous" href="#"><strong>' + job_manager_ajax_filters.i18n_load_prev_listings + '</strong></a>' );
33
  } else {
34
  target.find( '.load_previous' ).remove();
@@ -37,7 +39,7 @@ jQuery( document ).ready( function ( $ ) {
37
  target.find( '.load_more_jobs' ).data( 'page', page );
38
  }
39
 
40
- if ( true == target.data( 'show_filters' ) ) {
41
 
42
  var filter_job_type = [];
43
 
@@ -45,11 +47,11 @@ jQuery( document ).ready( function ( $ ) {
45
  filter_job_type.push( $( this ).val() );
46
  } );
47
 
48
- var categories = form.find( ':input[name^="search_categories"]' ).map( function () {
49
- return $( this ).val();
50
  } ).get();
51
- var keywords = '';
52
- var location = '';
53
  var $keywords = form.find( ':input[name="search_keywords"]' );
54
  var $location = form.find( ':input[name="search_location"]' );
55
 
@@ -80,9 +82,9 @@ jQuery( document ).ready( function ( $ ) {
80
 
81
  } else {
82
 
83
- var categories = target.data( 'categories' );
84
- var keywords = target.data( 'keywords' );
85
- var location = target.data( 'location' );
86
 
87
  if ( categories ) {
88
  categories = categories.split( ',' );
@@ -106,7 +108,7 @@ jQuery( document ).ready( function ( $ ) {
106
 
107
  xhr[index] = $.ajax( {
108
  type: 'POST',
109
- url: job_manager_ajax_filters.ajax_url.toString().replace( "%%endpoint%%", "get_listings" ),
110
  data: data,
111
  success: function ( result ) {
112
  if ( result ) {
@@ -133,7 +135,7 @@ jQuery( document ).ready( function ( $ ) {
133
  }
134
  }
135
 
136
- if ( true == target.data( 'show_pagination' ) ) {
137
  target.find('.job-manager-pagination').remove();
138
 
139
  if ( result.pagination ) {
@@ -155,20 +157,20 @@ jQuery( document ).ready( function ( $ ) {
155
 
156
  } catch ( err ) {
157
  if ( window.console ) {
158
- console.log( err );
159
  }
160
  }
161
  }
162
  },
163
  error: function ( jqXHR, textStatus, error ) {
164
  if ( window.console && 'abort' !== textStatus ) {
165
- console.log( textStatus + ': ' + error );
166
  }
167
  },
168
  statusCode: {
169
  404: function() {
170
  if ( window.console ) {
171
- console.log( "Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve." );
172
  }
173
  }
174
  }
@@ -181,7 +183,7 @@ jQuery( document ).ready( function ( $ ) {
181
  job_manager_store_state( target, 1 );
182
  } )
183
 
184
- .on( "keyup", function(e) {
185
  if ( e.which === 13 ) {
186
  $( this ).trigger( 'change' );
187
  }
@@ -204,7 +206,7 @@ jQuery( document ).ready( function ( $ ) {
204
 
205
  $( document.body ).on( 'click', '.load_more_jobs', function() {
206
  var target = $( this ).closest( 'div.job_listings' );
207
- var page = parseInt( $( this ).data( 'page' ) || 1 );
208
  var loading_previous = false;
209
 
210
  $(this).addClass( 'loading' );
@@ -235,24 +237,23 @@ jQuery( document ).ready( function ( $ ) {
235
 
236
  target.triggerHandler( 'update_results', [ page, false ] );
237
 
238
- $( "body, html" ).animate({
239
- scrollTop: target.offset().top
240
- }, 600 );
241
 
242
  return false;
243
  } );
244
 
245
  if ( $.isFunction( $.fn.chosen ) ) {
246
- if ( job_manager_ajax_filters.is_rtl == 1 ) {
247
  $( 'select[name^="search_categories"]' ).addClass( 'chosen-rtl' );
248
  }
249
  $( 'select[name^="search_categories"]' ).chosen({ search_contains: true });
250
  }
251
 
 
252
  if ( window.history && window.history.pushState ) {
253
  $supports_html5_history = true;
254
- } else {
255
- $supports_html5_history = false;
256
  }
257
 
258
  var location = document.location.href.split('#')[0];
@@ -267,23 +268,23 @@ jQuery( document ).ready( function ( $ ) {
267
  }
268
 
269
  // Inital job and form population
270
- $(window).on( "load", function( event ) {
271
  $( '.job_filters' ).each( function() {
272
  var target = $( this ).closest( 'div.job_listings' );
273
  var form = target.find( '.job_filters' );
274
  var inital_page = 1;
275
  var index = $( 'div.job_listings' ).index( target );
276
 
277
- if ( window.history.state && window.location.hash ) {
278
- var state = window.history.state;
279
- if ( state.id && 'job_manager_state' === state.id && index == state.index ) {
280
  inital_page = state.page;
281
  form.deserialize( state.data );
282
  form.find( ':input[name^="search_categories"]' ).not(':input[type="hidden"]').trigger( 'chosen:updated' );
283
  }
284
- }
285
 
286
  target.triggerHandler( 'update_results', [ inital_page, false ] );
287
- });
288
  });
289
  } );
1
+ /* global job_manager_ajax_filters */
2
  jQuery( document ).ready( function ( $ ) {
3
 
4
  var xhr = [];
15
  var featured = target.data( 'featured' );
16
  var filled = target.data( 'filled' );
17
  var index = $( 'div.job_listings' ).index(this);
18
+ var categories, keywords, location;
19
 
20
  if ( index < 0 ) {
21
  return;
30
  $( 'li.job_listing, li.no_job_listings_found', results ).css( 'visibility', 'hidden' );
31
 
32
  // Not appending. If page > 1, we should show a load previous button so the user can get to earlier-page listings if needed
33
+ if ( page > 1 && true !== target.data( 'show_pagination' ) ) {
34
  $( results ).before( '<a class="load_more_jobs load_previous" href="#"><strong>' + job_manager_ajax_filters.i18n_load_prev_listings + '</strong></a>' );
35
  } else {
36
  target.find( '.load_previous' ).remove();
39
  target.find( '.load_more_jobs' ).data( 'page', page );
40
  }
41
 
42
+ if ( true === target.data( 'show_filters' ) ) {
43
 
44
  var filter_job_type = [];
45
 
47
  filter_job_type.push( $( this ).val() );
48
  } );
49
 
50
+ categories = form.find( ':input[name^="search_categories"]' ).map( function () {
51
+ return $( this ).val();
52
  } ).get();
53
+ keywords = '';
54
+ location = '';
55
  var $keywords = form.find( ':input[name="search_keywords"]' );
56
  var $location = form.find( ':input[name="search_location"]' );
57
 
82
 
83
  } else {
84
 
85
+ categories = target.data( 'categories' );
86
+ keywords = target.data( 'keywords' );
87
+ location = target.data( 'location' );
88
 
89
  if ( categories ) {
90
  categories = categories.split( ',' );
108
 
109
  xhr[index] = $.ajax( {
110
  type: 'POST',
111
+ url: job_manager_ajax_filters.ajax_url.toString().replace( '%%endpoint%%', 'get_listings' ),
112
  data: data,
113
  success: function ( result ) {
114
  if ( result ) {
135
  }
136
  }
137
 
138
+ if ( true === target.data( 'show_pagination' ) ) {
139
  target.find('.job-manager-pagination').remove();
140
 
141
  if ( result.pagination ) {
157
 
158
  } catch ( err ) {
159
  if ( window.console ) {
160
+ window.console.log( err );
161
  }
162
  }
163
  }
164
  },
165
  error: function ( jqXHR, textStatus, error ) {
166
  if ( window.console && 'abort' !== textStatus ) {
167
+ window.console.log( textStatus + ': ' + error );
168
  }
169
  },
170
  statusCode: {
171
  404: function() {
172
  if ( window.console ) {
173
+ window.console.log( 'Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.' );
174
  }
175
  }
176
  }
183
  job_manager_store_state( target, 1 );
184
  } )
185
 
186
+ .on( 'keyup', function(e) {
187
  if ( e.which === 13 ) {
188
  $( this ).trigger( 'change' );
189
  }
206
 
207
  $( document.body ).on( 'click', '.load_more_jobs', function() {
208
  var target = $( this ).closest( 'div.job_listings' );
209
+ var page = parseInt( ( $( this ).data( 'page' ) || 1 ), 10 );
210
  var loading_previous = false;
211
 
212
  $(this).addClass( 'loading' );
237
 
238
  target.triggerHandler( 'update_results', [ page, false ] );
239
 
240
+ $( 'body, html' ).animate({
241
+ scrollTop: target.offset().top
242
+ }, 600 );
243
 
244
  return false;
245
  } );
246
 
247
  if ( $.isFunction( $.fn.chosen ) ) {
248
+ if ( job_manager_ajax_filters.is_rtl === 1 ) {
249
  $( 'select[name^="search_categories"]' ).addClass( 'chosen-rtl' );
250
  }
251
  $( 'select[name^="search_categories"]' ).chosen({ search_contains: true });
252
  }
253
 
254
+ var $supports_html5_history = false;
255
  if ( window.history && window.history.pushState ) {
256
  $supports_html5_history = true;
 
 
257
  }
258
 
259
  var location = document.location.href.split('#')[0];
268
  }
269
 
270
  // Inital job and form population
271
+ $(window).on( 'load', function() {
272
  $( '.job_filters' ).each( function() {
273
  var target = $( this ).closest( 'div.job_listings' );
274
  var form = target.find( '.job_filters' );
275
  var inital_page = 1;
276
  var index = $( 'div.job_listings' ).index( target );
277
 
278
+ if ( window.history.state && window.location.hash ) {
279
+ var state = window.history.state;
280
+ if ( state.id && 'job_manager_state' === state.id && index === state.index ) {
281
  inital_page = state.page;
282
  form.deserialize( state.data );
283
  form.find( ':input[name^="search_categories"]' ).not(':input[type="hidden"]').trigger( 'chosen:updated' );
284
  }
285
+ }
286
 
287
  target.triggerHandler( 'update_results', [ inital_page, false ] );
288
+ });
289
  });
290
  } );
assets/js/ajax-filters.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){function b(b,c){if($supports_html5_history){var e=b.find(".job_filters"),f=a(e).serialize(),g=a("div.job_listings").index(b);window.history.replaceState({id:"job_manager_state",page:c,data:f,index:g},"",d+"#s=1")}}var c=[];a(".job_listings").on("update_results",function(b,d,e,f){var g="",h=a(this),i=h.find(".job_filters"),j=h.find(".showing_jobs"),k=h.find(".job_listings"),l=h.data("per_page"),m=h.data("orderby"),n=h.data("order"),o=h.data("featured"),p=h.data("filled"),q=a("div.job_listings").index(this);if(!(0>q)){if(c[q]&&c[q].abort(),e||(a(k).addClass("loading"),a("li.job_listing, li.no_job_listings_found",k).css("visibility","hidden"),d>1&&1!=h.data("show_pagination")?a(k).before('<a class="load_more_jobs load_previous" href="#"><strong>'+job_manager_ajax_filters.i18n_load_prev_listings+"</strong></a>"):h.find(".load_previous").remove(),h.find(".load_more_jobs").data("page",d)),1==h.data("show_filters")){var r=[];a(':input[name="filter_job_type[]"]:checked, :input[name="filter_job_type[]"][type="hidden"], :input[name="filter_job_type"]',i).each(function(){r.push(a(this).val())});var s=i.find(':input[name^="search_categories"]').map(function(){return a(this).val()}).get(),t="",u="",v=i.find(':input[name="search_keywords"]'),w=i.find(':input[name="search_location"]');v.val()!==v.attr("placeholder")&&(t=v.val()),w.val()!==w.attr("placeholder")&&(u=w.val()),g={lang:job_manager_ajax_filters.lang,search_keywords:t,search_location:u,search_categories:s,filter_job_type:r,per_page:l,orderby:m,order:n,page:d,featured:o,filled:p,show_pagination:h.data("show_pagination"),form_data:i.serialize()}}else{var s=h.data("categories"),t=h.data("keywords"),u=h.data("location");s&&(s=s.split(",")),g={lang:job_manager_ajax_filters.lang,search_categories:s,search_keywords:t,search_location:u,per_page:l,orderby:m,order:n,page:d,featured:o,filled:p,show_pagination:h.data("show_pagination")}}c[q]=a.ajax({type:"POST",url:job_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%","get_listings"),data:g,success:function(b){if(b)try{b.showing?a(j).show().html("<span>"+b.showing+"</span>"+b.showing_links):a(j).hide(),b.showing_all?a(j).addClass("wp-job-manager-showing-all"):a(j).removeClass("wp-job-manager-showing-all"),b.html&&(e&&f?a(k).prepend(b.html):e?a(k).append(b.html):a(k).html(b.html)),1==h.data("show_pagination")?(h.find(".job-manager-pagination").remove(),b.pagination&&h.append(b.pagination)):(!b.found_jobs||b.max_num_pages<=d?a(".load_more_jobs:not(.load_previous)",h).hide():f||a(".load_more_jobs",h).show(),a(".load_more_jobs",h).removeClass("loading"),a("li.job_listing",k).css("visibility","visible")),a(k).removeClass("loading"),h.triggerHandler("updated_results",b)}catch(c){window.console&&console.log(c)}},error:function(a,b,c){window.console&&"abort"!==b&&console.log(b+": "+c)},statusCode:{404:function(){window.console&&console.log("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")}}})}}),a("#search_keywords, #search_location, .job_types :input, #search_categories, .job-manager-filter").change(function(){var c=a(this).closest("div.job_listings");c.triggerHandler("update_results",[1,!1]),b(c,1)}).on("keyup",function(b){13===b.which&&a(this).trigger("change")}),a(".job_filters").on("click",".reset",function(){var c=a(this).closest("div.job_listings"),d=a(this).closest("form");return d.find(':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter').not(':input[type="hidden"]').val("").trigger("chosen:updated"),d.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val(0).trigger("chosen:updated"),a(':input[name="filter_job_type[]"]',d).not(':input[type="hidden"]').attr("checked","checked"),c.triggerHandler("reset"),c.triggerHandler("update_results",[1,!1]),b(c,1),!1}),a(document.body).on("click",".load_more_jobs",function(){var c=a(this).closest("div.job_listings"),d=parseInt(a(this).data("page")||1),e=!1;return a(this).addClass("loading"),a(this).is(".load_previous")?(d-=1,e=!0,1===d?a(this).remove():a(this).data("page",d)):(d+=1,a(this).data("page",d),b(c,d)),c.triggerHandler("update_results",[d,!0,e]),!1}),a("div.job_listings").on("click",".job-manager-pagination a",function(){var c=a(this).closest("div.job_listings"),d=a(this).data("page");return b(c,d),c.triggerHandler("update_results",[d,!1]),a("body, html").animate({scrollTop:c.offset().top},600),!1}),a.isFunction(a.fn.chosen)&&(1==job_manager_ajax_filters.is_rtl&&a('select[name^="search_categories"]').addClass("chosen-rtl"),a('select[name^="search_categories"]').chosen({search_contains:!0})),window.history&&window.history.pushState?$supports_html5_history=!0:$supports_html5_history=!1;var d=document.location.href.split("#")[0];a(window).on("load",function(b){a(".job_filters").each(function(){var b=a(this).closest("div.job_listings"),c=b.find(".job_filters"),d=1,e=a("div.job_listings").index(b);if(window.history.state&&window.location.hash){var f=window.history.state;f.id&&"job_manager_state"===f.id&&e==f.index&&(d=f.page,c.deserialize(f.data),c.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger("chosen:updated"))}b.triggerHandler("update_results",[d,!1])})})});
1
+ jQuery(document).ready(function(a){function b(b,c){if(d){var f=b.find(".job_filters"),g=a(f).serialize(),h=a("div.job_listings").index(b);window.history.replaceState({id:"job_manager_state",page:c,data:g,index:h},"",e+"#s=1")}}var c=[];a(".job_listings").on("update_results",function(b,d,e,f){var g,h,i,j="",k=a(this),l=k.find(".job_filters"),m=k.find(".showing_jobs"),n=k.find(".job_listings"),o=k.data("per_page"),p=k.data("orderby"),q=k.data("order"),r=k.data("featured"),s=k.data("filled"),t=a("div.job_listings").index(this);if(!(0>t)){if(c[t]&&c[t].abort(),e||(a(n).addClass("loading"),a("li.job_listing, li.no_job_listings_found",n).css("visibility","hidden"),d>1&&!0!==k.data("show_pagination")?a(n).before('<a class="load_more_jobs load_previous" href="#"><strong>'+job_manager_ajax_filters.i18n_load_prev_listings+"</strong></a>"):k.find(".load_previous").remove(),k.find(".load_more_jobs").data("page",d)),!0===k.data("show_filters")){var u=[];a(':input[name="filter_job_type[]"]:checked, :input[name="filter_job_type[]"][type="hidden"], :input[name="filter_job_type"]',l).each(function(){u.push(a(this).val())}),g=l.find(':input[name^="search_categories"]').map(function(){return a(this).val()}).get(),h="",i="";var v=l.find(':input[name="search_keywords"]'),w=l.find(':input[name="search_location"]');v.val()!==v.attr("placeholder")&&(h=v.val()),w.val()!==w.attr("placeholder")&&(i=w.val()),j={lang:job_manager_ajax_filters.lang,search_keywords:h,search_location:i,search_categories:g,filter_job_type:u,per_page:o,orderby:p,order:q,page:d,featured:r,filled:s,show_pagination:k.data("show_pagination"),form_data:l.serialize()}}else g=k.data("categories"),h=k.data("keywords"),i=k.data("location"),g&&(g=g.split(",")),j={lang:job_manager_ajax_filters.lang,search_categories:g,search_keywords:h,search_location:i,per_page:o,orderby:p,order:q,page:d,featured:r,filled:s,show_pagination:k.data("show_pagination")};c[t]=a.ajax({type:"POST",url:job_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%","get_listings"),data:j,success:function(b){if(b)try{b.showing?a(m).show().html("<span>"+b.showing+"</span>"+b.showing_links):a(m).hide(),b.showing_all?a(m).addClass("wp-job-manager-showing-all"):a(m).removeClass("wp-job-manager-showing-all"),b.html&&(e&&f?a(n).prepend(b.html):e?a(n).append(b.html):a(n).html(b.html)),!0===k.data("show_pagination")?(k.find(".job-manager-pagination").remove(),b.pagination&&k.append(b.pagination)):(!b.found_jobs||b.max_num_pages<=d?a(".load_more_jobs:not(.load_previous)",k).hide():f||a(".load_more_jobs",k).show(),a(".load_more_jobs",k).removeClass("loading"),a("li.job_listing",n).css("visibility","visible")),a(n).removeClass("loading"),k.triggerHandler("updated_results",b)}catch(c){window.console&&window.console.log(c)}},error:function(a,b,c){window.console&&"abort"!==b&&window.console.log(b+": "+c)},statusCode:{404:function(){window.console&&window.console.log("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")}}})}}),a("#search_keywords, #search_location, .job_types :input, #search_categories, .job-manager-filter").change(function(){var c=a(this).closest("div.job_listings");c.triggerHandler("update_results",[1,!1]),b(c,1)}).on("keyup",function(b){13===b.which&&a(this).trigger("change")}),a(".job_filters").on("click",".reset",function(){var c=a(this).closest("div.job_listings"),d=a(this).closest("form");return d.find(':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter').not(':input[type="hidden"]').val("").trigger("chosen:updated"),d.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val(0).trigger("chosen:updated"),a(':input[name="filter_job_type[]"]',d).not(':input[type="hidden"]').attr("checked","checked"),c.triggerHandler("reset"),c.triggerHandler("update_results",[1,!1]),b(c,1),!1}),a(document.body).on("click",".load_more_jobs",function(){var c=a(this).closest("div.job_listings"),d=parseInt(a(this).data("page")||1,10),e=!1;return a(this).addClass("loading"),a(this).is(".load_previous")?(d-=1,e=!0,1===d?a(this).remove():a(this).data("page",d)):(d+=1,a(this).data("page",d),b(c,d)),c.triggerHandler("update_results",[d,!0,e]),!1}),a("div.job_listings").on("click",".job-manager-pagination a",function(){var c=a(this).closest("div.job_listings"),d=a(this).data("page");return b(c,d),c.triggerHandler("update_results",[d,!1]),a("body, html").animate({scrollTop:c.offset().top},600),!1}),a.isFunction(a.fn.chosen)&&(1===job_manager_ajax_filters.is_rtl&&a('select[name^="search_categories"]').addClass("chosen-rtl"),a('select[name^="search_categories"]').chosen({search_contains:!0}));var d=!1;window.history&&window.history.pushState&&(d=!0);var e=document.location.href.split("#")[0];a(window).on("load",function(){a(".job_filters").each(function(){var b=a(this).closest("div.job_listings"),c=b.find(".job_filters"),d=1,e=a("div.job_listings").index(b);if(window.history.state&&window.location.hash){var f=window.history.state;f.id&&"job_manager_state"===f.id&&e===f.index&&(d=f.page,c.deserialize(f.data),c.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger("chosen:updated"))}b.triggerHandler("update_results",[d,!1])})})});
assets/js/job-application.js CHANGED
@@ -1,7 +1,7 @@
1
  jQuery(document).ready(function($) {
2
  // Slide toggle
3
- jQuery( '.application_details' ).hide();
4
- jQuery( '.application_button' ).click(function() {
5
- jQuery( '.application_details' ).slideToggle();
6
  });
7
  });
1
  jQuery(document).ready(function($) {
2
  // Slide toggle
3
+ $( '.application_details' ).hide();
4
+ $( '.application_button' ).click(function() {
5
+ $( '.application_details' ).slideToggle();
6
  });
7
  });
assets/js/job-application.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){jQuery(".application_details").hide(),jQuery(".application_button").click(function(){jQuery(".application_details").slideToggle()})});
1
+ jQuery(document).ready(function(a){a(".application_details").hide(),a(".application_button").click(function(){a(".application_details").slideToggle()})});
assets/js/job-dashboard.js CHANGED
@@ -1,7 +1,8 @@
 
1
  jQuery(document).ready(function($) {
2
 
3
  $('.job-dashboard-action-delete').click(function() {
4
- return confirm( job_manager_job_dashboard.i18n_confirm_delete );
5
  });
6
 
7
  });
1
+ /* global job_manager_job_dashboard */
2
  jQuery(document).ready(function($) {
3
 
4
  $('.job-dashboard-action-delete').click(function() {
5
+ return window.confirm( job_manager_job_dashboard.i18n_confirm_delete );
6
  });
7
 
8
  });
assets/js/job-dashboard.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){a(".job-dashboard-action-delete").click(function(){return confirm(job_manager_job_dashboard.i18n_confirm_delete)})});
1
+ jQuery(document).ready(function(a){a(".job-dashboard-action-delete").click(function(){return window.confirm(job_manager_job_dashboard.i18n_confirm_delete)})});
assets/js/job-submission.js CHANGED
@@ -1,6 +1,6 @@
1
  jQuery(document).ready(function($) {
2
- jQuery('body').on( 'click', '.job-manager-remove-uploaded-file', function() {
3
- jQuery(this).closest( '.job-manager-uploaded-file' ).remove();
4
  return false;
5
  });
6
  });
1
  jQuery(document).ready(function($) {
2
+ $('body').on( 'click', '.job-manager-remove-uploaded-file', function() {
3
+ $(this).closest( '.job-manager-uploaded-file' ).remove();
4
  return false;
5
  });
6
  });
assets/js/job-submission.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){jQuery("body").on("click",".job-manager-remove-uploaded-file",function(){return jQuery(this).closest(".job-manager-uploaded-file").remove(),!1})});
1
+ jQuery(document).ready(function(a){a("body").on("click",".job-manager-remove-uploaded-file",function(){return a(this).closest(".job-manager-uploaded-file").remove(),!1})});
assets/js/multiselect.js CHANGED
@@ -1,3 +1,4 @@
 
1
  jQuery(function(){
2
  jQuery( '.job-manager-multiselect' ).chosen( job_manager_chosen_multiselect_args );
3
  });
1
+ /* global job_manager_chosen_multiselect_args */
2
  jQuery(function(){
3
  jQuery( '.job-manager-multiselect' ).chosen( job_manager_chosen_multiselect_args );
4
  });
assets/js/term-multiselect.js CHANGED
@@ -1,3 +1,4 @@
 
1
  jQuery(function(){
2
  jQuery( '.job-manager-category-dropdown' ).chosen( job_manager_chosen_multiselect_args );
3
  });
1
+ /* global job_manager_chosen_multiselect_args */
2
  jQuery(function(){
3
  jQuery( '.job-manager-category-dropdown' ).chosen( job_manager_chosen_multiselect_args );
4
  });
changelog.txt ADDED
@@ -0,0 +1,531 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ = 1.25.1 =
2
+ * Feature - Adds a view button to the Admin UI for easy access to submitted files or URLs. Props tripflex (https://github.com/Automattic/WP-Job-Manager/pull/650)
3
+ * Fix - Add hardening to file uploads to prevent accepting unexpected file times. Previously, other WP-allowed types were sometimes accepted.
4
+ * Fix - Job post form categories are now properly cached and displayed per language when using WPML or Polylang. (https://github.com/Automattic/WP-Job-Manager/issues/692)
5
+ * Fix - Refactored WPML workaround, which was causing no job listings on non-default languages. (https://github.com/Automattic/WP-Job-Manager/issues/617)
6
+ * Fix - Allow employers to edit job listings when a listing is pending payment. (https://github.com/Automattic/WP-Job-Manager/pull/664)
7
+ * Fix - No longer display Job Taxonomies in the WordPress tag cloud. (https://github.com/Automattic/WP-Job-Manager/pull/658)
8
+ * Fix - Migrate away from jQuery.live, which is no longer supported. ( https://github.com/Automattic/WP-Job-Manager/pull/664 )
9
+ * Tweak - Updated incorrect settings description. (https://github.com/Automattic/WP-Job-Manager/pull/632)
10
+ * Dev - Adds hook to add items in a job's RSS feed item. (https://github.com/Automattic/WP-Job-Manager/pull/636)
11
+ * Dev - Adds filter to disable Job Listings cache (https://github.com/Automattic/WP-Job-Manager/pull/684)
12
+ * Dev - Inline docs and coding standards improvements.
13
+
14
+ = 1.25.0 =
15
+ * Feature - Ability to duplicate listings from job dashboard.
16
+ * Fix - Support WP_EMBED in job descriptions.
17
+ * Fix - Ensure logo is displayed on edit, before submission.
18
+ * Fix - Attachment URLs on multisite.
19
+ * Fix - Refactored WPML workaround, which was causing no job listings on non-default languages. (https://github.com/Automattic/WP-Job-Manager/issues/617)
20
+ * Fix - No need to decode URLs anymore https://core.trac.wordpress.org/ticket/23605.
21
+ * Dev - submit_job_form_end/submit_job_form_start actions.
22
+ * Dev - job-manager-datepicker class for backend date fields.
23
+
24
+ = 1.24.0 =
25
+ * Feature - Use featured images to store company logos.
26
+ * Feature - Search term names for keywords.
27
+ * Feature - Search custom fields in backend job listing search.
28
+ * Tweak - Allow job expiry field to be localised.
29
+ * Fix - The above change avoids creation of duplicate images in media library.
30
+ * Dev - Added methods to WP_Job_Manager_Form; get_steps, get_step_key, set_step.
31
+ * Dev - Made WP_Job_Manager_Form call the next 'handler' if no view is defined for the next step.
32
+ * Dev - Added template to control job preview form.
33
+
34
+ = 1.23.13 =
35
+ * Fix - Conflict between the_job_location() and the regions plugin.
36
+ * Tweak - Allow some HTML in the_job_location - uses wp_kses_post.
37
+
38
+ = 1.23.12 =
39
+ * Fix - Transient clear query.
40
+ * Tweak - New user notification pluggable function.
41
+ * Tweak - Use subquery in keyword search to avoid long queries.
42
+ * Tweak - Only search for keywords of 2 or more characters.
43
+ * Tweak - job_manager_get_listings_keyword_length_threshold filter.
44
+ * Tweak - PolyLang compatibility functions.
45
+ * Tweak - Unattach company logo when a new attachment is uploaded.
46
+
47
+ = 1.23.11 =
48
+ * Fix - Author check in job_manager_user_can_edit_job().
49
+ * Tweak - Before deleting a job, delete its attachments.
50
+ * Tweak - Show previews in backend if needed.
51
+
52
+ = 1.23.10 =
53
+ * Fix - Handle WP 4.3 signup notification.
54
+ * Fix - Map mime types to those that WordPress knows.
55
+ * Fix - Alert text color.
56
+ * Fix - Searches containing special chars.
57
+ * Tweak - Improved uploader error handling and updated library.
58
+ * Tweak - Improve job_manager_user_can_post_job and job_manager_user_can_edit_job capability handling in job-submit.php
59
+ * Tweak - Clear transients in batches of 500.
60
+ * Tweak - Removed transifex and translations - translation will take place on https://translate.wordpress.org/projects/wp-plugins/wp-job-manager
61
+
62
+ = 1.23.9 =
63
+ * Fixed editing content with wp_editor. Can no longer be passed to function already escaped.
64
+
65
+ = 1.23.8 =
66
+ * Fix - Security: XSS issue in account signin.
67
+ * Tweak - Update new account email text.
68
+
69
+ = 1.23.7 =
70
+ * Fix - 4.3 issue showing "Description is a required field" due to editor field.
71
+ * Tweak - Default job_manager_delete_expired_jobs to false. Set to true to have expired jobs deleted automatically. More sensible default.
72
+ * Tweak - job_manager_term_select_field_wp_dropdown_categories_args filter.
73
+ * Tweak - Ajax WPML handling.
74
+
75
+ = 1.23.6 =
76
+ * Fix - job_manager_ajax_filters -> job_manager_ajax_file_upload in file upload script.
77
+
78
+ = 1.23.5 =
79
+ * Feature - Allow [job_summary] to output multiple listings via 'limit' parameter.
80
+ * Feature - Added flowplayer support.
81
+ * Fix - Special chars in feeds.
82
+ * Fix - Permalinks with index.php inside.
83
+ * Fix - Notice when saving job form.
84
+ * Fix - PHP4 widget constructors (https://gist.github.com/chriscct7/d7d077afb01011b1839d).
85
+ * Tweak - Allow translation of job_manager_dropdown_categories.
86
+ * Tweak - Added handling for .job-manager-filter class.
87
+ * Tweak - Added trailing slashes to ajax endpoints.
88
+ * Tweak - Made videos responsive.
89
+ * Tweak - job_manager_attach_uploaded_files filter.
90
+
91
+ = 1.23.4 =
92
+ * Tweak - In 1.21.0 we switched to GET ajax requests to leverage caching, however, due to the length of some queries this was causing 414 request URI too long errors in many environments. Reverted to POST to avoid this.
93
+ * Tweak - flush_rewrite_rules after updates to ensure ajax endpoint exists.
94
+ * Tweak - Use relative path for ajax endpoint to work around https/http.
95
+
96
+ = 1.23.3 =
97
+ * Fix - WPML integration with lang.
98
+ * Tweak - Improved plugin activation code.
99
+ * Tweak - Improved theme switch code.
100
+ * Tweak - Search the entire meta field, not just from the start.
101
+ * Tweak - Added some debugging code to ajax-filters to display in console.
102
+
103
+ = 1.23.2 =
104
+ * Fix - Send entire form data (listify workaround).
105
+ * Fix - Set is_home false on ajax endpoint (listify workaround).
106
+
107
+ = 1.23.1 =
108
+ * Fix - Orderby featured should be "menu order, date", not "manu order, title".
109
+ * Tweak - Remove duplicate data from form_data in filters JS.
110
+ * Tweak - If index is -1 in filters JS, abort.
111
+
112
+ = 1.23.0 =
113
+ * Feature - Custom AJAX endpoints to reduce overhead of loading admin.
114
+ * Feature - Support radio fields.
115
+ * Fix - Video max width.
116
+ * Tweak - Admin remove overflow hidden from data box.
117
+ * Tweak - Update notice styling.
118
+ * Tweak - Improve orderby. https://make.wordpress.org/core/2014/08/29/a-more-powerful-order-by-in-wordpress-4-0/
119
+ * Tweak - nofollow apply links.
120
+ * Tweak - Rename 'title' to 'job title' for clarity.
121
+ * Tweak - submit_job_form_prefix_post_name_with_company filter.
122
+ * Tweak - submit_job_form_prefix_post_name_with_location filter.
123
+ * Tweak - submit_job_form_prefix_post_name_with_job_type filter.
124
+ * Tweak - Improved job_feed searching.
125
+ * Tweak - Improved transient cleaning.
126
+
127
+ = 1.22.3 =
128
+ * Fix frontend listing edits.
129
+
130
+ = 1.22.2 =
131
+ * Tweak - Set form actions to current page.
132
+ * Fix - Video embeds.
133
+ * Fix - Load textdomain before post types are registered.
134
+
135
+ = 1.22.1 =
136
+ * Fix - It's 2015, but some people are still running PHP 5.2. Compatibility fix.
137
+
138
+ = 1.22.0 =
139
+ * Tweak - Refactored form classes to be instance based rather than static. Reduction in code base.
140
+ * Tweak - Admin styling of the job data panels.
141
+ * Tweak - Admin styling of the status column.
142
+ * Tweak - Better handling of the expiry field.
143
+ * Tweak - Search _geolocation_state_long.
144
+ * Tweak - Allow admin fields to have custom 'name'.
145
+ * Tweak - Use wp_video_shortcode instead of oembed directly.
146
+ * Tweak - Tweak menu order code for featured jobs - use -1 for featured and leave other jobs alone.
147
+ * Tweak - Clear expired date when publishing an expired listing.
148
+ * Tweak - clear_expired_transients function.
149
+ * Fix - Prevent term-checklist being disabled for guests.
150
+ * Fix - Add WPML var to transient name.
151
+ * Fix - Remove use of create_function.
152
+
153
+ = 1.21.4 =
154
+ * Fix - get_job_listings_keyword_search keyword search.
155
+ * Fix - Clear term cache when terms are set for any object.
156
+ * Fix - Legacy uploads.
157
+ * Tweak - RTL improvements.
158
+ * Tweak - Use RLIKE to search keywords in content.
159
+ * Tweak - Show relative pagination.
160
+ * Updated translations.
161
+ * Arabic translation by Mamdouh Samy.
162
+
163
+ = 1.21.3 =
164
+ * Feature - Support posts_per_page in feed.
165
+ * Fix - Correctly set menu_order when creating a new job, or updating featured status.
166
+ * Fix - Updater when there are no featured jobs.
167
+ * Fix - Add geolocation_street_number to clear_location_data.
168
+
169
+ = 1.21.2 =
170
+ * Fix - Remove requried attribute from file input.
171
+
172
+ = 1.21.1 =
173
+ * Fix - Remove file type check when field is not required and empty.
174
+ * Fix - Hide "Applications have closed" for previews.
175
+
176
+ = 1.21.0 =
177
+ * Feature - Ajax loading history - back button will take you back to current position in the search. If you are on > page 1, a 'load previous' button will be shown so you can paginate either way.
178
+ * Feature - Ajax file upload during job submission.
179
+ * Feature - Cookie set when submitting a job to allow resuming if you leave the page.
180
+ * Feature - job_apply shortcode to show application area in other places on your site.
181
+ * Feature - Allow admin fields to be priority sorted.
182
+ * Feature - Featured job widget.
183
+ * Feature - Scroll to top on pagination click.
184
+ * Feature - Option to "Hide content within expired listings". If disabled, expired listings will be listed normally with applications disabled.
185
+ * Fix - Prevent attachments being uploaded several times.
186
+ * Fix - Expiry date on first save.
187
+ * Fix - Relist should go back to form.
188
+ * Fix - jquery.com CDN for CSS.
189
+ * Tweak - Geocode street and street number separately.
190
+ * Tweak - File upload field markup.
191
+ * Tweak - Added filters around taxonomy definition.
192
+ * Tweak - Chanced search logic/query to use the new meta queries in 4.1.
193
+ * Tweak - Implement transient caching for searches.
194
+ * Tweak - Removed wp_dropdown_user due to performance concerns.
195
+ * Tweak - Use menu_order to make featured listings sticky. Improves performance.
196
+ * Tweak - Retrieve AJAX jobs with GET rather than POST request to take advantage of more caching. Plugins looking for POST data will need to update to look for GET/REQUEST instead.
197
+ * Tweak - Prevent themes that (sigh) mess with content hooks from breaking inputs.
198
+ * Tweak - Remove unused job-category field.
199
+ * Tweak - Hide company div if company name missing.
200
+
201
+ = 1.20.1 =
202
+ * Fix - Core template overrides.
203
+ * Updated localisations.
204
+
205
+ = 1.20.0 =
206
+ * Feature - Sortable location column in admin.
207
+ * Feature - Automatically Generate Username from Email Address option (disable to show a username field).
208
+ * Feature - 'filled' option for job shortcode to show all filled/non filled jobs.
209
+ * Fix - Pagination with default permalinks.
210
+ * Fix - Correctly generate geolocation data when adding a post manually.
211
+ * Fix - Chosen width when resizing the page.
212
+ * Fix - Show no jobs when all types de-selected.
213
+ * Tweak - content-widget-no-jobs-found.php template file.
214
+ * Tweak - Don't limit keyword search query functions to published jobs.
215
+ * Tweak - job_manager_output_jobs_no_results action.
216
+ * Tweak - No results template hooked into job_manager_output_jobs_no_results.
217
+ * Tweak - Changed content-no-jobs-found.php content to work for ajax and static lists of jobs. Tweaked text.
218
+ * Tweak - job_manager_default_company_logo filter for changing default company image.
219
+ * Tweak - Enhance multiselect field with chosen.
220
+ * Dev - Abiltiy to pass shortcode args to submit_job_form shortcode.
221
+ * Dev - Made get_job_manager_template_part() use locate_job_manager_template().
222
+ * Dev - Changed how username/email/role are passed to wp_job_manager_create_account (backwards compat).
223
+
224
+ = 1.19.0 =
225
+ * Feature - Added html5 required attribute to required fields.
226
+ * Feature - Added compatibility with RP4WP.
227
+ * Fix - Chosen RTL.
228
+ * Fix - Addded additonal check to check edit capabilities.
229
+ * Fix - Add correct step input to submission form.
230
+ * Tweak - Add CSS class to 'showing' bar when shoing all results (no filters).
231
+ * Tweak - Geocode, use sublocality_level_1 as city.
232
+ * Tweak - Don't update slug when editing via the frontend.
233
+ * Tweak - Set default meta data for new jobs.
234
+ * Tweak - Add geolocation data after import with WP ALL Import.
235
+ * Tweak - Filter to disable chosen: job_manager_chosen_enabled
236
+ * Tweak - Login link on job dashboard. job-dashboard-login.php template file.
237
+ * Tweak - Made backend management honour capabilities of users. Props to minderdl.
238
+
239
+ = 1.18.0 =
240
+ * Fix - Keep post name when pending job is posted by non-admin.
241
+ * Fix - Prevent special chars breaking the feeds.
242
+ * Tweak - Added new capabilities for all aspects of Job Listing Management. e.g. edit_job_listings, add_job_listing etc etc. Admin role will be updated on activation/upgrade. If you use custom roles, you'll need to edit them to grant access to the parts you wish.
243
+ * Tweak - Improved uninstaller.
244
+ * Tweak - Clear location data should include geolocation_postcode.
245
+ * Tweak - Always show 'showing' bar, but conditonally show 'reset' link.
246
+ * Tweak - Trigger geolocation whenever location field is saved, even by 3rd parties.
247
+
248
+ = 1.17.0 =
249
+ * Feature - job_manager_user_can_edit_pending_submissions function and setting.
250
+ * Feature - Job summary shortcode - support random display of job (featured or non featured).
251
+ * Feature - In admin, when clicking an author name show all jobs for that author.
252
+ * Tweak - Added sanitization function to form class to handle strings and arrays.
253
+
254
+ = 1.16.1 =
255
+ * Fix - Use triggerHandler() instead of trigger() in ajax-filters to prevent events bubbling up.
256
+ * Fix - Append current 'lang' to AJAX calls for WPML.
257
+ * Fix - When specifying categories on the jobs shortcode, don't clear those categories on reset.
258
+ * Tweak - Added job_manager_admin_screen_ids filter.
259
+
260
+ = 1.16.0 =
261
+ * Added setup wizard for new installs that creates pages/shortcodes automatically.
262
+ * Added job_manager_get_permalink function.
263
+ * Fix - Only show website link when actually set.
264
+ * Fix - Only validate application when field is set.
265
+ * Tweak - Added description to all fields.
266
+ * Tweak - Added better setting fields for defining which pages contain the shortcodes.
267
+ * Tweak - Nofollow website links.
268
+ * Tweak - Removed font-sizes from default CSS and fixed display in default WP themes.
269
+
270
+ = 1.15.0 =
271
+ * Added location/keyword option to recent jobs widget.
272
+ * Added job-listings-start and job-listings-end.php templates for customisation the wrapping elements.
273
+ * Added filter type option for job categories. Can be set to require matching to any or all selected categories.
274
+ * Added checkbox field type for forms.
275
+ * Made backend application email field default to logged in user.
276
+ * Fix - job_manager_get_resized_image to not error when it cannot read the image file.
277
+ * Fix - Make admin_url relative.
278
+ * Fix - Chosen CSS cutting off the placeholder in Firefox.
279
+ * Fix - Added _company_video in backend.
280
+
281
+ = 1.14.0 =
282
+ * Extra filters for the filters template.
283
+ * Changed text strings for easier customisations based on post type labels, and made some strings more generic.
284
+ * New field types - term-checklist, term-multiselect, term-select. These save terms only.
285
+ * Added chosen javascript to enhance multiselect boxes when needed.
286
+ * Multiple category support.
287
+ * Attach Images on Upload to the job posts.
288
+ * Added an option to show a multiselect for categories on the job filters.
289
+ * Enabled chosen() for the job category filter.
290
+ * Added content-single-job_listing-company.php and content-single-job_listing-meta.php templates. These are hooked in.
291
+ * Added optional company video field to submission form.
292
+ * Video appended to company information box.
293
+ * the_company_video() and get_the_company_video() functions.
294
+ * show_more="false" for jobs shortcode to prevent loading more jobs.
295
+ * job_manager_delete_expired_jobs filter (__return_false to disable expired job deletion).
296
+ * job_manager_delete_expired_jobs_days filter (set number of days before deletion - default is 30).
297
+ * Support HTML5 multiple attribute for file upload field. Pass multiple=>'true' to form field definition to enable.
298
+ * Later loading for template functions.
299
+
300
+ = 1.13.0 =
301
+ * Shortcode arg to show numbered pagination instead of 'load more jobs'. show_pagination argument.
302
+ * Define support for Jetpack publicize.
303
+ * Show company name alt text for company logo.
304
+ * Sort jobs by title, date, expirey date.
305
+ * Added noscript element for jobs shortcode.
306
+ * filter_var to validate URLs on the job submission form.
307
+
308
+ = 1.12.1 =
309
+ * Job submission form categories must not hide empty categories.
310
+
311
+ = 1.12.0 =
312
+ * On the job submission form, display hierarchical categories.
313
+ * Use job_manager_ prefixed hooks for registration (register_post/registration_errors/register_form) to prevent issues with Captcha plugins.
314
+ * Pass $post to job_manager_application_email_subject
315
+ * Additonal hooks in job-filters template, and moved out job types output to separate template file.
316
+ * Option to set the job dashboard page slug so plugins know where to look.
317
+ * Allow you@yourdomain.com to be translated.
318
+ * Make taxonomies hidden unless current_theme_supports( 'job-manager-templates' )
319
+ * Adjusted job application area styling and added some additonal filters.
320
+ * Improve backend order status selection.
321
+ * Added some responsive styles for job lists.
322
+ * Allow users to relist a job from the frontend. (Ensure WC Paid Listings and Simple Paid Listings are updated to support this).
323
+
324
+ = 1.11.1 =
325
+ * Fix ajax filters 'true' for show_filters
326
+ * Fix geocoding for certain address strings
327
+ * Fix keywords typo
328
+ * Remove deprecated $wpdb->escape calls. Replaced with esc_sql
329
+
330
+ = 1.11.0 =
331
+ * Switch geocode to json and improve error checking.
332
+ * If query limit is reached, stop making requests for a while.
333
+ * Added extra data inside job_feed.
334
+ * Few extra icons in font.
335
+ * Additonal hooks in single template.
336
+ * Pick up search_category from querystring to set default/selected category.
337
+ * Ability to define selected_job_types for the jobs shortcode which will set the default job type filters.
338
+ * Took out show_featured_only arg for the [jobs] shortcode and added 'featured' which can be set to true or false to show or hide featured jobs, or left null to show both.
339
+ * Removed nonce from frontend job submission form to prevent issues with caching.
340
+
341
+ = 1.10.0 =
342
+ * Trigger change on 'enter' when filtering jobs.
343
+ * Updated add-ons page to pull from wpjobmanager.com.
344
+ * Updated links.
345
+ * Fixed support for custom upload URLs.
346
+ * Choose/limit application method to email, url or either.
347
+ * Default application value (if logged in) set to user's email address.
348
+ * show_featured_only option for [jobs] shortcode.
349
+ * Add required-field class around required inputs.
350
+ * Enable paste as text in wp-editor field.
351
+
352
+ = 1.9.3 =
353
+ * Fix email URLs.
354
+ * Target blank for application URLs.
355
+ * Add posted by (author) setting in backend.
356
+ * When saving jobs, ensure _featured and _filled are set.
357
+ * Load admin scripts conditionally.
358
+
359
+ = 1.9.2 =
360
+ * Fix missing parameter in application_details_url causing URLs to be missing when applying.
361
+
362
+ = 1.9.1 =
363
+ * Removed resource heavy 'default_meta' function from the installation process.
364
+
365
+ = 1.9.0 =
366
+ * Template - Split off URL and email application methods and added new hooks. This allows other plugins to manipulate the content.
367
+ * Pass $values to edit job save function so permalinks are preserved.
368
+ * When showing filters, ensure we check by slug if category is non-numeric.
369
+ * Give listings ul a min height so that loading image is visible.
370
+ * content-no-jobs-found.php template.
371
+ * Fix apostrophe direction in signin template.
372
+ * Bulk expire jobs.
373
+ * submit_job_form_required_label hook.
374
+ * ability to set default state for selects on submit form.
375
+ * allow passed in classes in get_job_listing_class function.
376
+ * Hook in the content only if in_the_loop(). Fixes issues with jobify and yoast SEO.
377
+ * Removed .clear mixin to prevent theme conflicts.
378
+
379
+ = 1.8.2 =
380
+ * For initial load, target all .job_filters areas. Jobify compat.
381
+
382
+ = 1.8.1 =
383
+ * Fix - Corrected check to see if any category terms with jobs exist
384
+
385
+ = 1.8.0 =
386
+ * Feature - Take search/location vars from the querystring if set
387
+ * Feature - Option to choose role for registration, and added an 'employer' role.
388
+ * Feature - Support for comma separated keywords when searching
389
+ * Fix - Use add_post_meta when editing a job to maintain featured status
390
+ * Fix - category ordering
391
+ * Fix - searching for keyword + location at the same time
392
+ * Fix - Only show categories select box when they exist
393
+ * Dev - job_manager_application_email_subject filter
394
+
395
+ = 1.7.3 =
396
+ * Some changes to file uploads to support custom mime types
397
+ * Updated icon file (http://fontello.com/)
398
+ * Fix category rss links
399
+ * When doing a location search, search geolocation data
400
+ * Fix notices when removing all company fields
401
+ * Made jslint happy with ajax-filters.js
402
+ * Use get_option( 'default_role' ) when creating a user
403
+ * Grunt for release
404
+
405
+ = 1.7.2 =
406
+ * Preserve line breaks when saving textarea fields in admin
407
+ * Hide 'showing all x' when no filters are chosen.
408
+ * Register 'preview' status so that the counts are correct.
409
+ * Delete previews via cron job.
410
+
411
+ = 1.7.1 =
412
+ * Updated textdomain to wp-job-manager
413
+ * Re-done .pot file
414
+ * Additonal filters for ajax responses
415
+ * Moved localisations to Transifex https://www.transifex.com/projects/p/wp-job-manager/
416
+
417
+ = 1.7.0 =
418
+ * Added geolocation to save location data to meta after posting or saving a job. This will be used by other plugins.
419
+ * Filter job_manager_geolocation_enabled and return false to turn off geolocation features.
420
+ * Jobs shortcode can now be passed 'location' and 'keywords' to set the default for filters, or show only jobs with those keywords if filters are disabled
421
+ * Html fix in widget
422
+ * Add border around wp editor
423
+ * Fix company logo in firefox
424
+ * submit_job_form_wp_editor_args filter
425
+ * "Empty" categories are visible when filtering jobs in admin.
426
+
427
+ = 1.6.0 =
428
+ * MP6/WP 3.8 optimised styling. Min version 3.8 for new styling.
429
+ * Removed images previously used in admin.
430
+ * Tweak the_company_logo() to check if logo is valid URL.
431
+ * Replaced Genericons with custom set
432
+ * Only show link to view job on dashboard when published
433
+
434
+ = 1.5.2 =
435
+ * Fix wp-editor field
436
+ * Fix editing job images
437
+
438
+ = 1.5.1 =
439
+ * Changed get_the_time to get_post_time
440
+ * Added textarea and wp-editor to form api
441
+ * When using the job submit form, generate a more unqiue slug for the job - company-location-type-job-title
442
+ * Ability to remove image from job submission form
443
+ * Update icon font
444
+ * Fix job_types filters
445
+ * Field_select in admin
446
+ * Fix access control on job editing
447
+ * Job forms multiselect support
448
+
449
+ = 1.5.0 =
450
+ * Ability to edit job expiration date manually via admin
451
+ * Settings API: Password field
452
+ * Frontend Forms: Password field
453
+ * Correctly turn off expiration when 'days' is not set
454
+ * Greek should be el_GR
455
+ * Settings: Use key for tabs - fixes issues with locales
456
+ * Show pending count in admin menu
457
+ * Added job_types argument to jobs shortcode to show jobs of a certain type only
458
+ * Hierarchical dropdown for categories on filter form
459
+ * job_manager_job_submitted hook in submission form
460
+
461
+ = 1.4.0 =
462
+ * Added pagination to the job dashboard to avoid memory issues
463
+ * Schema.org markup for job listings
464
+ * Greek translation by Ioannis Arsenis
465
+
466
+ = 1.3.1 =
467
+ * Remove line breaks from markup to prevent theme issues
468
+
469
+ = 1.3.0 =
470
+ * When using the [jobs] shortcode without filters, if jobs > per-page show the 'load more' link
471
+ * Clearfix for meta div
472
+ * Hooked up $size option for company logos
473
+ * submit_job_form_save_job_data filter
474
+ * Italian translation
475
+ * Brazillian Portuguese translation
476
+ * Respect other plugin columns in admin
477
+ * Re-arranged admin columns to show less non-useful data
478
+
479
+ = 1.2.0 =
480
+ * Support for featured job listings
481
+ * Support for meta job duration
482
+ * set_expirey when publishing jobs from admin manually
483
+ * Update handler
484
+
485
+ = 1.1.3 =
486
+ * Corrected form field label
487
+ * Added french translation by Remi Corson
488
+
489
+ = 1.1.2 =
490
+ * job_manager_get_dashboard_jobs_args filter
491
+ * Better handling of submit job steps.
492
+ * Option to store the slug of the submit job page - used by addons.
493
+ * Use :input in JS to support multiple input types if customised.
494
+
495
+ = 1.1.1 =
496
+ * Improved accuracy of job search
497
+ * Fixed category filter dropdown in admin
498
+
499
+ = 1.1.0 =
500
+ * Tweaked css clearfixes
501
+ * Use built in antispambot for encoding email.
502
+ * job_manager_job_filters_showing_jobs_links filter
503
+ * IE8 Apply filters JS fix
504
+ * Fix spanish locale
505
+ * Fixed strict standards errors
506
+ * Improve 2013 Styles
507
+ * Addons page. Disabled usings add_filter( 'job_manager_show_addons_page', '__return_false' );
508
+
509
+ = 1.0.5 =
510
+ * Added function to get listings by certain criteria.
511
+ * Added ES translation.
512
+ * Fix job feed when no args are present.
513
+
514
+ = 1.0.4 =
515
+ * More hooks in the submit process.
516
+ * Hide apply button if url/email is unset.
517
+
518
+ = 1.0.3 =
519
+ * Some extra hooks in job-filters.php
520
+ * Added a workaround for scripts which bork placeholders inside the job filters.
521
+
522
+ = 1.0.2 =
523
+ * Action in update_job_data() to allow saving of extra fields.
524
+ * Added German translation by Chris Penning
525
+
526
+ = 1.0.1 =
527
+ * Slight tweak to listing field filters in admin.
528
+ * 'attributes' argument for admin settings.
529
+
530
+ = 1.0.0 =
531
+ * First stable release.
includes/abstracts/abstract-wp-job-manager-form.php CHANGED
@@ -7,12 +7,53 @@
7
  */
8
  abstract class WP_Job_Manager_Form {
9
 
10
- protected $fields = array();
11
- protected $action = '';
12
- protected $errors = array();
13
- protected $steps = array();
14
- protected $step = 0;
15
- public $form_name = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  /**
18
  * Cloning is forbidden.
@@ -326,14 +367,17 @@ abstract class WP_Job_Manager_Form {
326
  if ( ! empty( $field['allowed_mime_types'] ) ) {
327
  $allowed_mime_types = $field['allowed_mime_types'];
328
  } else {
329
- $allowed_mime_types = get_allowed_mime_types();
330
  }
331
 
332
  $file_urls = array();
333
  $files_to_upload = job_manager_prepare_uploaded_files( $_FILES[ $field_key ] );
334
 
335
  foreach ( $files_to_upload as $file_to_upload ) {
336
- $uploaded_file = job_manager_upload_file( $file_to_upload, array( 'file_key' => $field_key ) );
 
 
 
337
 
338
  if ( is_wp_error( $uploaded_file ) ) {
339
  throw new Exception( $uploaded_file->get_error_message() );
7
  */
8
  abstract class WP_Job_Manager_Form {
9
 
10
+ /**
11
+ * Form fields
12
+ *
13
+ * @access protected
14
+ * @var array
15
+ */
16
+ protected $fields = array();
17
+
18
+ /**
19
+ * Form action
20
+ *
21
+ * @access protected
22
+ * @var string
23
+ */
24
+ protected $action = '';
25
+
26
+ /**
27
+ * Form errors
28
+ *
29
+ * @access protected
30
+ * @var array
31
+ */
32
+ protected $errors = array();
33
+
34
+ /**
35
+ * Form steps
36
+ *
37
+ * @access protected
38
+ * @var array
39
+ */
40
+ protected $steps = array();
41
+
42
+ /**
43
+ * Form step
44
+ *
45
+ * @access protected
46
+ * @var int
47
+ */
48
+ protected $step = 0;
49
+
50
+ /**
51
+ * Form fields
52
+ *
53
+ * @access protected
54
+ * @var string
55
+ */
56
+ public $form_name = '';
57
 
58
  /**
59
  * Cloning is forbidden.
367
  if ( ! empty( $field['allowed_mime_types'] ) ) {
368
  $allowed_mime_types = $field['allowed_mime_types'];
369
  } else {
370
+ $allowed_mime_types = job_manager_get_allowed_mime_types();
371
  }
372
 
373
  $file_urls = array();
374
  $files_to_upload = job_manager_prepare_uploaded_files( $_FILES[ $field_key ] );
375
 
376
  foreach ( $files_to_upload as $file_to_upload ) {
377
+ $uploaded_file = job_manager_upload_file( $file_to_upload, array(
378
+ 'file_key' => $field_key,
379
+ 'allowed_mime_types' => $allowed_mime_types,
380
+ ) );
381
 
382
  if ( is_wp_error( $uploaded_file ) ) {
383
  throw new Exception( $uploaded_file->get_error_message() );
includes/admin/class-wp-job-manager-settings.php CHANGED
@@ -89,7 +89,7 @@ class WP_Job_Manager_Settings {
89
  'name' => 'job_manager_category_filter_type',
90
  'std' => 'any',
91
  'label' => __( 'Category Filter Type', 'wp-job-manager' ),
92
- 'desc' => __( 'If enabled, the category select box will default to a multiselect on the [jobs] shortcode.', 'wp-job-manager' ),
93
  'type' => 'select',
94
  'options' => array(
95
  'any' => __( 'Jobs will be shown if within ANY selected category', 'wp-job-manager' ),
89
  'name' => 'job_manager_category_filter_type',
90
  'std' => 'any',
91
  'label' => __( 'Category Filter Type', 'wp-job-manager' ),
92
+ 'desc' => __( 'Determines the logic used to display jobs when selecting multiple categories.', 'wp-job-manager' ),
93
  'type' => 'select',
94
  'options' => array(
95
  'any' => __( 'Jobs will be shown if within ANY selected category', 'wp-job-manager' ),
includes/admin/class-wp-job-manager-writepanels.php CHANGED
@@ -151,13 +151,13 @@ class WP_Job_Manager_Writepanels {
151
  <?php
152
  if ( ! empty( $field['multiple'] ) ) {
153
  foreach ( (array) $field['value'] as $value ) {
154
- ?><span class="file_url"><input type="text" name="<?php echo esc_attr( $name ); ?>[]" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" value="<?php echo esc_attr( $value ); ?>" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="<?php _e( 'Use file', 'wp-job-manager' ); ?>"><?php _e( 'Upload', 'wp-job-manager' ); ?></button></span><?php
155
  }
156
  } else {
157
- ?><span class="file_url"><input type="text" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" value="<?php echo esc_attr( $field['value'] ); ?>" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="<?php _e( 'Use file', 'wp-job-manager' ); ?>"><?php _e( 'Upload', 'wp-job-manager' ); ?></button></span><?php
158
  }
159
  if ( ! empty( $field['multiple'] ) ) {
160
- ?><button class="button button-small wp_job_manager_add_another_file_button" data-field_name="<?php echo esc_attr( $key ); ?>" data-field_placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" data-uploader_button_text="<?php _e( 'Use file', 'wp-job-manager' ); ?>" data-uploader_button="<?php _e( 'Upload', 'wp-job-manager' ); ?>"><?php _e( 'Add file', 'wp-job-manager' ); ?></button><?php
161
  }
162
  ?>
163
  </p>
151
  <?php
152
  if ( ! empty( $field['multiple'] ) ) {
153
  foreach ( (array) $field['value'] as $value ) {
154
+ ?><span class="file_url"><input type="text" name="<?php echo esc_attr( $name ); ?>[]" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" value="<?php echo esc_attr( $value ); ?>" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="<?php _e( 'Use file', 'wp-job-manager' ); ?>"><?php _e( 'Upload', 'wp-job-manager' ); ?></button><button class="button button-small wp_job_manager_view_file_button"><?php _e( 'View', 'wp-job-manager' ); ?></button></span><?php
155
  }
156
  } else {
157
+ ?><span class="file_url"><input type="text" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" value="<?php echo esc_attr( $field['value'] ); ?>" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="<?php _e( 'Use file', 'wp-job-manager' ); ?>"><?php _e( 'Upload', 'wp-job-manager' ); ?></button><button class="button button-small wp_job_manager_view_file_button"><?php _e( 'View', 'wp-job-manager' ); ?></button></span><?php
158
  }
159
  if ( ! empty( $field['multiple'] ) ) {
160
+ ?><button class="button button-small wp_job_manager_add_another_file_button" data-field_name="<?php echo esc_attr( $key ); ?>" data-field_placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" data-uploader_button_text="<?php _e( 'Use file', 'wp-job-manager' ); ?>" data-uploader_button="<?php _e( 'Upload', 'wp-job-manager' ); ?>" data-view_button="<?php _e( 'View', 'wp-job-manager' ); ?>"><?php _e( 'Add file', 'wp-job-manager' ); ?></button><?php
161
  }
162
  ?>
163
  </p>
includes/class-wp-job-manager-category-walker.php CHANGED
@@ -8,8 +8,21 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
8
  */
9
  class WP_Job_Manager_Category_Walker extends Walker {
10
 
11
- var $tree_type = 'category';
12
- var $db_fields = array ('parent' => 'parent', 'id' => 'term_id', 'slug' => 'slug' );
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  /**
15
  * @see Walker::start_el()
@@ -20,7 +33,7 @@ class WP_Job_Manager_Category_Walker extends Walker {
20
  * @param int $depth Depth of category in reference to parents.
21
  * @param array $args
22
  */
23
- function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
24
 
25
  if ( ! empty( $args['hierarchical'] ) )
26
  $pad = str_repeat('&nbsp;', $depth * 3);
@@ -46,4 +59,4 @@ class WP_Job_Manager_Category_Walker extends Walker {
46
 
47
  $output .= "</option>\n";
48
  }
49
- }
8
  */
9
  class WP_Job_Manager_Category_Walker extends Walker {
10
 
11
+ /**
12
+ * Tree type
13
+ *
14
+ * @access public
15
+ * @var string
16
+ */
17
+ public $tree_type = 'category';
18
+
19
+ /**
20
+ * Database fields
21
+ *
22
+ * @access public
23
+ * @var array
24
+ */
25
+ public $db_fields = array ('parent' => 'parent', 'id' => 'term_id', 'slug' => 'slug' );
26
 
27
  /**
28
  * @see Walker::start_el()
33
  * @param int $depth Depth of category in reference to parents.
34
  * @param array $args
35
  */
36
+ public function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
37
 
38
  if ( ! empty( $args['hierarchical'] ) )
39
  $pad = str_repeat('&nbsp;', $depth * 3);
59
 
60
  $output .= "</option>\n";
61
  }
62
+ }
includes/class-wp-job-manager-post-types.php CHANGED
@@ -101,6 +101,7 @@ class WP_Job_Manager_Post_Types {
101
  'new_item_name' => sprintf( __( 'New %s Name', 'wp-job-manager' ), $singular )
102
  ),
103
  'show_ui' => true,
 
104
  'public' => $public,
105
  'capabilities' => array(
106
  'manage_terms' => $admin_capability,
@@ -147,6 +148,7 @@ class WP_Job_Manager_Post_Types {
147
  'new_item_name' => sprintf( __( 'New %s Name', 'wp-job-manager' ), $singular )
148
  ),
149
  'show_ui' => true,
 
150
  'public' => $public,
151
  'capabilities' => array(
152
  'manage_terms' => $admin_capability,
@@ -391,6 +393,13 @@ class WP_Job_Manager_Post_Types {
391
  if ( $company ) {
392
  echo "<job_listing:company><![CDATA[" . esc_html( $company ) . "]]></job_listing:company>\n";
393
  }
 
 
 
 
 
 
 
394
  }
395
 
396
  /**
101
  'new_item_name' => sprintf( __( 'New %s Name', 'wp-job-manager' ), $singular )
102
  ),
103
  'show_ui' => true,
104
+ 'show_tagcloud' => false,
105
  'public' => $public,
106
  'capabilities' => array(
107
  'manage_terms' => $admin_capability,
148
  'new_item_name' => sprintf( __( 'New %s Name', 'wp-job-manager' ), $singular )
149
  ),
150
  'show_ui' => true,
151
+ 'show_tagcloud' => false,
152
  'public' => $public,
153
  'capabilities' => array(
154
  'manage_terms' => $admin_capability,
393
  if ( $company ) {
394
  echo "<job_listing:company><![CDATA[" . esc_html( $company ) . "]]></job_listing:company>\n";
395
  }
396
+
397
+ /**
398
+ * Fires at the end of each job RSS feed item.
399
+ *
400
+ * @param int $post_id The post ID of the job.
401
+ */
402
+ do_action( 'job_feed_item', $post_id );
403
  }
404
 
405
  /**
includes/class-wp-job-manager-shortcodes.php CHANGED
@@ -7,6 +7,12 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
7
  */
8
  class WP_Job_Manager_Shortcodes {
9
 
 
 
 
 
 
 
10
  private $job_dashboard_message = '';
11
 
12
  /**
7
  */
8
  class WP_Job_Manager_Shortcodes {
9
 
10
+ /**
11
+ * Dashboard message
12
+ *
13
+ * @access private
14
+ * @var string
15
+ */
16
  private $job_dashboard_message = '';
17
 
18
  /**
includes/class-wp-job-manager-widgets.php CHANGED
@@ -7,10 +7,44 @@ if ( ! defined( 'ABSPATH' ) ) exit;
7
  */
8
  class WP_Job_Manager_Widget extends WP_Widget {
9
 
 
 
 
 
 
 
10
  public $widget_cssclass;
 
 
 
 
 
 
 
11
  public $widget_description;
 
 
 
 
 
 
 
12
  public $widget_id;
 
 
 
 
 
 
 
13
  public $widget_name;
 
 
 
 
 
 
 
14
  public $settings;
15
 
16
  /**
@@ -39,7 +73,7 @@ class WP_Job_Manager_Widget extends WP_Widget {
39
  /**
40
  * get_cached_widget function.
41
  */
42
- function get_cached_widget( $args ) {
43
  $cache = wp_cache_get( $this->widget_id, 'widget' );
44
 
45
  if ( ! is_array( $cache ) )
@@ -79,7 +113,7 @@ class WP_Job_Manager_Widget extends WP_Widget {
79
  * @param array $old_instance
80
  * @return array
81
  */
82
- function update( $new_instance, $old_instance ) {
83
  $instance = $old_instance;
84
 
85
  if ( ! $this->settings )
@@ -131,6 +165,19 @@ class WP_Job_Manager_Widget extends WP_Widget {
131
  }
132
  }
133
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  }
135
 
136
  /**
7
  */
8
  class WP_Job_Manager_Widget extends WP_Widget {
9
 
10
+ /**
11
+ * Widget CSS class
12
+ *
13
+ * @access public
14
+ * @var string
15
+ */
16
  public $widget_cssclass;
17
+
18
+ /**
19
+ * Widget description
20
+ *
21
+ * @access public
22
+ * @var string
23
+ */
24
  public $widget_description;
25
+
26
+ /**
27
+ * Widget id
28
+ *
29
+ * @access public
30
+ * @var string
31
+ */
32
  public $widget_id;
33
+
34
+ /**
35
+ * Widget name
36
+ *
37
+ * @access public
38
+ * @var string
39
+ */
40
  public $widget_name;
41
+
42
+ /**
43
+ * Widget settings
44
+ *
45
+ * @access public
46
+ * @var array
47
+ */
48
  public $settings;
49
 
50
  /**
73
  /**
74
  * get_cached_widget function.
75
  */
76
+ public function get_cached_widget( $args ) {
77
  $cache = wp_cache_get( $this->widget_id, 'widget' );
78
 
79
  if ( ! is_array( $cache ) )
113
  * @param array $old_instance
114
  * @return array
115
  */
116
+ public function update( $new_instance, $old_instance ) {
117
  $instance = $old_instance;
118
 
119
  if ( ! $this->settings )
165
  }
166
  }
167
  }
168
+
169
+ /**
170
+ * widget function.
171
+ *
172
+ * @see WP_Widget
173
+ * @access public
174
+ *
175
+ * @param array $args
176
+ * @param array $instance
177
+ *
178
+ * @return void
179
+ */
180
+ public function widget( $args, $instance ) {}
181
  }
182
 
183
  /**
includes/forms/class-wp-job-manager-form-edit-job.php CHANGED
@@ -7,9 +7,20 @@ include_once( 'class-wp-job-manager-form-submit-job.php' );
7
  */
8
  class WP_Job_Manager_Form_Edit_Job extends WP_Job_Manager_Form_Submit_Job {
9
 
10
- public $form_name = 'edit-job';
 
 
 
 
 
 
11
 
12
- /** @var WP_Job_Manager_Form_Edit_Job The single instance of the class */
 
 
 
 
 
13
  protected static $_instance = null;
14
 
15
  /**
7
  */
8
  class WP_Job_Manager_Form_Edit_Job extends WP_Job_Manager_Form_Submit_Job {
9
 
10
+ /**
11
+ * Form name
12
+ *
13
+ * @access public
14
+ * @var string
15
+ */
16
+ public $form_name = 'edit-job';
17
 
18
+ /**
19
+ * Instance
20
+ *
21
+ * @access protected
22
+ * @var WP_Job_Manager_Form_Edit_Job The single instance of the class
23
+ */
24
  protected static $_instance = null;
25
 
26
  /**
includes/forms/class-wp-job-manager-form-submit-job.php CHANGED
@@ -5,11 +5,36 @@
5
  */
6
  class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
7
 
8
- public $form_name = 'submit-job';
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  protected $job_id;
 
 
 
 
 
 
 
10
  protected $preview_job;
11
 
12
- /** @var WP_Job_Manager_Form_Submit_Job The single instance of the class */
 
 
 
 
 
13
  protected static $_instance = null;
14
 
15
  /**
@@ -64,7 +89,7 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
64
  $job_id = absint( $_COOKIE['wp-job-manager-submitting-job-id'] );
65
  $job_status = get_post_status( $job_id );
66
 
67
- if ( 'preview' === $job_status && get_post_meta( $job_id, '_submitting_key', true ) === $_COOKIE['wp-job-manager-submitting-job-key'] ) {
68
  $this->job_id = $job_id;
69
  }
70
  }
5
  */
6
  class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
7
 
8
+ /**
9
+ * Form name
10
+ *
11
+ * @access public
12
+ * @var string
13
+ */
14
+ public $form_name = 'submit-job';
15
+
16
+ /**
17
+ * Job id
18
+ *
19
+ * @access protected
20
+ * @var int
21
+ */
22
  protected $job_id;
23
+
24
+ /**
25
+ * Preview job
26
+ *
27
+ * @access protected
28
+ * @var string
29
+ */
30
  protected $preview_job;
31
 
32
+ /**
33
+ * Instance
34
+ *
35
+ * @access protected
36
+ * @var WP_Job_Manager_Form_Submit_Job The single instance of the class
37
+ */
38
  protected static $_instance = null;
39
 
40
  /**
89
  $job_id = absint( $_COOKIE['wp-job-manager-submitting-job-id'] );
90
  $job_status = get_post_status( $job_id );
91
 
92
+ if ( ( 'preview' === $job_status || 'pending_payment' === $job_status ) && get_post_meta( $job_id, '_submitting_key', true ) === $_COOKIE['wp-job-manager-submitting-job-key'] ) {
93
  $this->job_id = $job_id;
94
  }
95
  }
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === WP Job Manager ===
2
- Contributors: mikejolley, automattic, adamkheckler, chaselivingston, csonnek, jacobshere, jeherve, jenhooks, kraftbj, lschuyler, macmanx, nancythanki, ryancowles, richardmtl, drawmyface, davor.altman, lamdayap
3
  Tags: job manager, job listing, job board, job management, job lists, job list, job, jobs, company, hiring, employment, employer, employees, candidate, freelance, internship, job listings, positions, board, application, hiring, listing, manager, recruiting, recruitment, talent
4
  Requires at least: 4.1
5
- Tested up to: 4.4
6
- Stable tag: 1.25.0
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -141,6 +141,19 @@ You can view (and contribute) translations via the [translate.wordpress.org](htt
141
 
142
  == Changelog ==
143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  = 1.25.0 =
145
  * Feature - Ability to duplicate listings from job dashboard.
146
  * Fix - Support WP_EMBED in job descriptions.
@@ -254,413 +267,9 @@ You can view (and contribute) translations via the [translate.wordpress.org](htt
254
  * Tweak - Improved job_feed searching.
255
  * Tweak - Improved transient cleaning.
256
 
257
- = 1.22.3 =
258
- * Fix frontend listing edits.
259
-
260
- = 1.22.2 =
261
- * Tweak - Set form actions to current page.
262
- * Fix - Video embeds.
263
- * Fix - Load textdomain before post types are registered.
264
-
265
- = 1.22.1 =
266
- * Fix - It's 2015, but some people are still running PHP 5.2. Compatibility fix.
267
-
268
- = 1.22.0 =
269
- * Tweak - Refactored form classes to be instance based rather than static. Reduction in code base.
270
- * Tweak - Admin styling of the job data panels.
271
- * Tweak - Admin styling of the status column.
272
- * Tweak - Better handling of the expiry field.
273
- * Tweak - Search _geolocation_state_long.
274
- * Tweak - Allow admin fields to have custom 'name'.
275
- * Tweak - Use wp_video_shortcode instead of oembed directly.
276
- * Tweak - Tweak menu order code for featured jobs - use -1 for featured and leave other jobs alone.
277
- * Tweak - Clear expired date when publishing an expired listing.
278
- * Tweak - clear_expired_transients function.
279
- * Fix - Prevent term-checklist being disabled for guests.
280
- * Fix - Add WPML var to transient name.
281
- * Fix - Remove use of create_function.
282
-
283
- = 1.21.4 =
284
- * Fix - get_job_listings_keyword_search keyword search.
285
- * Fix - Clear term cache when terms are set for any object.
286
- * Fix - Legacy uploads.
287
- * Tweak - RTL improvements.
288
- * Tweak - Use RLIKE to search keywords in content.
289
- * Tweak - Show relative pagination.
290
- * Updated translations.
291
- * Arabic translation by Mamdouh Samy.
292
-
293
- = 1.21.3 =
294
- * Feature - Support posts_per_page in feed.
295
- * Fix - Correctly set menu_order when creating a new job, or updating featured status.
296
- * Fix - Updater when there are no featured jobs.
297
- * Fix - Add geolocation_street_number to clear_location_data.
298
-
299
- = 1.21.2 =
300
- * Fix - Remove requried attribute from file input.
301
-
302
- = 1.21.1 =
303
- * Fix - Remove file type check when field is not required and empty.
304
- * Fix - Hide "Applications have closed" for previews.
305
-
306
- = 1.21.0 =
307
- * Feature - Ajax loading history - back button will take you back to current position in the search. If you are on > page 1, a 'load previous' button will be shown so you can paginate either way.
308
- * Feature - Ajax file upload during job submission.
309
- * Feature - Cookie set when submitting a job to allow resuming if you leave the page.
310
- * Feature - job_apply shortcode to show application area in other places on your site.
311
- * Feature - Allow admin fields to be priority sorted.
312
- * Feature - Featured job widget.
313
- * Feature - Scroll to top on pagination click.
314
- * Feature - Option to "Hide content within expired listings". If disabled, expired listings will be listed normally with applications disabled.
315
- * Fix - Prevent attachments being uploaded several times.
316
- * Fix - Expiry date on first save.
317
- * Fix - Relist should go back to form.
318
- * Fix - jquery.com CDN for CSS.
319
- * Tweak - Geocode street and street number separately.
320
- * Tweak - File upload field markup.
321
- * Tweak - Added filters around taxonomy definition.
322
- * Tweak - Chanced search logic/query to use the new meta queries in 4.1.
323
- * Tweak - Implement transient caching for searches.
324
- * Tweak - Removed wp_dropdown_user due to performance concerns.
325
- * Tweak - Use menu_order to make featured listings sticky. Improves performance.
326
- * Tweak - Retrieve AJAX jobs with GET rather than POST request to take advantage of more caching. Plugins looking for POST data will need to update to look for GET/REQUEST instead.
327
- * Tweak - Prevent themes that (sigh) mess with content hooks from breaking inputs.
328
- * Tweak - Remove unused job-category field.
329
- * Tweak - Hide company div if company name missing.
330
-
331
- = 1.20.1 =
332
- * Fix - Core template overrides.
333
- * Updated localisations.
334
-
335
- = 1.20.0 =
336
- * Feature - Sortable location column in admin.
337
- * Feature - Automatically Generate Username from Email Address option (disable to show a username field).
338
- * Feature - 'filled' option for job shortcode to show all filled/non filled jobs.
339
- * Fix - Pagination with default permalinks.
340
- * Fix - Correctly generate geolocation data when adding a post manually.
341
- * Fix - Chosen width when resizing the page.
342
- * Fix - Show no jobs when all types de-selected.
343
- * Tweak - content-widget-no-jobs-found.php template file.
344
- * Tweak - Don't limit keyword search query functions to published jobs.
345
- * Tweak - job_manager_output_jobs_no_results action.
346
- * Tweak - No results template hooked into job_manager_output_jobs_no_results.
347
- * Tweak - Changed content-no-jobs-found.php content to work for ajax and static lists of jobs. Tweaked text.
348
- * Tweak - job_manager_default_company_logo filter for changing default company image.
349
- * Tweak - Enhance multiselect field with chosen.
350
- * Dev - Abiltiy to pass shortcode args to submit_job_form shortcode.
351
- * Dev - Made get_job_manager_template_part() use locate_job_manager_template().
352
- * Dev - Changed how username/email/role are passed to wp_job_manager_create_account (backwards compat).
353
-
354
- = 1.19.0 =
355
- * Feature - Added html5 required attribute to required fields.
356
- * Feature - Added compatibility with RP4WP.
357
- * Fix - Chosen RTL.
358
- * Fix - Addded additonal check to check edit capabilities.
359
- * Fix - Add correct step input to submission form.
360
- * Tweak - Add CSS class to 'showing' bar when shoing all results (no filters).
361
- * Tweak - Geocode, use sublocality_level_1 as city.
362
- * Tweak - Don't update slug when editing via the frontend.
363
- * Tweak - Set default meta data for new jobs.
364
- * Tweak - Add geolocation data after import with WP ALL Import.
365
- * Tweak - Filter to disable chosen: job_manager_chosen_enabled
366
- * Tweak - Login link on job dashboard. job-dashboard-login.php template file.
367
- * Tweak - Made backend management honour capabilities of users. Props to minderdl.
368
-
369
- = 1.18.0 =
370
- * Fix - Keep post name when pending job is posted by non-admin.
371
- * Fix - Prevent special chars breaking the feeds.
372
- * Tweak - Added new capabilities for all aspects of Job Listing Management. e.g. edit_job_listings, add_job_listing etc etc. Admin role will be updated on activation/upgrade. If you use custom roles, you'll need to edit them to grant access to the parts you wish.
373
- * Tweak - Improved uninstaller.
374
- * Tweak - Clear location data should include geolocation_postcode.
375
- * Tweak - Always show 'showing' bar, but conditonally show 'reset' link.
376
- * Tweak - Trigger geolocation whenever location field is saved, even by 3rd parties.
377
-
378
- = 1.17.0 =
379
- * Feature - job_manager_user_can_edit_pending_submissions function and setting.
380
- * Feature - Job summary shortcode - support random display of job (featured or non featured).
381
- * Feature - In admin, when clicking an author name show all jobs for that author.
382
- * Tweak - Added sanitization function to form class to handle strings and arrays.
383
-
384
- = 1.16.1 =
385
- * Fix - Use triggerHandler() instead of trigger() in ajax-filters to prevent events bubbling up.
386
- * Fix - Append current 'lang' to AJAX calls for WPML.
387
- * Fix - When specifying categories on the jobs shortcode, don't clear those categories on reset.
388
- * Tweak - Added job_manager_admin_screen_ids filter.
389
-
390
- = 1.16.0 =
391
- * Added setup wizard for new installs that creates pages/shortcodes automatically.
392
- * Added job_manager_get_permalink function.
393
- * Fix - Only show website link when actually set.
394
- * Fix - Only validate application when field is set.
395
- * Tweak - Added description to all fields.
396
- * Tweak - Added better setting fields for defining which pages contain the shortcodes.
397
- * Tweak - Nofollow website links.
398
- * Tweak - Removed font-sizes from default CSS and fixed display in default WP themes.
399
-
400
- = 1.15.0 =
401
- * Added location/keyword option to recent jobs widget.
402
- * Added job-listings-start and job-listings-end.php templates for customisation the wrapping elements.
403
- * Added filter type option for job categories. Can be set to require matching to any or all selected categories.
404
- * Added checkbox field type for forms.
405
- * Made backend application email field default to logged in user.
406
- * Fix - job_manager_get_resized_image to not error when it cannot read the image file.
407
- * Fix - Make admin_url relative.
408
- * Fix - Chosen CSS cutting off the placeholder in Firefox.
409
- * Fix - Added _company_video in backend.
410
-
411
- = 1.14.0 =
412
- * Extra filters for the filters template.
413
- * Changed text strings for easier customisations based on post type labels, and made some strings more generic.
414
- * New field types - term-checklist, term-multiselect, term-select. These save terms only.
415
- * Added chosen javascript to enhance multiselect boxes when needed.
416
- * Multiple category support.
417
- * Attach Images on Upload to the job posts.
418
- * Added an option to show a multiselect for categories on the job filters.
419
- * Enabled chosen() for the job category filter.
420
- * Added content-single-job_listing-company.php and content-single-job_listing-meta.php templates. These are hooked in.
421
- * Added optional company video field to submission form.
422
- * Video appended to company information box.
423
- * the_company_video() and get_the_company_video() functions.
424
- * show_more="false" for jobs shortcode to prevent loading more jobs.
425
- * job_manager_delete_expired_jobs filter (__return_false to disable expired job deletion).
426
- * job_manager_delete_expired_jobs_days filter (set number of days before deletion - default is 30).
427
- * Support HTML5 multiple attribute for file upload field. Pass multiple=>'true' to form field definition to enable.
428
- * Later loading for template functions.
429
-
430
- = 1.13.0 =
431
- * Shortcode arg to show numbered pagination instead of 'load more jobs'. show_pagination argument.
432
- * Define support for Jetpack publicize.
433
- * Show company name alt text for company logo.
434
- * Sort jobs by title, date, expirey date.
435
- * Added noscript element for jobs shortcode.
436
- * filter_var to validate URLs on the job submission form.
437
-
438
- = 1.12.1 =
439
- * Job submission form categories must not hide empty categories.
440
-
441
- = 1.12.0 =
442
- * On the job submission form, display hierarchical categories.
443
- * Use job_manager_ prefixed hooks for registration (register_post/registration_errors/register_form) to prevent issues with Captcha plugins.
444
- * Pass $post to job_manager_application_email_subject
445
- * Additonal hooks in job-filters template, and moved out job types output to separate template file.
446
- * Option to set the job dashboard page slug so plugins know where to look.
447
- * Allow you@yourdomain.com to be translated.
448
- * Make taxonomies hidden unless current_theme_supports( 'job-manager-templates' )
449
- * Adjusted job application area styling and added some additonal filters.
450
- * Improve backend order status selection.
451
- * Added some responsive styles for job lists.
452
- * Allow users to relist a job from the frontend. (Ensure WC Paid Listings and Simple Paid Listings are updated to support this).
453
-
454
- = 1.11.1 =
455
- * Fix ajax filters 'true' for show_filters
456
- * Fix geocoding for certain address strings
457
- * Fix keywords typo
458
- * Remove deprecated $wpdb->escape calls. Replaced with esc_sql
459
-
460
- = 1.11.0 =
461
- * Switch geocode to json and improve error checking.
462
- * If query limit is reached, stop making requests for a while.
463
- * Added extra data inside job_feed.
464
- * Few extra icons in font.
465
- * Additonal hooks in single template.
466
- * Pick up search_category from querystring to set default/selected category.
467
- * Ability to define selected_job_types for the jobs shortcode which will set the default job type filters.
468
- * Took out show_featured_only arg for the [jobs] shortcode and added 'featured' which can be set to true or false to show or hide featured jobs, or left null to show both.
469
- * Removed nonce from frontend job submission form to prevent issues with caching.
470
-
471
- = 1.10.0 =
472
- * Trigger change on 'enter' when filtering jobs.
473
- * Updated add-ons page to pull from wpjobmanager.com.
474
- * Updated links.
475
- * Fixed support for custom upload URLs.
476
- * Choose/limit application method to email, url or either.
477
- * Default application value (if logged in) set to user's email address.
478
- * show_featured_only option for [jobs] shortcode.
479
- * Add required-field class around required inputs.
480
- * Enable paste as text in wp-editor field.
481
-
482
- = 1.9.3 =
483
- * Fix email URLs.
484
- * Target blank for application URLs.
485
- * Add posted by (author) setting in backend.
486
- * When saving jobs, ensure _featured and _filled are set.
487
- * Load admin scripts conditionally.
488
-
489
- = 1.9.2 =
490
- * Fix missing parameter in application_details_url causing URLs to be missing when applying.
491
-
492
- = 1.9.1 =
493
- * Removed resource heavy 'default_meta' function from the installation process.
494
-
495
- = 1.9.0 =
496
- * Template - Split off URL and email application methods and added new hooks. This allows other plugins to manipulate the content.
497
- * Pass $values to edit job save function so permalinks are preserved.
498
- * When showing filters, ensure we check by slug if category is non-numeric.
499
- * Give listings ul a min height so that loading image is visible.
500
- * content-no-jobs-found.php template.
501
- * Fix apostrophe direction in signin template.
502
- * Bulk expire jobs.
503
- * submit_job_form_required_label hook.
504
- * ability to set default state for selects on submit form.
505
- * allow passed in classes in get_job_listing_class function.
506
- * Hook in the content only if in_the_loop(). Fixes issues with jobify and yoast SEO.
507
- * Removed .clear mixin to prevent theme conflicts.
508
-
509
- = 1.8.2 =
510
- * For initial load, target all .job_filters areas. Jobify compat.
511
-
512
- = 1.8.1 =
513
- * Fix - Corrected check to see if any category terms with jobs exist
514
-
515
- = 1.8.0 =
516
- * Feature - Take search/location vars from the querystring if set
517
- * Feature - Option to choose role for registration, and added an 'employer' role.
518
- * Feature - Support for comma separated keywords when searching
519
- * Fix - Use add_post_meta when editing a job to maintain featured status
520
- * Fix - category ordering
521
- * Fix - searching for keyword + location at the same time
522
- * Fix - Only show categories select box when they exist
523
- * Dev - job_manager_application_email_subject filter
524
-
525
- = 1.7.3 =
526
- * Some changes to file uploads to support custom mime types
527
- * Updated icon file (http://fontello.com/)
528
- * Fix category rss links
529
- * When doing a location search, search geolocation data
530
- * Fix notices when removing all company fields
531
- * Made jslint happy with ajax-filters.js
532
- * Use get_option( 'default_role' ) when creating a user
533
- * Grunt for release
534
-
535
- = 1.7.2 =
536
- * Preserve line breaks when saving textarea fields in admin
537
- * Hide 'showing all x' when no filters are chosen.
538
- * Register 'preview' status so that the counts are correct.
539
- * Delete previews via cron job.
540
-
541
- = 1.7.1 =
542
- * Updated textdomain to wp-job-manager
543
- * Re-done .pot file
544
- * Additonal filters for ajax responses
545
- * Moved localisations to Transifex https://www.transifex.com/projects/p/wp-job-manager/
546
-
547
- = 1.7.0 =
548
- * Added geolocation to save location data to meta after posting or saving a job. This will be used by other plugins.
549
- * Filter job_manager_geolocation_enabled and return false to turn off geolocation features.
550
- * Jobs shortcode can now be passed 'location' and 'keywords' to set the default for filters, or show only jobs with those keywords if filters are disabled
551
- * Html fix in widget
552
- * Add border around wp editor
553
- * Fix company logo in firefox
554
- * submit_job_form_wp_editor_args filter
555
- * "Empty" categories are visible when filtering jobs in admin.
556
-
557
- = 1.6.0 =
558
- * MP6/WP 3.8 optimised styling. Min version 3.8 for new styling.
559
- * Removed images previously used in admin.
560
- * Tweak the_company_logo() to check if logo is valid URL.
561
- * Replaced Genericons with custom set
562
- * Only show link to view job on dashboard when published
563
-
564
- = 1.5.2 =
565
- * Fix wp-editor field
566
- * Fix editing job images
567
-
568
- = 1.5.1 =
569
- * Changed get_the_time to get_post_time
570
- * Added textarea and wp-editor to form api
571
- * When using the job submit form, generate a more unqiue slug for the job - company-location-type-job-title
572
- * Ability to remove image from job submission form
573
- * Update icon font
574
- * Fix job_types filters
575
- * Field_select in admin
576
- * Fix access control on job editing
577
- * Job forms multiselect support
578
-
579
- = 1.5.0 =
580
- * Ability to edit job expiration date manually via admin
581
- * Settings API: Password field
582
- * Frontend Forms: Password field
583
- * Correctly turn off expiration when 'days' is not set
584
- * Greek should be el_GR
585
- * Settings: Use key for tabs - fixes issues with locales
586
- * Show pending count in admin menu
587
- * Added job_types argument to jobs shortcode to show jobs of a certain type only
588
- * Hierarchical dropdown for categories on filter form
589
- * job_manager_job_submitted hook in submission form
590
-
591
- = 1.4.0 =
592
- * Added pagination to the job dashboard to avoid memory issues
593
- * Schema.org markup for job listings
594
- * Greek translation by Ioannis Arsenis
595
-
596
- = 1.3.1 =
597
- * Remove line breaks from markup to prevent theme issues
598
-
599
- = 1.3.0 =
600
- * When using the [jobs] shortcode without filters, if jobs > per-page show the 'load more' link
601
- * Clearfix for meta div
602
- * Hooked up $size option for company logos
603
- * submit_job_form_save_job_data filter
604
- * Italian translation
605
- * Brazillian Portuguese translation
606
- * Respect other plugin columns in admin
607
- * Re-arranged admin columns to show less non-useful data
608
-
609
- = 1.2.0 =
610
- * Support for featured job listings
611
- * Support for meta job duration
612
- * set_expirey when publishing jobs from admin manually
613
- * Update handler
614
-
615
- = 1.1.3 =
616
- * Corrected form field label
617
- * Added french translation by Remi Corson
618
-
619
- = 1.1.2 =
620
- * job_manager_get_dashboard_jobs_args filter
621
- * Better handling of submit job steps.
622
- * Option to store the slug of the submit job page - used by addons.
623
- * Use :input in JS to support multiple input types if customised.
624
-
625
- = 1.1.1 =
626
- * Improved accuracy of job search
627
- * Fixed category filter dropdown in admin
628
-
629
- = 1.1.0 =
630
- * Tweaked css clearfixes
631
- * Use built in antispambot for encoding email.
632
- * job_manager_job_filters_showing_jobs_links filter
633
- * IE8 Apply filters JS fix
634
- * Fix spanish locale
635
- * Fixed strict standards errors
636
- * Improve 2013 Styles
637
- * Addons page. Disabled usings add_filter( 'job_manager_show_addons_page', '__return_false' );
638
-
639
- = 1.0.5 =
640
- * Added function to get listings by certain criteria.
641
- * Added ES translation.
642
- * Fix job feed when no args are present.
643
-
644
- = 1.0.4 =
645
- * More hooks in the submit process.
646
- * Hide apply button if url/email is unset.
647
-
648
- = 1.0.3 =
649
- * Some extra hooks in job-filters.php
650
- * Added a workaround for scripts which bork placeholders inside the job filters.
651
-
652
- = 1.0.2 =
653
- * Action in update_job_data() to allow saving of extra fields.
654
- * Added German translation by Chris Penning
655
-
656
- = 1.0.1 =
657
- * Slight tweak to listing field filters in admin.
658
- * 'attributes' argument for admin settings.
659
-
660
- = 1.0.0 =
661
- * First stable release.
662
 
663
  == Upgrade Notice ==
664
 
665
- = 1.22.0 =
666
- As this is a major update, please ensure you update any plugins and themes that rely on Job Manager. This includes Resume Manager, Applications, WC Paid Lisitngs, and themes such as Jobify.
1
  === WP Job Manager ===
2
+ Contributors: mikejolley, automattic, adamkheckler, annezazu, artemitos, bikedorkjon, cena, chaselivingston, csonnek, davor.altman, drawmyface, erania-pinnera, jacobshere, jeherve, jenhooks, jgs, kraftbj, lamdayap, lschuyler, macmanx, nancythanki, orangesareorange, rachelsquirrel, ryancowles, richardmtl, scarstocea
3
  Tags: job manager, job listing, job board, job management, job lists, job list, job, jobs, company, hiring, employment, employer, employees, candidate, freelance, internship, job listings, positions, board, application, hiring, listing, manager, recruiting, recruitment, talent
4
  Requires at least: 4.1
5
+ Tested up to: 4.6
6
+ Stable tag: 1.25.1
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
141
 
142
  == Changelog ==
143
 
144
+ = 1.25.1 =
145
+ * Feature - Adds a view button to the Admin UI for easy access to submitted files or URLs. Props tripflex (https://github.com/Automattic/WP-Job-Manager/pull/650)
146
+ * Fix - Add hardening to file uploads to prevent accepting unexpected file times. Previously, other WP-allowed types were sometimes accepted.
147
+ * Fix - Job post form categories are now properly cached and displayed per language when using WPML or Polylang. (https://github.com/Automattic/WP-Job-Manager/issues/692)
148
+ * Fix - Refactored WPML workaround, which was causing no job listings on non-default languages. (https://github.com/Automattic/WP-Job-Manager/issues/617)
149
+ * Fix - Allow employers to edit job listings when a listing is pending payment. (https://github.com/Automattic/WP-Job-Manager/pull/664)
150
+ * Fix - No longer display Job Taxonomies in the WordPress tag cloud. (https://github.com/Automattic/WP-Job-Manager/pull/658)
151
+ * Fix - Migrate away from jQuery.live, which is no longer supported. ( https://github.com/Automattic/WP-Job-Manager/pull/664 )
152
+ * Tweak - Updated incorrect settings description. (https://github.com/Automattic/WP-Job-Manager/pull/632)
153
+ * Dev - Adds hook to add items in a job's RSS feed item. (https://github.com/Automattic/WP-Job-Manager/pull/636)
154
+ * Dev - Adds filter to disable Job Listings cache (https://github.com/Automattic/WP-Job-Manager/pull/684)
155
+ * Dev - Inline docs and coding standards improvements.
156
+
157
  = 1.25.0 =
158
  * Feature - Ability to duplicate listings from job dashboard.
159
  * Fix - Support WP_EMBED in job descriptions.
267
  * Tweak - Improved job_feed searching.
268
  * Tweak - Improved transient cleaning.
269
 
270
+ See additional changelog items in changelog.txt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
 
272
  == Upgrade Notice ==
273
 
274
+ = 1.25.1 =
275
+ This release includes many bugs and fixes including some security improvements. Upgrade today!
wp-job-manager-functions.php CHANGED
@@ -135,9 +135,17 @@ function get_job_listings( $args = array() ) {
135
 
136
  do_action( 'before_get_job_listings', $query_args, $args );
137
 
138
- if ( false === ( $result = get_transient( $query_args_hash ) ) ) {
 
 
 
 
 
 
 
 
 
139
  $result = new WP_Query( $query_args );
140
- set_transient( $query_args_hash, $result, DAY_IN_SECONDS * 30 );
141
  }
142
 
143
  do_action( 'after_get_job_listings', $query_args, $args );
@@ -546,6 +554,13 @@ function job_manager_dropdown_categories( $args = '' ) {
546
  $r['pad_counts'] = true;
547
  }
548
 
 
 
 
 
 
 
 
549
  extract( $r );
550
 
551
  // Store in a transient to help sites with many cats
@@ -696,18 +711,23 @@ function job_manager_upload_file( $file, $args = array() ) {
696
  $args = wp_parse_args( $args, array(
697
  'file_key' => '',
698
  'file_label' => '',
699
- 'allowed_mime_types' => get_allowed_mime_types()
700
  ) );
701
 
702
  $job_manager_upload = true;
703
  $job_manager_uploading_file = $args['file_key'];
704
  $uploaded_file = new stdClass();
 
 
 
 
 
705
 
706
- if ( ! in_array( $file['type'], $args['allowed_mime_types'] ) ) {
707
  if ( $args['file_label'] ) {
708
- return new WP_Error( 'upload', sprintf( __( '"%s" (filetype %s) needs to be one of the following file types: %s', 'wp-job-manager' ), $args['file_label'], $file['type'], implode( ', ', array_keys( $args['allowed_mime_types'] ) ) ) );
709
  } else {
710
- return new WP_Error( 'upload', sprintf( __( 'Uploaded files need to be one of the following file types: %s', 'wp-job-manager' ), implode( ', ', array_keys( $args['allowed_mime_types'] ) ) ) );
711
  }
712
  } else {
713
  $upload = wp_handle_upload( $file, apply_filters( 'submit_job_wp_handle_upload_overrides', array( 'test_form' => false ) ) );
@@ -729,6 +749,45 @@ function job_manager_upload_file( $file, $args = array() ) {
729
  return $uploaded_file;
730
  }
731
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
732
  /**
733
  * Calculate and return the job expiry date
734
  * @param int $job_id
135
 
136
  do_action( 'before_get_job_listings', $query_args, $args );
137
 
138
+ // Cache results
139
+ if ( apply_filters( 'get_job_listings_cache_results', true ) ) {
140
+
141
+ if ( false === ( $result = get_transient( $query_args_hash ) ) ) {
142
+ $result = new WP_Query( $query_args );
143
+ set_transient( $query_args_hash, $result, DAY_IN_SECONDS * 30 );
144
+ }
145
+
146
+ }
147
+ else {
148
  $result = new WP_Query( $query_args );
 
149
  }
150
 
151
  do_action( 'after_get_job_listings', $query_args, $args );
554
  $r['pad_counts'] = true;
555
  }
556
 
557
+ // WPML & Polylang caching per language
558
+ if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
559
+ $r['lang'] = apply_filters( 'wpml_current_language', NULL );
560
+ } elseif ( function_exists( 'pll_current_language' ) ) {
561
+ $r['lang'] = pll_current_language();
562
+ }
563
+
564
  extract( $r );
565
 
566
  // Store in a transient to help sites with many cats
711
  $args = wp_parse_args( $args, array(
712
  'file_key' => '',
713
  'file_label' => '',
714
+ 'allowed_mime_types' => '',
715
  ) );
716
 
717
  $job_manager_upload = true;
718
  $job_manager_uploading_file = $args['file_key'];
719
  $uploaded_file = new stdClass();
720
+ if ( '' === $args['allowed_mime_types'] ) {
721
+ $allowed_mime_types = job_manager_get_allowed_mime_types( $job_manager_uploading_file );
722
+ } else {
723
+ $allowed_mime_types = $args['allowed_mime_types'];
724
+ }
725
 
726
+ if ( ! in_array( $file['type'], $allowed_mime_types ) ) {
727
  if ( $args['file_label'] ) {
728
+ return new WP_Error( 'upload', sprintf( __( '"%s" (filetype %s) needs to be one of the following file types: %s', 'wp-job-manager' ), $args['file_label'], $file['type'], implode( ', ', array_keys( $allowed_mime_types ) ) ) );
729
  } else {
730
+ return new WP_Error( 'upload', sprintf( __( 'Uploaded files need to be one of the following file types: %s', 'wp-job-manager' ), implode( ', ', array_keys( $allowed_mime_types ) ) ) );
731
  }
732
  } else {
733
  $upload = wp_handle_upload( $file, apply_filters( 'submit_job_wp_handle_upload_overrides', array( 'test_form' => false ) ) );
749
  return $uploaded_file;
750
  }
751
 
752
+ /**
753
+ * Allowed Mime types specifically for WPJM.
754
+ * @param string $field Field used.
755
+ * @return array Array of allowed mime types
756
+ */
757
+ function job_manager_get_allowed_mime_types( $field = '' ){
758
+ if ( 'company_logo' === $field ) {
759
+ $allowed_mime_types = array(
760
+ 'jpg|jpeg|jpe' => 'image/jpeg',
761
+ 'gif' => 'image/gif',
762
+ 'png' => 'image/png',
763
+ );
764
+ } else {
765
+ $allowed_mime_types = array(
766
+ 'jpg|jpeg|jpe' => 'image/jpeg',
767
+ 'gif' => 'image/gif',
768
+ 'png' => 'image/png',
769
+ 'pdf' => 'application/pdf',
770
+ 'doc' => 'application/msword',
771
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
772
+ );
773
+ }
774
+
775
+ /**
776
+ * Mime types to accept in uploaded files.
777
+ *
778
+ * Default is image, pdf, and doc(x) files.
779
+ *
780
+ * @since 1.25.1
781
+ *
782
+ * @param array {
783
+ * Array of allowed file extensions and mime types.
784
+ * Key is pipe-separated file extensions. Value is mime type.
785
+ * }
786
+ * @param string $field The field key for the upload.
787
+ */
788
+ return apply_filters( 'job_manager_mime_types', $allowed_mime_types, $field );
789
+ }
790
+
791
  /**
792
  * Calculate and return the job expiry date
793
  * @param int $job_id
wp-job-manager.php CHANGED
@@ -3,11 +3,11 @@
3
  * Plugin Name: WP Job Manager
4
  * Plugin URI: https://wpjobmanager.com/
5
  * Description: Manage job listings from the WordPress admin panel, and allow users to post jobs directly to your site.
6
- * Version: 1.25.0
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.1
10
- * Tested up to: 4.4
11
  * Text Domain: wp-job-manager
12
  * Domain Path: /languages/
13
  * License: GPL2+
3
  * Plugin Name: WP Job Manager
4
  * Plugin URI: https://wpjobmanager.com/
5
  * Description: Manage job listings from the WordPress admin panel, and allow users to post jobs directly to your site.
6
+ * Version: 1.25.1
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.1
10
+ * Tested up to: 4.6
11
  * Text Domain: wp-job-manager
12
  * Domain Path: /languages/
13
  * License: GPL2+