WP Job Manager - Version 1.34.1

Version Description

  • Templates Updated: job-submitted.php, job-dashboard.php.
  • Enhancement: Email notifications are sent separately if multiple recipients are listed.
  • Enhancement: Notices at end of job submission process are now displayed as a styled notice. (@DaveParkerRKD)
  • Fix: Resuming job listing submission at a particular step is now fixed.
  • Fix: Issue with some permalink structures and WPMU would cause issues on [jobs] page.
  • Dev: Adds the ability to block some jobs from being edited in the frontend.
  • Dev: Adds ability to force some email notifications to be enabled.
  • Dev: Allows email notifications to be sent immediately.
  • Dev: Adds ability for settings to reference other settings tabs.
  • Dev: Standardizes jQuery UI datepicker script IDs in frontend and backend. Plugins and themes should enqueue wp-job-manager-datepicker if they need jQuery UI datepicker.
Download this release

Release Info

Developer jakeom
Plugin Icon 128x128 WP Job Manager
Version 1.34.1
Comparing to
See all releases

Code changes from version 1.34.0 to 1.34.1

assets/css/frontend.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}.rp4wp-related-job_listing>ul,ul.job_listings{padding:0;margin:0;border-top:1px solid #eee}.rp4wp-related-job_listing>ul.loading,ul.job_listings.loading{min-height:96px;border-bottom:1px solid #eee;background:url(../images/ajax-loader.gif) no-repeat center 32px}.rp4wp-related-job_listing>ul li.job_listing,.rp4wp-related-job_listing>ul li.no_job_listings_found,ul.job_listings li.job_listing,ul.job_listings li.no_job_listings_found{list-style:none outside;padding:0;margin:0;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing.job_position_filled a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_filled a,ul.job_listings li.job_listing.job_position_filled a,ul.job_listings li.no_job_listings_found.job_position_filled a{opacity:.25}.rp4wp-related-job_listing>ul li.job_listing.no_job_listings_found,.rp4wp-related-job_listing>ul li.no_job_listings_found.no_job_listings_found,ul.job_listings li.job_listing.no_job_listings_found,ul.job_listings li.no_job_listings_found.no_job_listings_found{padding:1em;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing a,.rp4wp-related-job_listing>ul li.no_job_listings_found a,ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{display:block;padding:1em 1em 1em 2em;border:0;overflow:hidden;zoom:1;position:relative;line-height:1.5em;text-decoration:none}.rp4wp-related-job_listing>ul li.job_listing a:focus,.rp4wp-related-job_listing>ul li.job_listing a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found a:hover,ul.job_listings li.job_listing a:focus,ul.job_listings li.job_listing a:hover,ul.job_listings li.no_job_listings_found a:focus,ul.job_listings li.no_job_listings_found a:hover{background-color:#fcfcfc}.rp4wp-related-job_listing>ul li.job_listing a img.company_logo,.rp4wp-related-job_listing>ul li.no_job_listings_found a img.company_logo,ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{width:42px;height:42px;position:absolute;left:1em;float:left;margin-right:1em;vertical-align:middle;box-shadow:none}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.job_listing a ul.meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a ul.meta,ul.job_listings li.job_listing a div.location,ul.job_listings li.job_listing a div.position,ul.job_listings li.job_listing a ul.meta,ul.job_listings li.no_job_listings_found a div.location,ul.job_listings li.no_job_listings_found a div.position,ul.job_listings li.no_job_listings_found a ul.meta{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:55%;padding:0 0 0 42px;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a div.position h3,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position h3,ul.job_listings li.job_listing a div.position h3,ul.job_listings li.no_job_listings_found a div.position h3{margin:0;padding:0;line-height:inherit;font-size:inherit}.rp4wp-related-job_listing>ul li.job_listing a div.position .company,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company,ul.job_listings li.job_listing a div.position .company,ul.job_listings li.no_job_listings_found a div.position .company{color:#999}.rp4wp-related-job_listing>ul li.job_listing a div.position .company .tagline,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company .tagline,ul.job_listings li.job_listing a div.position .company .tagline,ul.job_listings li.no_job_listings_found a div.position .company .tagline{margin-left:.5em}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:left;text-align:left;width:25%;padding:0 0 0 1em;color:#999;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a .meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta,ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;text-align:right;width:20%;padding:0 0 0 1em;margin:0;line-height:1.5em;color:#999;list-style:none outside}.rp4wp-related-job_listing>ul li.job_listing a .meta li,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta li,ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{list-style:none outside;display:block;margin:0}.rp4wp-related-job_listing>ul li.job_listing a .meta .job-type,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta .job-type,ul.job_listings li.job_listing a .meta .job-type,ul.job_listings li.no_job_listings_found a .meta .job-type{font-weight:700}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a,ul.job_listings li.job_listing.job_position_featured a,ul.job_listings li.no_job_listings_found.job_position_featured a{background:#fefee5}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:hover,ul.job_listings li.job_listing.job_position_featured a:focus,ul.job_listings li.job_listing.job_position_featured a:hover,ul.job_listings li.no_job_listings_found.job_position_featured a:focus,ul.job_listings li.no_job_listings_found.job_position_featured a:hover{background-color:#fefed8}.widget ul.job_listings li.job_listing a{padding:1em 0}.widget ul.job_listings li.job_listing .image{float:left}.widget ul.job_listings li.job_listing .image img{left:0;position:relative}.widget ul.job_listings li.job_listing .content{overflow:hidden}.widget ul.job_listings li.job_listing .position{float:none;width:auto;padding:0}.widget ul.job_listings li.job_listing ul.meta{float:none;width:auto;padding:0;margin:0;text-align:left}.widget ul.job_listings li.job_listing ul.meta li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400}.widget ul.job_listings li.job_listing ul.meta li:after{padding:0 0 0 .5em;content:"\2023"}.widget ul.job_listings li.job_listing ul.meta li:last-child:after{content:''}.job-manager .job-type,.job-types .job-type,.job_listing .job-type{color:#f08d3c}.job-manager .full-time,.job-types .full-time,.job_listing .full-time{color:#90da36}.job-manager .part-time,.job-types .part-time,.job_listing .part-time{color:#f08d3c}.job-manager .temporary,.job-types .temporary,.job_listing .temporary{color:#d93674}.job-manager .freelance,.job-types .freelance,.job_listing .freelance{color:#39c}.job-manager .internship,.job-types .internship,.job_listing .internship{color:#6033cc}@media only screen and (max-width:767px){ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{padding:1em}ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{visibility:hidden}ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:60%;padding:0}ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:right;width:40%;line-height:2em;font-size:.75em;padding:0 0 0 1em;text-align:right}ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;width:40%;line-height:2em;font-size:.75em}ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{font-size:1em}}.twenty-eleven ul.job_listings li.job_listing,.twenty-eleven ul.job_listings li.no_job_listings_found{padding:0!important}.display-icon{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0}.job-manager-error,.job-manager-info,.job-manager-message{padding:1em 2em 1em 3.5em!important;margin:0 0 2em!important;position:relative;background-color:#fff;color:#666;border-top:3px solid #999;list-style:none outside!important;width:auto;zoom:1;box-shadow:0 1px 1px rgba(0,0,0,.2)}.job-manager-error:after,.job-manager-error:before,.job-manager-info:after,.job-manager-info:before,.job-manager-message:after,.job-manager-message:before{content:"";display:table}.job-manager-error:after,.job-manager-info:after,.job-manager-message:after{clear:both}.job-manager-error:before,.job-manager-info:before,.job-manager-message:before{content:"";font-family:sans-serif;display:inline-block;position:absolute;top:1em;left:1.5em}.job-manager-error li,.job-manager-info li,.job-manager-message li{list-style:none outside!important;padding-left:0!important;margin-left:0!important}.job-manager-error.job-manager-message,.job-manager-info.job-manager-message,.job-manager-message.job-manager-message{border-top-color:#8fae1b}.job-manager-error.job-manager-message:before,.job-manager-info.job-manager-message:before,.job-manager-message.job-manager-message:before{color:#8fae1b;content:"\2713"}.job-manager-error.job-manager-info,.job-manager-info.job-manager-info,.job-manager-message.job-manager-info{border-top-color:#1e85be}.job-manager-error.job-manager-info:before,.job-manager-info.job-manager-info:before,.job-manager-message.job-manager-info:before{color:#1e85be;content:"i";font-family:Times,Georgia,serif;font-style:italic}.job-manager-error.job-manager-error,.job-manager-info.job-manager-error,.job-manager-message.job-manager-error{border-top-color:#b81c23}.job-manager-error.job-manager-error:before,.job-manager-info.job-manager-error:before,.job-manager-message.job-manager-error:before{color:#b81c23;content:"\00d7";font-weight:700}.job-manager-form fieldset{margin:0 0 1em 0;padding:0 0 1em 0;line-height:2em;border:0;border-bottom:1px solid #eee;zoom:1}.job-manager-form fieldset:after,.job-manager-form fieldset:before{content:"";display:table}.job-manager-form fieldset:after{clear:both}.job-manager-form fieldset label{display:block;margin:0;width:29%;float:left;vertical-align:middle}.job-manager-form fieldset label small{opacity:.75;font-size:.83em}.job-manager-form fieldset div.field{width:70%;float:right;vertical-align:middle}.job-manager-form fieldset .wp-editor-container{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.job-manager-form fieldset .account-sign-in .button{margin-right:.5em}.job-manager-form fieldset .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}.job-manager-form fieldset abbr.required{color:red;font-weight:700;border:0}.job-manager-form fieldset input.input-text,.job-manager-form fieldset select,.job-manager-form fieldset textarea{margin:0;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-form fieldset small.description{opacity:.75;font-size:.83em;margin:1.2em 0 0 0;display:block;line-height:1.2em}.job-manager-form fieldset .job-manager-uploaded-files{display:table}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file{line-height:2em;font-style:italic;margin-bottom:1em;display:block}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview img{height:64px;margin:0;vertical-align:top}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview a{line-height:64px;display:inline-block;padding:0 0 0 1em}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-name{display:block}.job-manager-form .submit-job{padding:1em 0}.job-manager-form .job-manager-term-checklist{list-style:none outside;max-height:200px;overflow:auto;margin:0}.job-manager-form .job-manager-term-checklist li{list-style:none outside;margin:0;display:block;float:none}.job-manager-form .job-manager-term-checklist li label{width:auto;float:none}.job-manager-form .job-manager-term-checklist li li{margin:0 0 0 2em}.job-manager-form input[type=submit].disabled,.job-manager-form input[type=submit]:disabled{opacity:.5;cursor:not-allowed}.job-manager-form .spinner{background-repeat:no-repeat;background-size:20px 20px;display:inline-block;visibility:hidden;width:20px;height:20px;margin:0;vertical-align:middle}.job-manager-form .spinner.is-active{visibility:visible}div.job_listings{margin-bottom:1em}div.job_listings ul.job_listings{margin:0}.single_job_listing .company{position:relative;border:1px solid #eee;padding:1em;margin:0 0 2em;display:block;clear:both;min-height:3em;box-shadow:0 1px 1px rgba(0,0,0,.1);box-sizing:content-box}.single_job_listing .company img{width:3em;height:3em;position:absolute;left:1em;float:left;vertical-align:middle;box-shadow:none}.single_job_listing .company .name{margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em}.single_job_listing .company .name a{float:right;margin-left:1em}.single_job_listing .company .tagline{display:block;margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em;font-style:italic;color:#999}.single_job_listing .company .website:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e809'}.single_job_listing .company .company_twitter:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80a'}.single_job_listing .company .company_video{border-top:1px solid #eee;padding:1em 0 0;margin:1em 0 0 0;position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.single_job_listing .company .company_video embed,.single_job_listing .company .company_video iframe,.single_job_listing .company .company_video object{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;display:block}.single_job_listing .meta{list-style:none outside;padding:0;margin:0 0 1.5em;overflow:hidden;zoom:1;clear:both}.single_job_listing .meta li{margin:0 1em 0 0;padding:.5em;float:left;line-height:1em;color:#999}.single_job_listing .meta .job-type{color:#fff;background-color:#f08d3c}.single_job_listing .meta .full-time{background-color:#90da36}.single_job_listing .meta .part-time{background-color:#f08d3c}.single_job_listing .meta .temporary{background-color:#d93674}.single_job_listing .meta .freelance{background-color:#39c}.single_job_listing .meta .internship{background-color:#6033cc}.single_job_listing .meta .listing-expired,.single_job_listing .meta .position-filled{color:#b81c23}.single_job_listing .meta .location:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e81d'}.single_job_listing .meta .date-posted:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80f'}.single_job_listing .meta .listing-expired:before,.single_job_listing .meta .position-filled:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80e'}.single_job_listing .job_description{margin:0 0 1.5em}.job-manager-application-wrapper{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application,.single_job_listing .application{padding:0;margin:0 0 1em;overflow:hidden}.job-manager-application-wrapper .application .application_button,.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_button,.single_job_listing .application .application_details{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-application-wrapper .application .application_button,.single_job_listing .application .application_button{text-align:center;font-size:1.1em;line-height:1em;display:inline-block;margin:0 .5em 0 0;padding:.90909091em 2em;outline:0}.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_details{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application .application_details p,.single_job_listing .application .application_details p{margin:0 0 .75em}.job-manager-application-wrapper .application .application_details:before,.single_job_listing .application .application_details:before{content:"";position:absolute;margin:-10px 0 0 0;top:0;left:5em;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #eee}.job-manager-application-wrapper .application .application_details:after,.single_job_listing .application .application_details:after{content:"";position:absolute;margin:-9px 0 0 1px;left:5em;top:0;width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid #fff}.job_filters{background:#eee;zoom:1}.job_filters:after,.job_filters:before{content:"";display:table}.job_filters:after{clear:both}.job_filters .search_jobs{padding:1em;zoom:1}.job_filters .search_jobs:after,.job_filters .search_jobs:before{content:"";display:table}.job_filters .search_jobs:after{clear:both}.job_filters .search_jobs div{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_filters .search_jobs div label{display:none}.job_filters .search_jobs div.filter_first,.job_filters .search_jobs div.search_keywords{float:left;padding-right:.5em;width:50%}.job_filters .search_jobs div.filter_last,.job_filters .search_jobs div.search_location{float:right;padding-left:.5em;width:50%}.job_filters .search_jobs div.filter_wide,.job_filters .search_jobs div.search_categories{padding-top:.5em;clear:both;width:100%}.job_filters .search_jobs div.search_submit{padding-top:.5em}.job_filters .search_jobs div .showing_jobs a{padding:.25em}.job_filters .search_jobs div .showing_jobs a.active{background:#ddd;text-decoration:none}.job_filters .search_jobs input,.job_filters .search_jobs select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.job_filters .job_types{list-style:none outside;margin:0;padding:0;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5;zoom:1}.job_filters .job_types:after,.job_filters .job_types:before{content:"";display:table}.job_filters .job_types:after{clear:both}.job_filters .job_types li{margin:0;padding:.5em 1em;float:left;border-right:1px solid #eee}.job_filters .job_types li:last-child{border-right:0}.job_filters .showing_jobs{padding:.5em 1em;display:none;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5}.job_filters .showing_jobs a{float:right;padding-left:10px;border:0}div.job_listings .job-manager-pagination{text-align:center;display:block;padding:1em 0 1em 0;border-bottom:1px solid #eee;line-height:1}div.job_listings .load_previous{border-top:1px solid #eee}div.job_listings .load_more_jobs+ul.job_listings{border-top:0}div.job_listings .load_more_jobs{text-align:center;display:block;padding:1em 1em 1em 2em;border-bottom:1px solid #eee;font-weight:700}div.job_listings .load_more_jobs.loading{background:url(../images/ajax-loader.gif) no-repeat center}div.job_listings .load_more_jobs.loading strong{visibility:hidden}div.job_listings .load_more_jobs:focus,div.job_listings .load_more_jobs:hover{background-color:#fcfcfc;border-bottom:1px solid #eee}.job_listing_preview{padding:0 1em 1em;border:5px solid #eee}.single-job_listing .entry-header .attachment-post-thumbnail,.single-job_listing .job_listing.has-post-thumbnail .post-thumbnail{display:none}.entry-content .job_listing_preview_title,.job_listing_preview_title{padding:.5em 1em;vertical-align:middle;position:relative;background:#eee}.entry-content .job_listing_preview_title h2,.job_listing_preview_title h2{margin:0;clear:none}.entry-content .job_listing_preview_title .button,.job_listing_preview_title .button{float:right;margin-left:.25em}.job_summary_shortcode{border:1px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-align:center;position:relative;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_summary_shortcode.aligncenter{display:block;margin:2em auto 2em}.job_summary_shortcode.alignleft{float:left;margin:0 2em 2em 0}.job_summary_shortcode.alignright{float:right;margin:0 0 2em 2em}.job_summary_shortcode a{text-decoration:none;color:inherit}.job_summary_shortcode img{margin:0;padding:0;display:block;width:100%;-moz-border-radius:0;-webkit-border-radius:0;-moz-border-top-left-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-radius:0;border-top-left-radius:3px;border-top-right-radius:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.job_summary_shortcode .job_summary_content{padding:0 1em}.job_summary_shortcode .meta{font-style:italic;color:#777}.job_summary_shortcode .job-type{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;color:#fff;text-shadow:0 1px 0 rgba(255,255,255,.5);box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);position:absolute;top:0;right:0;padding:.5em;height:1em;width:auto;min-width:1em;font-size:1em;text-align:center;vertical-align:middle;line-height:1em;margin:-.5em -.5em 0 0}.job_summary_shortcode .job-type.full-time{background-color:#90da36}.job_summary_shortcode .job-type.part-time{background-color:#f08d3c}.job_summary_shortcode .job-type.temporary{background-color:#d93674}.job_summary_shortcode .job-type.freelance{background-color:#39c}.job_summary_shortcode .job-type.internship{background-color:#6033cc}#job-manager-job-dashboard .account-sign-in .button{margin-right:.5em}#job-manager-job-dashboard .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}#job-manager-job-dashboard table ul.job-dashboard-actions{margin:0;padding:0;visibility:hidden;font-size:.92em}#job-manager-job-dashboard table ul.job-dashboard-actions li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400;list-style:none outside}#job-manager-job-dashboard table ul.job-dashboard-actions li:after{padding:0 0 0 .5em;content:"\2023"}#job-manager-job-dashboard table ul.job-dashboard-actions li:last-child:after{content:''}#job-manager-job-dashboard table ul.job-dashboard-actions li .job-dashboard-action-delete{color:red}#job-manager-job-dashboard table tr:focus ul.job-dashboard-actions,#job-manager-job-dashboard table tr:hover ul.job-dashboard-actions{visibility:visible}#job-manager-job-dashboard table td,#job-manager-job-dashboard table th{padding:.5em 1em .5em 0}#job-manager-job-dashboard table .job_title small{color:#999}#job-manager-job-dashboard table .featured-job-icon: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}#job-manager-job-dashboard table .applications,#job-manager-job-dashboard table .expires,#job-manager-job-dashboard table .filled{text-align:center}#content nav.job-manager-pagination,nav.job-manager-pagination{text-align:center}#content nav.job-manager-pagination ul,nav.job-manager-pagination ul{display:inline-block;white-space:nowrap;padding:0;clear:both;border-left:1px solid #eee;margin:1px}#content nav.job-manager-pagination ul li,nav.job-manager-pagination ul li{border-right:1px solid #eee;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:0;margin:0;float:left;display:inline;overflow:hidden}#content nav.job-manager-pagination ul li a,#content nav.job-manager-pagination ul li span,nav.job-manager-pagination ul li a,nav.job-manager-pagination ul li span{margin:0;text-decoration:none;padding:0;line-height:1em;font-size:1em;font-weight:400;padding:.5em;min-width:1em;display:block;border:0}#content nav.job-manager-pagination ul li a:focus,#content nav.job-manager-pagination ul li a:hover,#content nav.job-manager-pagination ul li span.current,nav.job-manager-pagination ul li a:focus,nav.job-manager-pagination ul li a:hover,nav.job-manager-pagination ul li span.current{background:#eee;color:#888}.chosen-container{width:100%!important}.twenty-ten .chosen-choices,.twenty-ten .job_types{margin:0!important}.rtl .job-manager-form label{float:right}.rtl .job-manager-form div.field{float:left}.rtl .entry-content .job_listing_preview_title .button,.rtl .job_listing_preview_title .button{float:left}.rtl .single_job_listing .meta li{float:right;margin:0 0 0 1em}
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}.rp4wp-related-job_listing>ul,ul.job_listings{padding:0;margin:0;border-top:1px solid #eee}.rp4wp-related-job_listing>ul.loading,ul.job_listings.loading{min-height:96px;border-bottom:1px solid #eee;background:url(../images/ajax-loader.gif) no-repeat center 32px}.rp4wp-related-job_listing>ul li.job_listing,.rp4wp-related-job_listing>ul li.no_job_listings_found,ul.job_listings li.job_listing,ul.job_listings li.no_job_listings_found{list-style:none outside;padding:0;margin:0;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing.job_position_filled a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_filled a,ul.job_listings li.job_listing.job_position_filled a,ul.job_listings li.no_job_listings_found.job_position_filled a{opacity:.25}.rp4wp-related-job_listing>ul li.job_listing.no_job_listings_found,.rp4wp-related-job_listing>ul li.no_job_listings_found.no_job_listings_found,ul.job_listings li.job_listing.no_job_listings_found,ul.job_listings li.no_job_listings_found.no_job_listings_found{padding:1em;border-bottom:1px solid #eee}.rp4wp-related-job_listing>ul li.job_listing a,.rp4wp-related-job_listing>ul li.no_job_listings_found a,ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{display:block;padding:1em 1em 1em 2em;border:0;overflow:hidden;zoom:1;position:relative;line-height:1.5em;text-decoration:none}.rp4wp-related-job_listing>ul li.job_listing a:focus,.rp4wp-related-job_listing>ul li.job_listing a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found a:hover,ul.job_listings li.job_listing a:focus,ul.job_listings li.job_listing a:hover,ul.job_listings li.no_job_listings_found a:focus,ul.job_listings li.no_job_listings_found a:hover{background-color:#fcfcfc}.rp4wp-related-job_listing>ul li.job_listing a img.company_logo,.rp4wp-related-job_listing>ul li.no_job_listings_found a img.company_logo,ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{width:42px;height:42px;position:absolute;left:1em;float:left;margin-right:1em;vertical-align:middle;box-shadow:none}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.job_listing a ul.meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a ul.meta,ul.job_listings li.job_listing a div.location,ul.job_listings li.job_listing a div.position,ul.job_listings li.job_listing a ul.meta,ul.job_listings li.no_job_listings_found a div.location,ul.job_listings li.no_job_listings_found a div.position,ul.job_listings li.no_job_listings_found a ul.meta{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.rp4wp-related-job_listing>ul li.job_listing a div.position,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position,ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:55%;padding:0 0 0 42px;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a div.position h3,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position h3,ul.job_listings li.job_listing a div.position h3,ul.job_listings li.no_job_listings_found a div.position h3{margin:0;padding:0;line-height:inherit;font-size:inherit}.rp4wp-related-job_listing>ul li.job_listing a div.position .company,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company,ul.job_listings li.job_listing a div.position .company,ul.job_listings li.no_job_listings_found a div.position .company{color:#999}.rp4wp-related-job_listing>ul li.job_listing a div.position .company .tagline,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.position .company .tagline,ul.job_listings li.job_listing a div.position .company .tagline,ul.job_listings li.no_job_listings_found a div.position .company .tagline{margin-left:.5em}.rp4wp-related-job_listing>ul li.job_listing a div.location,.rp4wp-related-job_listing>ul li.no_job_listings_found a div.location,ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:left;text-align:left;width:25%;padding:0 0 0 1em;color:#999;line-height:1.5em}.rp4wp-related-job_listing>ul li.job_listing a .meta,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta,ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;text-align:right;width:20%;padding:0 0 0 1em;margin:0;line-height:1.5em;color:#999;list-style:none outside}.rp4wp-related-job_listing>ul li.job_listing a .meta li,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta li,ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{list-style:none outside;display:block;margin:0}.rp4wp-related-job_listing>ul li.job_listing a .meta .job-type,.rp4wp-related-job_listing>ul li.no_job_listings_found a .meta .job-type,ul.job_listings li.job_listing a .meta .job-type,ul.job_listings li.no_job_listings_found a .meta .job-type{font-weight:700}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a,ul.job_listings li.job_listing.job_position_featured a,ul.job_listings li.no_job_listings_found.job_position_featured a{background:#fefee5}.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.job_listing.job_position_featured a:hover,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:focus,.rp4wp-related-job_listing>ul li.no_job_listings_found.job_position_featured a:hover,ul.job_listings li.job_listing.job_position_featured a:focus,ul.job_listings li.job_listing.job_position_featured a:hover,ul.job_listings li.no_job_listings_found.job_position_featured a:focus,ul.job_listings li.no_job_listings_found.job_position_featured a:hover{background-color:#fefed8}.widget ul.job_listings li.job_listing a{padding:1em 0}.widget ul.job_listings li.job_listing .image{float:left}.widget ul.job_listings li.job_listing .image img{left:0;position:relative}.widget ul.job_listings li.job_listing .content{overflow:hidden}.widget ul.job_listings li.job_listing .position{float:none;width:auto;padding:0}.widget ul.job_listings li.job_listing ul.meta{float:none;width:auto;padding:0;margin:0;text-align:left}.widget ul.job_listings li.job_listing ul.meta li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400}.widget ul.job_listings li.job_listing ul.meta li:after{padding:0 0 0 .5em;content:"\2023"}.widget ul.job_listings li.job_listing ul.meta li:last-child:after{content:''}.job-manager .job-type,.job-types .job-type,.job_listing .job-type{color:#f08d3c}.job-manager .full-time,.job-types .full-time,.job_listing .full-time{color:#90da36}.job-manager .part-time,.job-types .part-time,.job_listing .part-time{color:#f08d3c}.job-manager .temporary,.job-types .temporary,.job_listing .temporary{color:#d93674}.job-manager .freelance,.job-types .freelance,.job_listing .freelance{color:#39c}.job-manager .internship,.job-types .internship,.job_listing .internship{color:#6033cc}@media only screen and (max-width:767px){ul.job_listings li.job_listing a,ul.job_listings li.no_job_listings_found a{padding:1em}ul.job_listings li.job_listing a img.company_logo,ul.job_listings li.no_job_listings_found a img.company_logo{visibility:hidden}ul.job_listings li.job_listing a div.position,ul.job_listings li.no_job_listings_found a div.position{float:left;width:60%;padding:0}ul.job_listings li.job_listing a div.location,ul.job_listings li.no_job_listings_found a div.location{float:right;width:40%;line-height:2em;font-size:.75em;padding:0 0 0 1em;text-align:right}ul.job_listings li.job_listing a .meta,ul.job_listings li.no_job_listings_found a .meta{float:right;width:40%;line-height:2em;font-size:.75em}ul.job_listings li.job_listing a .meta li,ul.job_listings li.no_job_listings_found a .meta li{font-size:1em}}.twenty-eleven ul.job_listings li.job_listing,.twenty-eleven ul.job_listings li.no_job_listings_found{padding:0!important}.display-icon{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0}.job-manager-error,.job-manager-info,.job-manager-message{padding:1em 2em 1em 3.5em!important;margin:0 0 2em!important;position:relative;background-color:#fff;color:#666;border-top:3px solid #999;list-style:none outside!important;width:auto;zoom:1;box-shadow:0 1px 1px rgba(0,0,0,.2)}.job-manager-error:after,.job-manager-error:before,.job-manager-info:after,.job-manager-info:before,.job-manager-message:after,.job-manager-message:before{content:"";display:table}.job-manager-error:after,.job-manager-info:after,.job-manager-message:after{clear:both}.job-manager-error:before,.job-manager-info:before,.job-manager-message:before{content:"";font-family:sans-serif;display:inline-block;position:absolute;top:1em;left:1.5em}.job-manager-error li,.job-manager-info li,.job-manager-message li{list-style:none outside!important;padding-left:0!important;margin-left:0!important}.job-manager-error.job-manager-message,.job-manager-info.job-manager-message,.job-manager-message.job-manager-message{border-top-color:#8fae1b}.job-manager-error.job-manager-message:before,.job-manager-info.job-manager-message:before,.job-manager-message.job-manager-message:before{color:#8fae1b;content:"\2713"}.job-manager-error.job-manager-info,.job-manager-info.job-manager-info,.job-manager-message.job-manager-info{border-top-color:#1e85be}.job-manager-error.job-manager-info:before,.job-manager-info.job-manager-info:before,.job-manager-message.job-manager-info:before{color:#1e85be;content:"i";font-family:Times,Georgia,serif;font-style:italic}.job-manager-error.job-manager-error,.job-manager-info.job-manager-error,.job-manager-message.job-manager-error{border-top-color:#b81c23}.job-manager-error.job-manager-error:before,.job-manager-info.job-manager-error:before,.job-manager-message.job-manager-error:before{color:#b81c23;content:"\00d7";font-weight:700}.job-manager-form fieldset{margin:0 0 1em 0;padding:0 0 1em 0;line-height:2em;border:0;border-bottom:1px solid #eee;zoom:1}.job-manager-form fieldset:after,.job-manager-form fieldset:before{content:"";display:table}.job-manager-form fieldset:after{clear:both}.job-manager-form fieldset label{display:block;margin:0;width:29%;float:left;vertical-align:middle}.job-manager-form fieldset label small{opacity:.75;font-size:.83em}.job-manager-form fieldset div.field{width:70%;float:right;vertical-align:middle}.job-manager-form fieldset .wp-editor-container{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.job-manager-form fieldset .account-sign-in .button{margin-right:.5em}.job-manager-form fieldset .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}.job-manager-form fieldset abbr.required{color:red;font-weight:700;border:0}.job-manager-form fieldset input.input-date,.job-manager-form fieldset input.input-text,.job-manager-form fieldset select,.job-manager-form fieldset textarea{margin:0;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-form fieldset small.description{opacity:.75;font-size:.83em;margin:1.2em 0 0 0;display:block;line-height:1.2em}.job-manager-form fieldset .job-manager-uploaded-files{display:table}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file{line-height:2em;font-style:italic;margin-bottom:1em;display:block}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview img{height:64px;margin:0;vertical-align:top}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-preview a{line-height:64px;display:inline-block;padding:0 0 0 1em}.job-manager-form fieldset .job-manager-uploaded-files .job-manager-uploaded-file .job-manager-uploaded-file-name{display:block}.job-manager-form .submit-job{padding:1em 0}.job-manager-form .job-manager-term-checklist{list-style:none outside;max-height:200px;overflow:auto;margin:0}.job-manager-form .job-manager-term-checklist li{list-style:none outside;margin:0;display:block;float:none}.job-manager-form .job-manager-term-checklist li label{width:auto;float:none}.job-manager-form .job-manager-term-checklist li li{margin:0 0 0 2em}.job-manager-form input[type=submit].disabled,.job-manager-form input[type=submit]:disabled{opacity:.5;cursor:not-allowed}.job-manager-form .spinner{background-repeat:no-repeat;background-size:20px 20px;display:inline-block;visibility:hidden;width:20px;height:20px;margin:0;vertical-align:middle}.job-manager-form .spinner.is-active{visibility:visible}div.job_listings{margin-bottom:1em}div.job_listings ul.job_listings{margin:0}.single_job_listing .company{position:relative;border:1px solid #eee;padding:1em;margin:0 0 2em;display:block;clear:both;min-height:3em;box-shadow:0 1px 1px rgba(0,0,0,.1);box-sizing:content-box}.single_job_listing .company img{width:3em;height:3em;position:absolute;left:1em;float:left;vertical-align:middle;box-shadow:none}.single_job_listing .company .name{margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em}.single_job_listing .company .name a{float:right;margin-left:1em}.single_job_listing .company .tagline{display:block;margin:0 0 0 3em;padding:0 0 0 1em;line-height:1.5em;font-style:italic;color:#999}.single_job_listing .company .website:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e809'}.single_job_listing .company .company_twitter:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80a'}.single_job_listing .company .company_video{border-top:1px solid #eee;padding:1em 0 0;margin:1em 0 0 0;position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.single_job_listing .company .company_video embed,.single_job_listing .company .company_video iframe,.single_job_listing .company .company_video object{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;display:block}.single_job_listing .meta{list-style:none outside;padding:0;margin:0 0 1.5em;overflow:hidden;zoom:1;clear:both}.single_job_listing .meta li{margin:0 1em 0 0;padding:.5em;float:left;line-height:1em;color:#999}.single_job_listing .meta .job-type{color:#fff;background-color:#f08d3c}.single_job_listing .meta .full-time{background-color:#90da36}.single_job_listing .meta .part-time{background-color:#f08d3c}.single_job_listing .meta .temporary{background-color:#d93674}.single_job_listing .meta .freelance{background-color:#39c}.single_job_listing .meta .internship{background-color:#6033cc}.single_job_listing .meta .listing-expired,.single_job_listing .meta .position-filled{color:#b81c23}.single_job_listing .meta .location:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e81d'}.single_job_listing .meta .date-posted:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80f'}.single_job_listing .meta .listing-expired:before,.single_job_listing .meta .position-filled:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e80e'}.single_job_listing .job_description{margin:0 0 1.5em}.job-manager-application-wrapper{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application,.single_job_listing .application{padding:0;margin:0 0 1em;overflow:hidden}.job-manager-application-wrapper .application .application_button,.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_button,.single_job_listing .application .application_details{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job-manager-application-wrapper .application .application_button,.single_job_listing .application .application_button{text-align:center;font-size:1.1em;line-height:1em;display:inline-block;margin:0 .5em 0 0;padding:.90909091em 2em;outline:0}.job-manager-application-wrapper .application .application_details,.single_job_listing .application .application_details{clear:both;border:1px solid #eee;padding:.75em 1em 0;margin:1em 0;line-height:1.5em;display:block;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.1)}.job-manager-application-wrapper .application .application_details p,.single_job_listing .application .application_details p{margin:0 0 .75em}.job-manager-application-wrapper .application .application_details:before,.single_job_listing .application .application_details:before{content:"";position:absolute;margin:-10px 0 0 0;top:0;left:5em;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #eee}.job-manager-application-wrapper .application .application_details:after,.single_job_listing .application .application_details:after{content:"";position:absolute;margin:-9px 0 0 1px;left:5em;top:0;width:0;height:0;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid #fff}.job_filters{background:#eee;zoom:1}.job_filters:after,.job_filters:before{content:"";display:table}.job_filters:after{clear:both}.job_filters .search_jobs{padding:1em;zoom:1}.job_filters .search_jobs:after,.job_filters .search_jobs:before{content:"";display:table}.job_filters .search_jobs:after{clear:both}.job_filters .search_jobs div{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_filters .search_jobs div label{display:none}.job_filters .search_jobs div.filter_first,.job_filters .search_jobs div.search_keywords{float:left;padding-right:.5em;width:50%}.job_filters .search_jobs div.filter_last,.job_filters .search_jobs div.search_location{float:right;padding-left:.5em;width:50%}.job_filters .search_jobs div.filter_wide,.job_filters .search_jobs div.search_categories{padding-top:.5em;clear:both;width:100%}.job_filters .search_jobs div.search_submit{padding-top:.5em}.job_filters .search_jobs div .showing_jobs a{padding:.25em}.job_filters .search_jobs div .showing_jobs a.active{background:#ddd;text-decoration:none}.job_filters .search_jobs input,.job_filters .search_jobs select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.job_filters .job_types{list-style:none outside;margin:0;padding:0;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5;zoom:1}.job_filters .job_types:after,.job_filters .job_types:before{content:"";display:table}.job_filters .job_types:after{clear:both}.job_filters .job_types li{margin:0;padding:.5em 1em;float:left;border-right:1px solid #eee}.job_filters .job_types li:last-child{border-right:0}.job_filters .showing_jobs{padding:.5em 1em;display:none;font-size:.83em;background:#f9f9f9;border-top:1px solid #e5e5e5}.job_filters .showing_jobs a{float:right;padding-left:10px;border:0}div.job_listings .job-manager-pagination{text-align:center;display:block;padding:1em 0 1em 0;border-bottom:1px solid #eee;line-height:1}div.job_listings .load_previous{border-top:1px solid #eee}div.job_listings .load_more_jobs+ul.job_listings{border-top:0}div.job_listings .load_more_jobs{text-align:center;display:block;padding:1em 1em 1em 2em;border-bottom:1px solid #eee;font-weight:700}div.job_listings .load_more_jobs.loading{background:url(../images/ajax-loader.gif) no-repeat center}div.job_listings .load_more_jobs.loading strong{visibility:hidden}div.job_listings .load_more_jobs:focus,div.job_listings .load_more_jobs:hover{background-color:#fcfcfc;border-bottom:1px solid #eee}.job_listing_preview{padding:0 1em 1em;border:5px solid #eee}.single-job_listing .entry-header .attachment-post-thumbnail,.single-job_listing .job_listing.has-post-thumbnail .post-thumbnail{display:none}.entry-content .job_listing_preview_title,.job_listing_preview_title{padding:.5em 1em;vertical-align:middle;position:relative;background:#eee}.entry-content .job_listing_preview_title h2,.job_listing_preview_title h2{margin:0;clear:none}.entry-content .job_listing_preview_title .button,.job_listing_preview_title .button{float:right;margin-left:.25em}.job_summary_shortcode{border:1px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;text-align:center;position:relative;box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.job_summary_shortcode.aligncenter{display:block;margin:2em auto 2em}.job_summary_shortcode.alignleft{float:left;margin:0 2em 2em 0}.job_summary_shortcode.alignright{float:right;margin:0 0 2em 2em}.job_summary_shortcode a{text-decoration:none;color:inherit}.job_summary_shortcode img{margin:0;padding:0;display:block;width:100%;-moz-border-radius:0;-webkit-border-radius:0;-moz-border-top-left-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-radius:0;border-top-left-radius:3px;border-top-right-radius:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}.job_summary_shortcode .job_summary_content{padding:0 1em}.job_summary_shortcode .meta{font-style:italic;color:#777}.job_summary_shortcode .job-type{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;color:#fff;text-shadow:0 1px 0 rgba(255,255,255,.5);box-shadow:0 2px 4px rgba(0,0,0,.1),inset 0 1px 0 rgba(255,255,255,.4);position:absolute;top:0;right:0;padding:.5em;height:1em;width:auto;min-width:1em;font-size:1em;text-align:center;vertical-align:middle;line-height:1em;margin:-.5em -.5em 0 0}.job_summary_shortcode .job-type.full-time{background-color:#90da36}.job_summary_shortcode .job-type.part-time{background-color:#f08d3c}.job_summary_shortcode .job-type.temporary{background-color:#d93674}.job_summary_shortcode .job-type.freelance{background-color:#39c}.job_summary_shortcode .job-type.internship{background-color:#6033cc}#job-manager-job-dashboard .account-sign-in .button{margin-right:.5em}#job-manager-job-dashboard .account-sign-in .button:before{display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-family:job-manager!important;text-decoration:none;font-weight:400;font-style:normal;vertical-align:top;font-size:16px;margin:0 2px 0 0;content:'\e808'}#job-manager-job-dashboard table ul.job-dashboard-actions{margin:0;padding:0;visibility:hidden;font-size:.92em}#job-manager-job-dashboard table ul.job-dashboard-actions li{float:none;display:inline;padding:0;margin:0 .5em 0 0;font-weight:400;list-style:none outside}#job-manager-job-dashboard table ul.job-dashboard-actions li:after{padding:0 0 0 .5em;content:"\2023"}#job-manager-job-dashboard table ul.job-dashboard-actions li:last-child:after{content:''}#job-manager-job-dashboard table ul.job-dashboard-actions li .job-dashboard-action-delete{color:red}#job-manager-job-dashboard table tr:focus ul.job-dashboard-actions,#job-manager-job-dashboard table tr:hover ul.job-dashboard-actions{visibility:visible}#job-manager-job-dashboard table td,#job-manager-job-dashboard table th{padding:.5em 1em .5em 0}#job-manager-job-dashboard table .job_title small{color:#999}#job-manager-job-dashboard table .featured-job-icon: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}#job-manager-job-dashboard table .applications,#job-manager-job-dashboard table .expires,#job-manager-job-dashboard table .filled{text-align:center}#content nav.job-manager-pagination,nav.job-manager-pagination{text-align:center}#content nav.job-manager-pagination ul,nav.job-manager-pagination ul{display:inline-block;white-space:nowrap;padding:0;clear:both;border-left:1px solid #eee;margin:1px}#content nav.job-manager-pagination ul li,nav.job-manager-pagination ul li{border-right:1px solid #eee;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:0;margin:0;float:left;display:inline;overflow:hidden}#content nav.job-manager-pagination ul li a,#content nav.job-manager-pagination ul li span,nav.job-manager-pagination ul li a,nav.job-manager-pagination ul li span{margin:0;text-decoration:none;padding:0;line-height:1em;font-size:1em;font-weight:400;padding:.5em;min-width:1em;display:block;border:0}#content nav.job-manager-pagination ul li a:focus,#content nav.job-manager-pagination ul li a:hover,#content nav.job-manager-pagination ul li span.current,nav.job-manager-pagination ul li a:focus,nav.job-manager-pagination ul li a:hover,nav.job-manager-pagination ul li span.current{background:#eee;color:#888}.chosen-container{width:100%!important}.twenty-ten .chosen-choices,.twenty-ten .job_types{margin:0!important}.rtl .job-manager-form label{float:right}.rtl .job-manager-form div.field{float:left}.rtl .entry-content .job_listing_preview_title .button,.rtl .job_listing_preview_title .button{float:left}.rtl .single_job_listing .meta li{float:right;margin:0 0 0 1em}
changelog.txt CHANGED
@@ -1,3 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
  = 1.34.0 =
2
  * Templates Updated: `content-job_listing.php`, `job-submitted.php`.
3
  * Enhancement: Add support for pre-selecting categories in `[jobs]` using category slugs in query string (e.g. `/jobs?search_category=developer,pm,senior`).
1
+ = 1.34.1 =
2
+ * Templates Updated: `job-submitted.php`, `job-dashboard.php`.
3
+ * Enhancement: Email notifications are sent separately if multiple recipients are listed.
4
+ * Enhancement: Notices at end of job submission process are now displayed as a styled notice. (@DaveParkerRKD)
5
+ * Fix: Resuming job listing submission at a particular step is now fixed.
6
+ * Fix: Issue with some permalink structures and WPMU would cause issues on `[jobs]` page.
7
+ * Dev: Adds the ability to block some jobs from being edited in the frontend.
8
+ * Dev: Adds ability to force some email notifications to be enabled.
9
+ * Dev: Allows email notifications to be sent immediately.
10
+ * Dev: Adds ability for settings to reference other settings tabs.
11
+ * Dev: Standardizes jQuery UI datepicker script IDs in frontend and backend. Plugins and themes should enqueue `wp-job-manager-datepicker` if they need jQuery UI datepicker.
12
+
13
  = 1.34.0 =
14
  * Templates Updated: `content-job_listing.php`, `job-submitted.php`.
15
  * Enhancement: Add support for pre-selecting categories in `[jobs]` using category slugs in query string (e.g. `/jobs?search_category=developer,pm,senior`).
includes/abstracts/abstract-wp-job-manager-email.php CHANGED
@@ -209,6 +209,15 @@ abstract class WP_Job_Manager_Email {
209
  return true;
210
  }
211
 
 
 
 
 
 
 
 
 
 
212
  /**
213
  * Returns the args that the email notification was sent with.
214
  *
209
  return true;
210
  }
211
 
212
+ /**
213
+ * Force the email notification to be enabled or disabled.
214
+ *
215
+ * @return bool|null True to force enabled; False to force disabled; Null to not force a value.
216
+ */
217
+ public static function get_enabled_force_value() {
218
+ return null;
219
+ }
220
+
221
  /**
222
  * Returns the args that the email notification was sent with.
223
  *
includes/admin/class-wp-job-manager-admin.php CHANGED
@@ -93,8 +93,8 @@ class WP_Job_Manager_Admin {
93
  wp_enqueue_style( 'jquery-ui' );
94
  wp_enqueue_style( 'select2' );
95
  wp_enqueue_style( 'job_manager_admin_css', JOB_MANAGER_PLUGIN_URL . '/assets/css/admin.css', [], JOB_MANAGER_VERSION );
 
96
  wp_register_script( 'jquery-tiptip', JOB_MANAGER_PLUGIN_URL . '/assets/js/jquery-tiptip/jquery.tipTip.min.js', [ 'jquery' ], JOB_MANAGER_VERSION, true );
97
- wp_enqueue_script( 'job_manager_datepicker_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/datepicker.min.js', [ 'jquery', 'jquery-ui-datepicker' ], JOB_MANAGER_VERSION, true );
98
  wp_enqueue_script( 'job_manager_admin_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/admin.min.js', [ 'jquery', 'jquery-tiptip', 'select2' ], JOB_MANAGER_VERSION, true );
99
 
100
  wp_localize_script(
@@ -113,17 +113,6 @@ class WP_Job_Manager_Admin {
113
  'search_users_nonce' => wp_create_nonce( 'search-users' ),
114
  ]
115
  );
116
-
117
- if ( ! function_exists( 'wp_localize_jquery_ui_datepicker' ) || ! has_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker' ) ) {
118
- wp_localize_script(
119
- 'job_manager_datepicker_js',
120
- 'job_manager_datepicker',
121
- [
122
- /* translators: jQuery date format, see http://api.jqueryui.com/datepicker/#utility-formatDate */
123
- 'date_format' => _x( 'yy-mm-dd', 'Date format for jQuery datepicker.', 'wp-job-manager' ),
124
- ]
125
- );
126
- }
127
  }
128
 
129
  wp_enqueue_style( 'job_manager_admin_menu_css', JOB_MANAGER_PLUGIN_URL . '/assets/css/menu.css', [], JOB_MANAGER_VERSION );
93
  wp_enqueue_style( 'jquery-ui' );
94
  wp_enqueue_style( 'select2' );
95
  wp_enqueue_style( 'job_manager_admin_css', JOB_MANAGER_PLUGIN_URL . '/assets/css/admin.css', [], JOB_MANAGER_VERSION );
96
+ wp_enqueue_script( 'wp-job-manager-datepicker' );
97
  wp_register_script( 'jquery-tiptip', JOB_MANAGER_PLUGIN_URL . '/assets/js/jquery-tiptip/jquery.tipTip.min.js', [ 'jquery' ], JOB_MANAGER_VERSION, true );
 
98
  wp_enqueue_script( 'job_manager_admin_js', JOB_MANAGER_PLUGIN_URL . '/assets/js/admin.min.js', [ 'jquery', 'jquery-tiptip', 'select2' ], JOB_MANAGER_VERSION, true );
99
 
100
  wp_localize_script(
113
  'search_users_nonce' => wp_create_nonce( 'search-users' ),
114
  ]
115
  );
 
 
 
 
 
 
 
 
 
 
 
116
  }
117
 
118
  wp_enqueue_style( 'job_manager_admin_menu_css', JOB_MANAGER_PLUGIN_URL . '/assets/css/menu.css', [], JOB_MANAGER_VERSION );
includes/admin/class-wp-job-manager-settings.php CHANGED
@@ -444,6 +444,13 @@ class WP_Job_Manager_Settings {
444
  </form>
445
  </div>
446
  <script type="text/javascript">
 
 
 
 
 
 
 
447
  jQuery('.nav-tab-wrapper a').click(function() {
448
  if ( '#' !== jQuery(this).attr( 'href' ).substr( 0, 1 ) ) {
449
  return false;
@@ -509,9 +516,12 @@ class WP_Job_Manager_Settings {
509
  * @param string $ignored_placeholder
510
  */
511
  protected function input_checkbox( $option, $attributes, $value, $ignored_placeholder ) {
 
 
 
512
  ?>
513
  <label>
514
- <input type="hidden" name="<?php echo esc_attr( $option['name'] ); ?>" value="0" />
515
  <input
516
  id="setting-<?php echo esc_attr( $option['name'] ); ?>"
517
  name="<?php echo esc_attr( $option['name'] ); ?>"
@@ -816,6 +826,18 @@ class WP_Job_Manager_Settings {
816
  $enable_option['name'] = $option['name'] . '[' . $enable_option['name'] . ']';
817
  $enable_option['type'] = 'checkbox';
818
  $enable_option['attributes'] = [ 'class="sub-settings-expander"' ];
 
 
 
 
 
 
 
 
 
 
 
 
819
  $this->input_checkbox( $enable_option, $enable_option['attributes'], $values[ $option['enable_field']['name'] ], null );
820
 
821
  echo '<div class="sub-settings-expandable">';
444
  </form>
445
  </div>
446
  <script type="text/javascript">
447
+ jQuery('.nav-internal').click(function (e) {
448
+ e.preventDefault();
449
+ jQuery('.nav-tab-wrapper a[href="' + jQuery(this).attr('href') + '"]').click();
450
+
451
+ return false;
452
+ });
453
+
454
  jQuery('.nav-tab-wrapper a').click(function() {
455
  if ( '#' !== jQuery(this).attr( 'href' ).substr( 0, 1 ) ) {
456
  return false;
516
  * @param string $ignored_placeholder
517
  */
518
  protected function input_checkbox( $option, $attributes, $value, $ignored_placeholder ) {
519
+ if ( ! isset( $option['hidden_value'] ) ) {
520
+ $option['hidden_value'] = '0';
521
+ }
522
  ?>
523
  <label>
524
+ <input type="hidden" name="<?php echo esc_attr( $option['name'] ); ?>" value="<?php echo esc_attr( $option['hidden_value'] ); ?>" />
525
  <input
526
  id="setting-<?php echo esc_attr( $option['name'] ); ?>"
527
  name="<?php echo esc_attr( $option['name'] ); ?>"
826
  $enable_option['name'] = $option['name'] . '[' . $enable_option['name'] . ']';
827
  $enable_option['type'] = 'checkbox';
828
  $enable_option['attributes'] = [ 'class="sub-settings-expander"' ];
829
+
830
+ if ( isset( $enable_option['force_value'] ) && is_bool( $enable_option['force_value'] ) ) {
831
+ if ( true === $enable_option['force_value'] ) {
832
+ $values[ $option['enable_field']['name'] ] = '1';
833
+ } else {
834
+ $values[ $option['enable_field']['name'] ] = '0';
835
+ }
836
+
837
+ $enable_option['hidden_value'] = $values[ $option['enable_field']['name'] ];
838
+ $enable_option['attributes'][] = 'disabled="disabled"';
839
+ }
840
+
841
  $this->input_checkbox( $enable_option, $enable_option['attributes'], $values[ $option['enable_field']['name'] ], null );
842
 
843
  echo '<div class="sub-settings-expandable">';
includes/class-wp-job-manager-ajax.php CHANGED
@@ -78,8 +78,9 @@ class WP_Job_Manager_Ajax {
78
  } elseif ( get_option( 'permalink_structure' ) ) {
79
  $endpoint = trailingslashit( home_url( '/jm-ajax/' . $request . '/', 'relative' ) );
80
  } else {
81
- $endpoint = add_query_arg( 'jm-ajax', $request, trailingslashit( home_url( '', 'relative' ) ) );
82
  }
 
83
  return esc_url_raw( $endpoint );
84
  }
85
 
78
  } elseif ( get_option( 'permalink_structure' ) ) {
79
  $endpoint = trailingslashit( home_url( '/jm-ajax/' . $request . '/', 'relative' ) );
80
  } else {
81
+ $endpoint = add_query_arg( 'jm-ajax', $request, home_url( '/', 'relative' ) );
82
  }
83
+
84
  return esc_url_raw( $endpoint );
85
  }
86
 
includes/class-wp-job-manager-email-notifications.php CHANGED
@@ -99,6 +99,38 @@ final class WP_Job_Manager_Email_Notifications {
99
  }
100
  }
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  /**
103
  * Initialize if necessary.
104
  */
@@ -416,7 +448,7 @@ final class WP_Job_Manager_Email_Notifications {
416
  $email_settings = [];
417
 
418
  foreach ( $email_notifications as $email_notification_key => $email_class ) {
419
- $email_notification_context = call_user_func( [ $email_class, 'get_context' ] );
420
  if ( $context !== $email_notification_context ) {
421
  continue;
422
  }
@@ -424,11 +456,12 @@ final class WP_Job_Manager_Email_Notifications {
424
  $email_settings[] = [
425
  'type' => 'multi_enable_expand',
426
  'class' => 'email-setting-row no-separator',
427
- 'name' => self::EMAIL_SETTING_PREFIX . call_user_func( [ $email_class, 'get_key' ] ),
428
  'enable_field' => [
429
- 'name' => self::EMAIL_SETTING_ENABLED,
430
- 'cb_label' => call_user_func( [ $email_class, 'get_name' ] ),
431
- 'desc' => call_user_func( [ $email_class, 'get_description' ] ),
 
432
  ],
433
  'label' => false,
434
  'std' => self::get_email_setting_defaults( $email_notification_key ),
@@ -456,10 +489,16 @@ final class WP_Job_Manager_Email_Notifications {
456
  * @return bool
457
  */
458
  public static function is_email_notification_enabled( $email_notification_key ) {
459
- $settings = self::get_email_settings( $email_notification_key );
 
460
 
 
461
  $is_email_notification_enabled = ! empty( $settings[ self::EMAIL_SETTING_ENABLED ] );
462
 
 
 
 
 
463
  /**
464
  * Filter whether an notification email is enabled.
465
  *
@@ -474,10 +513,14 @@ final class WP_Job_Manager_Email_Notifications {
474
  /**
475
  * Checks if we should send emails using plain text.
476
  *
477
- * @param string $email_notification_key
 
 
 
 
478
  * @return bool
479
  */
480
- public static function send_as_plain_text( $email_notification_key ) {
481
  $settings = self::get_email_settings( $email_notification_key );
482
 
483
  $send_as_plain_text = ! empty( $settings[ self::EMAIL_SETTING_PLAIN_TEXT ] );
@@ -487,10 +530,11 @@ final class WP_Job_Manager_Email_Notifications {
487
  *
488
  * @since 1.31.0
489
  *
490
- * @param bool $send_as_plain_text
491
- * @param string $email_notification_key
 
492
  */
493
- return apply_filters( 'job_manager_email_send_as_plain_text', $send_as_plain_text, $email_notification_key );
494
  }
495
 
496
  /**
@@ -725,34 +769,58 @@ final class WP_Job_Manager_Email_Notifications {
725
  $args[ $field ] = apply_filters( "job_manager_email_{$email_notification_key}_{$field}", $email->$method(), $email );
726
  }
727
 
728
- $headers = is_array( $args['headers'] ) ? $args['headers'] : [];
729
-
730
- if ( ! empty( $args['from'] ) ) {
731
- $headers[] = 'From: ' . $args['from'];
732
  }
733
 
734
- if ( ! self::send_as_plain_text( $email_notification_key ) ) {
735
- $headers[] = 'Content-Type: text/html';
736
- }
 
737
 
738
- $content = self::get_email_content( $email_notification_key, $args );
 
 
 
 
 
 
 
 
739
 
740
- /**
741
- * Allows for short-circuiting the actual sending of email notifications.
742
- *
743
- * @since 1.31.0
744
- *
745
- * @param bool $do_send_notification True if we should send the notification.
746
- * @param WP_Job_Manager_Email $email Email notification object.
747
- * @param array $args Email arguments for generating email.
748
- * @param string $content Email content.
749
- * @param array $headers Email headers.
750
- * @param
751
- */
752
- if ( ! apply_filters( 'job_manager_email_do_send_notification', true, $email, $args, $content, $headers ) ) {
753
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  }
755
- return wp_mail( $args['to'], $args['subject'], $content, $headers, $args['attachments'] );
 
756
  }
757
 
758
  /**
@@ -760,12 +828,12 @@ final class WP_Job_Manager_Email_Notifications {
760
  *
761
  * @access private
762
  *
763
- * @param string $email_notification_key
764
- * @param array $args
765
  * @return string
766
  */
767
  private static function get_email_content( $email_notification_key, $args ) {
768
- $plain_text = self::send_as_plain_text( $email_notification_key );
769
 
770
  ob_start();
771
 
99
  }
100
  }
101
 
102
+ /**
103
+ * Send email notifications for a specific email now and return the status. Not usually necessary but useful if you
104
+ * need to check to make sure a notification was sent.
105
+ *
106
+ * @param string $email_key Email key to send notifications for.
107
+ * @return bool True if an email notification was sent.
108
+ */
109
+ public static function send_notifications( $email_key ) {
110
+ $email_sent = false;
111
+ $email_notifications = self::get_email_notifications( true );
112
+ foreach ( self::$deferred_notifications as $index => $email ) {
113
+ if (
114
+ ! is_string( $email[0] )
115
+ || ! isset( $email_notifications[ $email[0] ] )
116
+ || $email[0] !== $email_key
117
+ ) {
118
+ continue;
119
+ }
120
+
121
+ $email_class = $email_notifications[ $email[0] ];
122
+ $email_args = is_array( $email[1] ) ? $email[1] : [];
123
+
124
+ if ( self::send_email( $email[0], new $email_class( $email_args, self::get_email_settings( $email_key ) ) ) ) {
125
+ $email_sent = true;
126
+ }
127
+
128
+ unset( self::$deferred_notifications[ $index ] );
129
+ }
130
+
131
+ return $email_sent;
132
+ }
133
+
134
  /**
135
  * Initialize if necessary.
136
  */
448
  $email_settings = [];
449
 
450
  foreach ( $email_notifications as $email_notification_key => $email_class ) {
451
+ $email_notification_context = $email_class::get_context();
452
  if ( $context !== $email_notification_context ) {
453
  continue;
454
  }
456
  $email_settings[] = [
457
  'type' => 'multi_enable_expand',
458
  'class' => 'email-setting-row no-separator',
459
+ 'name' => self::EMAIL_SETTING_PREFIX . $email_class::get_key(),
460
  'enable_field' => [
461
+ 'name' => self::EMAIL_SETTING_ENABLED,
462
+ 'cb_label' => $email_class::get_name(),
463
+ 'desc' => $email_class::get_description(),
464
+ 'force_value' => $email_class::get_enabled_force_value(),
465
  ],
466
  'label' => false,
467
  'std' => self::get_email_setting_defaults( $email_notification_key ),
489
  * @return bool
490
  */
491
  public static function is_email_notification_enabled( $email_notification_key ) {
492
+ $settings = self::get_email_settings( $email_notification_key );
493
+ $email_class = self::get_email_class( $email_notification_key );
494
 
495
+ $enabled_force_value = $email_class ? $email_class::get_enabled_force_value() : null;
496
  $is_email_notification_enabled = ! empty( $settings[ self::EMAIL_SETTING_ENABLED ] );
497
 
498
+ if ( is_bool( $enabled_force_value ) ) {
499
+ $is_email_notification_enabled = $enabled_force_value;
500
+ }
501
+
502
  /**
503
  * Filter whether an notification email is enabled.
504
  *
513
  /**
514
  * Checks if we should send emails using plain text.
515
  *
516
+ * @since 1.31.0
517
+ * @since 1.34.1 Added arguments to allow for per-recipient customization.
518
+ *
519
+ * @param string $email_notification_key Unique ID for this email notification.
520
+ * @param array $args Email arguments.
521
  * @return bool
522
  */
523
+ public static function send_as_plain_text( $email_notification_key, $args = [] ) {
524
  $settings = self::get_email_settings( $email_notification_key );
525
 
526
  $send_as_plain_text = ! empty( $settings[ self::EMAIL_SETTING_PLAIN_TEXT ] );
530
  *
531
  * @since 1.31.0
532
  *
533
+ * @param bool $send_as_plain_text Whether to send this email as plain text.
534
+ * @param string $email_notification_key Unique ID for this email notification.
535
+ * @param array $args Email arguments.
536
  */
537
+ return apply_filters( 'job_manager_email_send_as_plain_text', $send_as_plain_text, $email_notification_key, $args );
538
  }
539
 
540
  /**
769
  $args[ $field ] = apply_filters( "job_manager_email_{$email_notification_key}_{$field}", $email->$method(), $email );
770
  }
771
 
772
+ $args['headers'] = is_array( $args['headers'] ) ? $args['headers'] : [];
773
+ $send_to = $args['to'];
774
+ if ( ! is_array( $send_to ) ) {
775
+ $send_to = array_filter( array_map( 'sanitize_email', preg_split( '/[,|;]\s?/', $send_to ) ) );
776
  }
777
 
778
+ $sent_count = 0;
779
+ foreach ( $send_to as $to_email ) {
780
+ $args['to'] = $to_email;
781
+ $content = self::get_email_content( $email_notification_key, $args );
782
 
783
+ /**
784
+ * Filter all email arguments for job manager notifications.
785
+ *
786
+ * @since 1.34.1
787
+ *
788
+ * @param mixed $email_field_value Value to be filtered.
789
+ * @param WP_Job_Manager_Email $email Email notification object.
790
+ */
791
+ $args = apply_filters( "job_manager_email_{$email_notification_key}_args", $args, $email );
792
 
793
+ $headers = $args['headers'];
794
+ if ( ! empty( $args['from'] ) ) {
795
+ $headers[] = 'From: ' . $args['from'];
796
+ }
797
+
798
+ if ( ! self::send_as_plain_text( $email_notification_key, $args ) ) {
799
+ $headers[] = 'Content-Type: text/html';
800
+ }
801
+
802
+ /**
803
+ * Allows for short-circuiting the actual sending of email notifications.
804
+ *
805
+ * @since 1.31.0
806
+ *
807
+ * @param bool $do_send_notification True if we should send the notification.
808
+ * @param WP_Job_Manager_Email $email Email notification object.
809
+ * @param array $args Email arguments for generating email.
810
+ * @param string $content Email content.
811
+ * @param array $headers Email headers.
812
+ * @param
813
+ */
814
+ if ( ! apply_filters( 'job_manager_email_do_send_notification', true, $email, $args, $content, $headers ) ) {
815
+ continue;
816
+ }
817
+
818
+ if ( wp_mail( $to_email, $args['subject'], $content, $headers, $args['attachments'] ) ) {
819
+ $sent_count++;
820
+ }
821
  }
822
+
823
+ return $sent_count > 0;
824
  }
825
 
826
  /**
828
  *
829
  * @access private
830
  *
831
+ * @param string $email_notification_key Unique email notification key.
832
+ * @param array $args Arguments passed for generating email.
833
  * @return string
834
  */
835
  private static function get_email_content( $email_notification_key, $args ) {
836
+ $plain_text = self::send_as_plain_text( $email_notification_key, $args );
837
 
838
  ob_start();
839
 
includes/class-wp-job-manager-post-types.php CHANGED
@@ -868,6 +868,36 @@ class WP_Job_Manager_Post_Types {
868
  return $data;
869
  }
870
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
871
  /**
872
  * Returns the name of the job RSS feed.
873
  *
868
  return $data;
869
  }
870
 
871
+ /**
872
+ * Check if a job is editable.
873
+ *
874
+ * @since 1.34.1
875
+ *
876
+ * @param int $job_id Job ID to check.
877
+ * @return bool
878
+ */
879
+ public static function job_is_editable( $job_id ) {
880
+ $job_is_editable = true;
881
+ $post_status = get_post_status( $job_id );
882
+
883
+ if (
884
+ ( 'publish' === $post_status && ! wpjm_user_can_edit_published_submissions() )
885
+ || ( 'publish' !== $post_status && ! job_manager_user_can_edit_pending_submissions() )
886
+ ) {
887
+ $job_is_editable = false;
888
+ }
889
+
890
+ /**
891
+ * Allows filtering on whether a job can be edited after it has gone past the `preview` stage.
892
+ *
893
+ * @since 1.34.1
894
+ *
895
+ * @param bool $job_is_editable If the job is editable.
896
+ * @param int $job_id Job ID to check.
897
+ */
898
+ return apply_filters( 'job_manager_job_is_editable', $job_is_editable, $job_id );
899
+ }
900
+
901
  /**
902
  * Returns the name of the job RSS feed.
903
  *
includes/class-wp-job-manager.php CHANGED
@@ -86,6 +86,7 @@ class WP_Job_Manager {
86
  add_action( 'widgets_init', [ $this, 'widgets_init' ] );
87
  add_action( 'wp_loaded', [ $this, 'register_shared_assets' ] );
88
  add_action( 'wp_enqueue_scripts', [ $this, 'frontend_scripts' ] );
 
89
  add_action( 'admin_init', [ $this, 'updater' ] );
90
  add_action( 'admin_init', [ $this, 'add_privacy_policy_content' ] );
91
  add_action( 'wp_logout', [ $this, 'cleanup_job_posting_cookies' ] );
@@ -251,14 +252,32 @@ class WP_Job_Manager {
251
 
252
  $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
253
  wp_register_style( 'jquery-ui', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.min.css', [], $jquery_version );
 
 
 
254
  }
255
 
256
  /**
257
  * Registers select2 assets when needed.
258
  */
259
  public static function register_select2_assets() {
260
- wp_register_script( 'select2', JOB_MANAGER_PLUGIN_URL . '/assets/js/select2/select2.full.min.js', [ 'jquery' ], '4.0.5', false );
261
- wp_register_style( 'select2', JOB_MANAGER_PLUGIN_URL . '/assets/js/select2/select2.min.css', [], '4.0.5' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  }
263
 
264
  /**
86
  add_action( 'widgets_init', [ $this, 'widgets_init' ] );
87
  add_action( 'wp_loaded', [ $this, 'register_shared_assets' ] );
88
  add_action( 'wp_enqueue_scripts', [ $this, 'frontend_scripts' ] );
89
+ add_action( 'wp_footer', [ $this, 'maybe_localize_jquery_ui_datepicker' ], 1 );
90
  add_action( 'admin_init', [ $this, 'updater' ] );
91
  add_action( 'admin_init', [ $this, 'add_privacy_policy_content' ] );
92
  add_action( 'wp_logout', [ $this, 'cleanup_job_posting_cookies' ] );
252
 
253
  $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
254
  wp_register_style( 'jquery-ui', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.min.css', [], $jquery_version );
255
+
256
+ // Register datepicker JS. It will be enqueued if needed when a date field is used.
257
+ wp_register_script( 'wp-job-manager-datepicker', JOB_MANAGER_PLUGIN_URL . '/assets/js/datepicker.min.js', [ 'jquery', 'jquery-ui-datepicker' ], JOB_MANAGER_VERSION, true );
258
  }
259
 
260
  /**
261
  * Registers select2 assets when needed.
262
  */
263
  public static function register_select2_assets() {
264
+ wp_register_script( 'select2', JOB_MANAGER_PLUGIN_URL . '/assets/js/select2/select2.full.min.js', [ 'jquery' ], '4.0.10', false );
265
+ wp_register_style( 'select2', JOB_MANAGER_PLUGIN_URL . '/assets/js/select2/select2.min.css', [], '4.0.10' );
266
+ }
267
+
268
+ /**
269
+ * WordPress localizes this script late in `wp_head`. We sometimes enqueue the datepicker later on.
270
+ *
271
+ * @access private
272
+ * @since 1.34.1
273
+ */
274
+ public function maybe_localize_jquery_ui_datepicker() {
275
+ // Check if this data has already been added. Prevents outputting localization data multiple times.
276
+ if ( wp_scripts()->get_data( 'jquery-ui-datepicker', 'after' ) ) {
277
+ return;
278
+ }
279
+
280
+ wp_localize_jquery_ui_datepicker();
281
  }
282
 
283
  /**
includes/forms/class-wp-job-manager-form-edit-job.php CHANGED
@@ -73,11 +73,7 @@ class WP_Job_Manager_Form_Edit_Job extends WP_Job_Manager_Form_Submit_Job {
73
  }
74
 
75
  if ( ! empty( $this->job_id ) ) {
76
- $post_status = get_post_status( $this->job_id );
77
- if (
78
- ( 'publish' === $post_status && ! wpjm_user_can_edit_published_submissions() )
79
- || ( 'publish' !== $post_status && ! job_manager_user_can_edit_pending_submissions() )
80
- ) {
81
  $this->job_id = 0;
82
  }
83
  }
73
  }
74
 
75
  if ( ! empty( $this->job_id ) ) {
76
+ if ( ! WP_Job_Manager_Post_Types::job_is_editable( $this->job_id ) ) {
 
 
 
 
77
  $this->job_id = 0;
78
  }
79
  }
includes/forms/class-wp-job-manager-form-submit-job.php CHANGED
@@ -104,9 +104,9 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
104
  // phpcs:disable WordPress.Security.NonceVerification.Missing, WordPress.Security.NonceVerification.Recommended -- Check happens later when possible. Input is used safely.
105
  // Get step/job.
106
  if ( isset( $_POST['step'] ) ) {
107
- $this->step = is_numeric( $_POST['step'] ) ? max( absint( $_POST['step'] ), 0 ) : array_search( intval( $_POST['step'] ), array_keys( $this->steps ), true );
108
  } elseif ( ! empty( $_GET['step'] ) ) {
109
- $this->step = is_numeric( $_GET['step'] ) ? max( absint( $_GET['step'] ), 0 ) : array_search( intval( $_GET['step'] ), array_keys( $this->steps ), true );
110
  }
111
 
112
  $this->job_id = ! empty( $_REQUEST['job_id'] ) ? absint( $_REQUEST['job_id'] ) : 0;
@@ -465,32 +465,16 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
465
  protected function enqueue_job_form_assets() {
466
  wp_enqueue_script( 'wp-job-manager-job-submission' );
467
  wp_enqueue_style( 'wp-job-manager-job-submission', JOB_MANAGER_PLUGIN_URL . '/assets/css/job-submission.css', [], JOB_MANAGER_VERSION );
468
-
469
- // Register datepicker JS. It will be enqueued if needed when a date.
470
- // field is rendered.
471
- wp_register_script( 'wp-job-manager-datepicker', JOB_MANAGER_PLUGIN_URL . '/assets/js/datepicker.min.js', [ 'jquery', 'jquery-ui-datepicker' ], JOB_MANAGER_VERSION, true );
472
-
473
- // Localize scripts after the fields are rendered.
474
- add_action( 'submit_job_form_end', [ $this, 'localize_job_form_scripts' ] );
475
  }
476
 
477
  /**
478
  * Localize frontend scripts that have been enqueued. This should be called
479
  * after the fields are rendered, in case some of them enqueue new scripts.
 
 
480
  */
481
  public function localize_job_form_scripts() {
482
- if ( function_exists( 'wp_localize_jquery_ui_datepicker' ) ) {
483
- wp_localize_jquery_ui_datepicker();
484
- } else {
485
- wp_localize_script(
486
- 'wp-job-manager-datepicker',
487
- 'job_manager_datepicker',
488
- [
489
- /* translators: jQuery date format, see http://api.jqueryui.com/datepicker/#utility-formatDate */
490
- 'date_format' => _x( 'yy-mm-dd', 'Date format for jQuery datepicker.', 'wp-job-manager' ),
491
- ]
492
- );
493
- }
494
  }
495
 
496
  /**
104
  // phpcs:disable WordPress.Security.NonceVerification.Missing, WordPress.Security.NonceVerification.Recommended -- Check happens later when possible. Input is used safely.
105
  // Get step/job.
106
  if ( isset( $_POST['step'] ) ) {
107
+ $this->step = is_numeric( $_POST['step'] ) ? max( absint( $_POST['step'] ), 0 ) : array_search( sanitize_text_field( $_POST['step'] ), array_keys( $this->steps ), true );
108
  } elseif ( ! empty( $_GET['step'] ) ) {
109
+ $this->step = is_numeric( $_GET['step'] ) ? max( absint( $_GET['step'] ), 0 ) : array_search( sanitize_text_field( $_GET['step'] ), array_keys( $this->steps ), true );
110
  }
111
 
112
  $this->job_id = ! empty( $_REQUEST['job_id'] ) ? absint( $_REQUEST['job_id'] ) : 0;
465
  protected function enqueue_job_form_assets() {
466
  wp_enqueue_script( 'wp-job-manager-job-submission' );
467
  wp_enqueue_style( 'wp-job-manager-job-submission', JOB_MANAGER_PLUGIN_URL . '/assets/css/job-submission.css', [], JOB_MANAGER_VERSION );
 
 
 
 
 
 
 
468
  }
469
 
470
  /**
471
  * Localize frontend scripts that have been enqueued. This should be called
472
  * after the fields are rendered, in case some of them enqueue new scripts.
473
+ *
474
+ * @deprecated 1.34.1 No longer needed.
475
  */
476
  public function localize_job_form_scripts() {
477
+ _deprecated_function( __METHOD__, '1.34.1' );
 
 
 
 
 
 
 
 
 
 
 
478
  }
479
 
480
  /**
languages/wp-job-manager.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GPL2+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP Job Manager 1.34.0\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Automattic/WP-Job-Manager/issues\n"
7
- "POT-Creation-Date: 2019-10-01 09:58:35+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -31,7 +31,7 @@ msgid "\"%s\" check failed. Please try again."
31
  msgstr ""
32
 
33
  #: includes/admin/class-wp-job-manager-addons.php:125
34
- #: includes/admin/class-wp-job-manager-admin.php:139
35
  #: includes/admin/views/html-admin-page-addons.php:12
36
  msgid "WP Job Manager Add-ons"
37
  msgstr ""
@@ -49,11 +49,11 @@ msgstr ""
49
  msgid "You don&#8217;t have permission to do this."
50
  msgstr ""
51
 
52
- #: includes/admin/class-wp-job-manager-admin.php:136
53
  msgid "Settings"
54
  msgstr ""
55
 
56
- #: includes/admin/class-wp-job-manager-admin.php:139
57
  msgid "Add-ons"
58
  msgstr ""
59
 
@@ -200,8 +200,8 @@ msgid "Type"
200
  msgstr ""
201
 
202
  #: includes/admin/class-wp-job-manager-cpt.php:497
203
- #: includes/class-wp-job-manager-email-notifications.php:238
204
- #: includes/class-wp-job-manager-post-types.php:1224
205
  #: includes/forms/class-wp-job-manager-form-submit-job.php:213
206
  #: includes/widgets/class-wp-job-manager-widget-recent-jobs.php:46
207
  #: templates/job-filters.php:35 templates/job-filters.php:36
@@ -712,11 +712,11 @@ msgstr ""
712
  msgid "Save Changes"
713
  msgstr ""
714
 
715
- #: includes/admin/class-wp-job-manager-settings.php:633
716
  msgid "--no page--"
717
  msgstr ""
718
 
719
- #: includes/admin/class-wp-job-manager-settings.php:639
720
  msgid "Select a page&hellip;"
721
  msgstr ""
722
 
@@ -732,7 +732,7 @@ msgid "Employment Type"
732
  msgstr ""
733
 
734
  #: includes/admin/class-wp-job-manager-writepanels.php:64
735
- #: includes/class-wp-job-manager-email-notifications.php:292
736
  msgid "Posted by"
737
  msgstr ""
738
 
@@ -759,7 +759,7 @@ msgid "Add file"
759
  msgstr ""
760
 
761
  #: includes/admin/class-wp-job-manager-writepanels.php:471
762
- #: includes/class-wp-job-manager-ajax.php:418
763
  #. translators: Used in user select. %1$s is the user's display name; #%2$s is
764
  #. the user ID; %3$s is the user email.
765
  msgid "%1$s (#%2$s – %3$s)"
@@ -991,14 +991,14 @@ msgstr ""
991
  msgid "Help other users on the forums"
992
  msgstr ""
993
 
994
- #: includes/class-wp-job-manager-ajax.php:185
995
  #. translators: Placeholder %d is the number of found search results.
996
  msgid "Search completed. Found %d matching record."
997
  msgid_plural "Search completed. Found %d matching records."
998
  msgstr[0] ""
999
  msgstr[1] ""
1000
 
1001
- #: includes/class-wp-job-manager-ajax.php:283
1002
  msgid "You must be logged in to upload files using this method."
1003
  msgstr ""
1004
 
@@ -1012,27 +1012,27 @@ msgid "Company Logo"
1012
  msgstr ""
1013
 
1014
  #: includes/class-wp-job-manager-data-exporter.php:52
1015
- #: includes/class-wp-job-manager-post-types.php:1243
1016
  msgid "Company Name"
1017
  msgstr ""
1018
 
1019
  #: includes/class-wp-job-manager-data-exporter.php:53
1020
- #: includes/class-wp-job-manager-post-types.php:1251
1021
  msgid "Company Website"
1022
  msgstr ""
1023
 
1024
  #: includes/class-wp-job-manager-data-exporter.php:54
1025
- #: includes/class-wp-job-manager-post-types.php:1260
1026
  msgid "Company Tagline"
1027
  msgstr ""
1028
 
1029
  #: includes/class-wp-job-manager-data-exporter.php:55
1030
- #: includes/class-wp-job-manager-post-types.php:1268
1031
  msgid "Company Twitter"
1032
  msgstr ""
1033
 
1034
  #: includes/class-wp-job-manager-data-exporter.php:56
1035
- #: includes/class-wp-job-manager-post-types.php:1276
1036
  msgid "Company Video"
1037
  msgstr ""
1038
 
@@ -1068,52 +1068,52 @@ msgstr ""
1068
  msgid "WordPress Update Required"
1069
  msgstr ""
1070
 
1071
- #: includes/class-wp-job-manager-email-notifications.php:227
1072
  msgid "Job title"
1073
  msgstr ""
1074
 
1075
- #: includes/class-wp-job-manager-email-notifications.php:247
1076
  #: includes/class-wp-job-manager-post-types.php:218
1077
  #: includes/forms/class-wp-job-manager-form-submit-job.php:221
1078
  msgid "Job type"
1079
  msgstr ""
1080
 
1081
- #: includes/class-wp-job-manager-email-notifications.php:257
1082
  #: includes/class-wp-job-manager-post-types.php:154
1083
  #: includes/forms/class-wp-job-manager-form-submit-job.php:230
1084
  msgid "Job category"
1085
  msgstr ""
1086
 
1087
- #: includes/class-wp-job-manager-email-notifications.php:266
1088
  #: includes/forms/class-wp-job-manager-form-submit-job.php:255
1089
  msgid "Company name"
1090
  msgstr ""
1091
 
1092
- #: includes/class-wp-job-manager-email-notifications.php:274
1093
  msgid "Company website"
1094
  msgstr ""
1095
 
1096
- #: includes/class-wp-job-manager-email-notifications.php:283
1097
  msgid "Listing expires"
1098
  msgstr ""
1099
 
1100
- #: includes/class-wp-job-manager-email-notifications.php:441
1101
  msgid "Email Notifications"
1102
  msgstr ""
1103
 
1104
- #: includes/class-wp-job-manager-email-notifications.php:444
1105
  msgid "Select the email notifications to enable."
1106
  msgstr ""
1107
 
1108
- #: includes/class-wp-job-manager-email-notifications.php:586
1109
  msgid "Format"
1110
  msgstr ""
1111
 
1112
- #: includes/class-wp-job-manager-email-notifications.php:589
1113
  msgid "Send plain text email"
1114
  msgstr ""
1115
 
1116
- #: includes/class-wp-job-manager-email-notifications.php:590
1117
  msgid "Send rich text email"
1118
  msgstr ""
1119
 
@@ -1301,78 +1301,78 @@ msgid_plural "Preview <span class=\"count\">(%s)</span>"
1301
  msgstr[0] ""
1302
  msgstr[1] ""
1303
 
1304
- #: includes/class-wp-job-manager-post-types.php:1211
1305
  #: includes/forms/class-wp-job-manager-form-submit-job.php:190
1306
  msgid "Application email/URL"
1307
  msgstr ""
1308
 
1309
- #: includes/class-wp-job-manager-post-types.php:1212
1310
  #: includes/forms/class-wp-job-manager-form-submit-job.php:191
1311
  msgid "Enter an email address or website URL"
1312
  msgstr ""
1313
 
1314
- #: includes/class-wp-job-manager-post-types.php:1215
1315
  #: includes/forms/class-wp-job-manager-form-submit-job.php:180
1316
  msgid "Application email"
1317
  msgstr ""
1318
 
1319
- #: includes/class-wp-job-manager-post-types.php:1216
1320
  #: includes/forms/class-wp-job-manager-form-submit-job.php:181
1321
  msgid "you@example.com"
1322
  msgstr ""
1323
 
1324
- #: includes/class-wp-job-manager-post-types.php:1218
1325
  #: includes/forms/class-wp-job-manager-form-submit-job.php:185
1326
  msgid "Application URL"
1327
  msgstr ""
1328
 
1329
- #: includes/class-wp-job-manager-post-types.php:1219
1330
  #: includes/forms/class-wp-job-manager-form-submit-job.php:186
1331
  msgid "https://"
1332
  msgstr ""
1333
 
1334
- #: includes/class-wp-job-manager-post-types.php:1225
1335
  #: includes/forms/class-wp-job-manager-form-submit-job.php:217
1336
  msgid "e.g. \"London\""
1337
  msgstr ""
1338
 
1339
- #: includes/class-wp-job-manager-post-types.php:1226
1340
  msgid "Leave this blank if the location is not important."
1341
  msgstr ""
1342
 
1343
- #: includes/class-wp-job-manager-post-types.php:1235
1344
  msgid ""
1345
  "This field is required for the \"application\" area to appear beneath the "
1346
  "listing."
1347
  msgstr ""
1348
 
1349
- #: includes/class-wp-job-manager-post-types.php:1261
1350
  msgid "Brief description about the company"
1351
  msgstr ""
1352
 
1353
- #: includes/class-wp-job-manager-post-types.php:1277
1354
  msgid "URL to the company video"
1355
  msgstr ""
1356
 
1357
- #: includes/class-wp-job-manager-post-types.php:1286
1358
  msgid "Position Filled"
1359
  msgstr ""
1360
 
1361
- #: includes/class-wp-job-manager-post-types.php:1292
1362
  msgid "Filled listings will no longer accept applications."
1363
  msgstr ""
1364
 
1365
- #: includes/class-wp-job-manager-post-types.php:1295
1366
  msgid "Featured Listing"
1367
  msgstr ""
1368
 
1369
- #: includes/class-wp-job-manager-post-types.php:1297
1370
  msgid ""
1371
  "Featured listings will be sticky during searches, and can be styled "
1372
  "differently."
1373
  msgstr ""
1374
 
1375
- #: includes/class-wp-job-manager-post-types.php:1305
1376
  msgid "Listing Expiry Date"
1377
  msgstr ""
1378
 
@@ -1452,7 +1452,7 @@ msgstr ""
1452
  msgid "Enable Usage Tracking"
1453
  msgstr ""
1454
 
1455
- #: includes/class-wp-job-manager.php:138
1456
  #. translators: Placeholders %1$s and %2$s are the names of the two cookies
1457
  #. used in WP Job Manager.
1458
  msgid ""
@@ -1461,26 +1461,26 @@ msgid ""
1461
  "\t\t\t\thave started but have not completed: %1$s and %2$s"
1462
  msgstr ""
1463
 
1464
- #: includes/class-wp-job-manager.php:276
1465
  msgid "Load previous listings"
1466
  msgstr ""
1467
 
1468
- #: includes/class-wp-job-manager.php:403
1469
  msgid "Invalid file type. Accepted types:"
1470
  msgstr ""
1471
 
1472
- #: includes/class-wp-job-manager.php:420
1473
  #: includes/forms/class-wp-job-manager-form-submit-job.php:406
1474
  #. translators: Placeholder %d is the number of files to that users are limited
1475
  #. to.
1476
  msgid "You are only allowed to upload a maximum of %d files."
1477
  msgstr ""
1478
 
1479
- #: includes/class-wp-job-manager.php:428
1480
  msgid "Are you sure you want to delete this listing?"
1481
  msgstr ""
1482
 
1483
- #: includes/class-wp-job-manager.php:436
1484
  msgid "This field is required."
1485
  msgstr ""
1486
 
@@ -1543,27 +1543,27 @@ msgstr ""
1543
  msgid "days"
1544
  msgstr ""
1545
 
1546
- #: includes/forms/class-wp-job-manager-form-edit-job.php:108
1547
  msgid "Invalid listing"
1548
  msgstr ""
1549
 
1550
- #: includes/forms/class-wp-job-manager-form-edit-job.php:140
1551
  msgid "Save changes"
1552
  msgstr ""
1553
 
1554
- #: includes/forms/class-wp-job-manager-form-edit-job.php:145
1555
  msgid "Submit changes for approval"
1556
  msgstr ""
1557
 
1558
- #: includes/forms/class-wp-job-manager-form-edit-job.php:199
1559
  msgid "Your changes have been saved."
1560
  msgstr ""
1561
 
1562
- #: includes/forms/class-wp-job-manager-form-edit-job.php:205
1563
  msgid "View &rarr;"
1564
  msgstr ""
1565
 
1566
- #: includes/forms/class-wp-job-manager-form-edit-job.php:207
1567
  msgid ""
1568
  "Your changes have been submitted and your listing will be visible again "
1569
  "once approved."
@@ -1574,7 +1574,7 @@ msgid "Submit Details"
1574
  msgstr ""
1575
 
1576
  #: includes/forms/class-wp-job-manager-form-submit-job.php:88
1577
- #: includes/forms/class-wp-job-manager-form-submit-job.php:578
1578
  #: templates/job-preview.php:30
1579
  msgid "Preview"
1580
  msgstr ""
@@ -1675,36 +1675,36 @@ msgstr ""
1675
  msgid "Please enter a valid application email address or URL"
1676
  msgstr ""
1677
 
1678
- #: includes/forms/class-wp-job-manager-form-submit-job.php:637
1679
  msgid "Please enter a username."
1680
  msgstr ""
1681
 
1682
- #: includes/forms/class-wp-job-manager-form-submit-job.php:641
1683
  msgid "Please enter a password."
1684
  msgstr ""
1685
 
1686
- #: includes/forms/class-wp-job-manager-form-submit-job.php:645
1687
  msgid "Please enter your email address."
1688
  msgstr ""
1689
 
1690
- #: includes/forms/class-wp-job-manager-form-submit-job.php:651
1691
  msgid "Passwords must match."
1692
  msgstr ""
1693
 
1694
- #: includes/forms/class-wp-job-manager-form-submit-job.php:657
1695
  #. translators: Placeholder %s is the password hint.
1696
  msgid "Invalid Password: %s"
1697
  msgstr ""
1698
 
1699
- #: includes/forms/class-wp-job-manager-form-submit-job.php:659
1700
  msgid "Password is not valid."
1701
  msgstr ""
1702
 
1703
- #: includes/forms/class-wp-job-manager-form-submit-job.php:682
1704
  msgid "You must be signed in to post a new listing."
1705
  msgstr ""
1706
 
1707
- #: includes/forms/class-wp-job-manager-form-submit-job.php:705
1708
  #. translators: placeholder is the URL to the job dashboard page.
1709
  msgid ""
1710
  "Draft was saved. Job listing drafts can be resumed from the <a "
@@ -2293,28 +2293,20 @@ msgctxt "user selection"
2293
  msgid "Searching&hellip;"
2294
  msgstr ""
2295
 
2296
- #: includes/admin/class-wp-job-manager-admin.php:123
2297
- #: includes/forms/class-wp-job-manager-form-submit-job.php:490
2298
- #. translators: jQuery date format, see
2299
- #. http:api.jqueryui.com/datepicker/#utility-formatDate
2300
- msgctxt "Date format for jQuery datepicker."
2301
- msgid "yy-mm-dd"
2302
- msgstr ""
2303
-
2304
  #: includes/admin/class-wp-job-manager-permalink-settings.php:108
2305
- #: includes/class-wp-job-manager-post-types.php:946
2306
  msgctxt "Job permalink - resave permalinks after changing this"
2307
  msgid "job"
2308
  msgstr ""
2309
 
2310
  #: includes/admin/class-wp-job-manager-permalink-settings.php:117
2311
- #: includes/class-wp-job-manager-post-types.php:947
2312
  msgctxt "Job category slug - resave permalinks after changing this"
2313
  msgid "job-category"
2314
  msgstr ""
2315
 
2316
  #: includes/admin/class-wp-job-manager-permalink-settings.php:126
2317
- #: includes/class-wp-job-manager-post-types.php:948
2318
  msgctxt "Job type slug - resave permalinks after changing this"
2319
  msgid "job-type"
2320
  msgstr ""
@@ -2366,7 +2358,7 @@ msgctxt "post status"
2366
  msgid "Active"
2367
  msgstr ""
2368
 
2369
- #: includes/class-wp-job-manager-post-types.php:930
2370
  msgctxt "Post type archive slug - resave permalinks after changing this"
2371
  msgid "jobs"
2372
  msgstr ""
2
  # This file is distributed under the GPL2+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP Job Manager 1.34.1\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Automattic/WP-Job-Manager/issues\n"
7
+ "POT-Creation-Date: 2019-10-30 18:24:14+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
31
  msgstr ""
32
 
33
  #: includes/admin/class-wp-job-manager-addons.php:125
34
+ #: includes/admin/class-wp-job-manager-admin.php:128
35
  #: includes/admin/views/html-admin-page-addons.php:12
36
  msgid "WP Job Manager Add-ons"
37
  msgstr ""
49
  msgid "You don&#8217;t have permission to do this."
50
  msgstr ""
51
 
52
+ #: includes/admin/class-wp-job-manager-admin.php:125
53
  msgid "Settings"
54
  msgstr ""
55
 
56
+ #: includes/admin/class-wp-job-manager-admin.php:128
57
  msgid "Add-ons"
58
  msgstr ""
59
 
200
  msgstr ""
201
 
202
  #: includes/admin/class-wp-job-manager-cpt.php:497
203
+ #: includes/class-wp-job-manager-email-notifications.php:270
204
+ #: includes/class-wp-job-manager-post-types.php:1254
205
  #: includes/forms/class-wp-job-manager-form-submit-job.php:213
206
  #: includes/widgets/class-wp-job-manager-widget-recent-jobs.php:46
207
  #: templates/job-filters.php:35 templates/job-filters.php:36
712
  msgid "Save Changes"
713
  msgstr ""
714
 
715
+ #: includes/admin/class-wp-job-manager-settings.php:643
716
  msgid "--no page--"
717
  msgstr ""
718
 
719
+ #: includes/admin/class-wp-job-manager-settings.php:649
720
  msgid "Select a page&hellip;"
721
  msgstr ""
722
 
732
  msgstr ""
733
 
734
  #: includes/admin/class-wp-job-manager-writepanels.php:64
735
+ #: includes/class-wp-job-manager-email-notifications.php:324
736
  msgid "Posted by"
737
  msgstr ""
738
 
759
  msgstr ""
760
 
761
  #: includes/admin/class-wp-job-manager-writepanels.php:471
762
+ #: includes/class-wp-job-manager-ajax.php:419
763
  #. translators: Used in user select. %1$s is the user's display name; #%2$s is
764
  #. the user ID; %3$s is the user email.
765
  msgid "%1$s (#%2$s – %3$s)"
991
  msgid "Help other users on the forums"
992
  msgstr ""
993
 
994
+ #: includes/class-wp-job-manager-ajax.php:186
995
  #. translators: Placeholder %d is the number of found search results.
996
  msgid "Search completed. Found %d matching record."
997
  msgid_plural "Search completed. Found %d matching records."
998
  msgstr[0] ""
999
  msgstr[1] ""
1000
 
1001
+ #: includes/class-wp-job-manager-ajax.php:284
1002
  msgid "You must be logged in to upload files using this method."
1003
  msgstr ""
1004
 
1012
  msgstr ""
1013
 
1014
  #: includes/class-wp-job-manager-data-exporter.php:52
1015
+ #: includes/class-wp-job-manager-post-types.php:1273
1016
  msgid "Company Name"
1017
  msgstr ""
1018
 
1019
  #: includes/class-wp-job-manager-data-exporter.php:53
1020
+ #: includes/class-wp-job-manager-post-types.php:1281
1021
  msgid "Company Website"
1022
  msgstr ""
1023
 
1024
  #: includes/class-wp-job-manager-data-exporter.php:54
1025
+ #: includes/class-wp-job-manager-post-types.php:1290
1026
  msgid "Company Tagline"
1027
  msgstr ""
1028
 
1029
  #: includes/class-wp-job-manager-data-exporter.php:55
1030
+ #: includes/class-wp-job-manager-post-types.php:1298
1031
  msgid "Company Twitter"
1032
  msgstr ""
1033
 
1034
  #: includes/class-wp-job-manager-data-exporter.php:56
1035
+ #: includes/class-wp-job-manager-post-types.php:1306
1036
  msgid "Company Video"
1037
  msgstr ""
1038
 
1068
  msgid "WordPress Update Required"
1069
  msgstr ""
1070
 
1071
+ #: includes/class-wp-job-manager-email-notifications.php:259
1072
  msgid "Job title"
1073
  msgstr ""
1074
 
1075
+ #: includes/class-wp-job-manager-email-notifications.php:279
1076
  #: includes/class-wp-job-manager-post-types.php:218
1077
  #: includes/forms/class-wp-job-manager-form-submit-job.php:221
1078
  msgid "Job type"
1079
  msgstr ""
1080
 
1081
+ #: includes/class-wp-job-manager-email-notifications.php:289
1082
  #: includes/class-wp-job-manager-post-types.php:154
1083
  #: includes/forms/class-wp-job-manager-form-submit-job.php:230
1084
  msgid "Job category"
1085
  msgstr ""
1086
 
1087
+ #: includes/class-wp-job-manager-email-notifications.php:298
1088
  #: includes/forms/class-wp-job-manager-form-submit-job.php:255
1089
  msgid "Company name"
1090
  msgstr ""
1091
 
1092
+ #: includes/class-wp-job-manager-email-notifications.php:306
1093
  msgid "Company website"
1094
  msgstr ""
1095
 
1096
+ #: includes/class-wp-job-manager-email-notifications.php:315
1097
  msgid "Listing expires"
1098
  msgstr ""
1099
 
1100
+ #: includes/class-wp-job-manager-email-notifications.php:474
1101
  msgid "Email Notifications"
1102
  msgstr ""
1103
 
1104
+ #: includes/class-wp-job-manager-email-notifications.php:477
1105
  msgid "Select the email notifications to enable."
1106
  msgstr ""
1107
 
1108
+ #: includes/class-wp-job-manager-email-notifications.php:630
1109
  msgid "Format"
1110
  msgstr ""
1111
 
1112
+ #: includes/class-wp-job-manager-email-notifications.php:633
1113
  msgid "Send plain text email"
1114
  msgstr ""
1115
 
1116
+ #: includes/class-wp-job-manager-email-notifications.php:634
1117
  msgid "Send rich text email"
1118
  msgstr ""
1119
 
1301
  msgstr[0] ""
1302
  msgstr[1] ""
1303
 
1304
+ #: includes/class-wp-job-manager-post-types.php:1241
1305
  #: includes/forms/class-wp-job-manager-form-submit-job.php:190
1306
  msgid "Application email/URL"
1307
  msgstr ""
1308
 
1309
+ #: includes/class-wp-job-manager-post-types.php:1242
1310
  #: includes/forms/class-wp-job-manager-form-submit-job.php:191
1311
  msgid "Enter an email address or website URL"
1312
  msgstr ""
1313
 
1314
+ #: includes/class-wp-job-manager-post-types.php:1245
1315
  #: includes/forms/class-wp-job-manager-form-submit-job.php:180
1316
  msgid "Application email"
1317
  msgstr ""
1318
 
1319
+ #: includes/class-wp-job-manager-post-types.php:1246
1320
  #: includes/forms/class-wp-job-manager-form-submit-job.php:181
1321
  msgid "you@example.com"
1322
  msgstr ""
1323
 
1324
+ #: includes/class-wp-job-manager-post-types.php:1248
1325
  #: includes/forms/class-wp-job-manager-form-submit-job.php:185
1326
  msgid "Application URL"
1327
  msgstr ""
1328
 
1329
+ #: includes/class-wp-job-manager-post-types.php:1249
1330
  #: includes/forms/class-wp-job-manager-form-submit-job.php:186
1331
  msgid "https://"
1332
  msgstr ""
1333
 
1334
+ #: includes/class-wp-job-manager-post-types.php:1255
1335
  #: includes/forms/class-wp-job-manager-form-submit-job.php:217
1336
  msgid "e.g. \"London\""
1337
  msgstr ""
1338
 
1339
+ #: includes/class-wp-job-manager-post-types.php:1256
1340
  msgid "Leave this blank if the location is not important."
1341
  msgstr ""
1342
 
1343
+ #: includes/class-wp-job-manager-post-types.php:1265
1344
  msgid ""
1345
  "This field is required for the \"application\" area to appear beneath the "
1346
  "listing."
1347
  msgstr ""
1348
 
1349
+ #: includes/class-wp-job-manager-post-types.php:1291
1350
  msgid "Brief description about the company"
1351
  msgstr ""
1352
 
1353
+ #: includes/class-wp-job-manager-post-types.php:1307
1354
  msgid "URL to the company video"
1355
  msgstr ""
1356
 
1357
+ #: includes/class-wp-job-manager-post-types.php:1316
1358
  msgid "Position Filled"
1359
  msgstr ""
1360
 
1361
+ #: includes/class-wp-job-manager-post-types.php:1322
1362
  msgid "Filled listings will no longer accept applications."
1363
  msgstr ""
1364
 
1365
+ #: includes/class-wp-job-manager-post-types.php:1325
1366
  msgid "Featured Listing"
1367
  msgstr ""
1368
 
1369
+ #: includes/class-wp-job-manager-post-types.php:1327
1370
  msgid ""
1371
  "Featured listings will be sticky during searches, and can be styled "
1372
  "differently."
1373
  msgstr ""
1374
 
1375
+ #: includes/class-wp-job-manager-post-types.php:1335
1376
  msgid "Listing Expiry Date"
1377
  msgstr ""
1378
 
1452
  msgid "Enable Usage Tracking"
1453
  msgstr ""
1454
 
1455
+ #: includes/class-wp-job-manager.php:139
1456
  #. translators: Placeholders %1$s and %2$s are the names of the two cookies
1457
  #. used in WP Job Manager.
1458
  msgid ""
1461
  "\t\t\t\thave started but have not completed: %1$s and %2$s"
1462
  msgstr ""
1463
 
1464
+ #: includes/class-wp-job-manager.php:295
1465
  msgid "Load previous listings"
1466
  msgstr ""
1467
 
1468
+ #: includes/class-wp-job-manager.php:422
1469
  msgid "Invalid file type. Accepted types:"
1470
  msgstr ""
1471
 
1472
+ #: includes/class-wp-job-manager.php:439
1473
  #: includes/forms/class-wp-job-manager-form-submit-job.php:406
1474
  #. translators: Placeholder %d is the number of files to that users are limited
1475
  #. to.
1476
  msgid "You are only allowed to upload a maximum of %d files."
1477
  msgstr ""
1478
 
1479
+ #: includes/class-wp-job-manager.php:447
1480
  msgid "Are you sure you want to delete this listing?"
1481
  msgstr ""
1482
 
1483
+ #: includes/class-wp-job-manager.php:455
1484
  msgid "This field is required."
1485
  msgstr ""
1486
 
1543
  msgid "days"
1544
  msgstr ""
1545
 
1546
+ #: includes/forms/class-wp-job-manager-form-edit-job.php:104
1547
  msgid "Invalid listing"
1548
  msgstr ""
1549
 
1550
+ #: includes/forms/class-wp-job-manager-form-edit-job.php:136
1551
  msgid "Save changes"
1552
  msgstr ""
1553
 
1554
+ #: includes/forms/class-wp-job-manager-form-edit-job.php:141
1555
  msgid "Submit changes for approval"
1556
  msgstr ""
1557
 
1558
+ #: includes/forms/class-wp-job-manager-form-edit-job.php:195
1559
  msgid "Your changes have been saved."
1560
  msgstr ""
1561
 
1562
+ #: includes/forms/class-wp-job-manager-form-edit-job.php:201
1563
  msgid "View &rarr;"
1564
  msgstr ""
1565
 
1566
+ #: includes/forms/class-wp-job-manager-form-edit-job.php:203
1567
  msgid ""
1568
  "Your changes have been submitted and your listing will be visible again "
1569
  "once approved."
1574
  msgstr ""
1575
 
1576
  #: includes/forms/class-wp-job-manager-form-submit-job.php:88
1577
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:562
1578
  #: templates/job-preview.php:30
1579
  msgid "Preview"
1580
  msgstr ""
1675
  msgid "Please enter a valid application email address or URL"
1676
  msgstr ""
1677
 
1678
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:621
1679
  msgid "Please enter a username."
1680
  msgstr ""
1681
 
1682
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:625
1683
  msgid "Please enter a password."
1684
  msgstr ""
1685
 
1686
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:629
1687
  msgid "Please enter your email address."
1688
  msgstr ""
1689
 
1690
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:635
1691
  msgid "Passwords must match."
1692
  msgstr ""
1693
 
1694
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:641
1695
  #. translators: Placeholder %s is the password hint.
1696
  msgid "Invalid Password: %s"
1697
  msgstr ""
1698
 
1699
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:643
1700
  msgid "Password is not valid."
1701
  msgstr ""
1702
 
1703
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:666
1704
  msgid "You must be signed in to post a new listing."
1705
  msgstr ""
1706
 
1707
+ #: includes/forms/class-wp-job-manager-form-submit-job.php:689
1708
  #. translators: placeholder is the URL to the job dashboard page.
1709
  msgid ""
1710
  "Draft was saved. Job listing drafts can be resumed from the <a "
2293
  msgid "Searching&hellip;"
2294
  msgstr ""
2295
 
 
 
 
 
 
 
 
 
2296
  #: includes/admin/class-wp-job-manager-permalink-settings.php:108
2297
+ #: includes/class-wp-job-manager-post-types.php:976
2298
  msgctxt "Job permalink - resave permalinks after changing this"
2299
  msgid "job"
2300
  msgstr ""
2301
 
2302
  #: includes/admin/class-wp-job-manager-permalink-settings.php:117
2303
+ #: includes/class-wp-job-manager-post-types.php:977
2304
  msgctxt "Job category slug - resave permalinks after changing this"
2305
  msgid "job-category"
2306
  msgstr ""
2307
 
2308
  #: includes/admin/class-wp-job-manager-permalink-settings.php:126
2309
+ #: includes/class-wp-job-manager-post-types.php:978
2310
  msgctxt "Job type slug - resave permalinks after changing this"
2311
  msgid "job-type"
2312
  msgstr ""
2358
  msgid "Active"
2359
  msgstr ""
2360
 
2361
+ #: includes/class-wp-job-manager-post-types.php:960
2362
  msgctxt "Post type archive slug - resave permalinks after changing this"
2363
  msgid "jobs"
2364
  msgstr ""
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: mikejolley, automattic, adamkheckler, alexsanford1, annezazu, cena, chaselivingston, csonnek, davor.altman, donnapep, donncha, drawmyface, erania-pinnera, jacobshere, jakeom, jeherve, jenhooks, jgs, jonryan, 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.9
5
- Tested up to: 5.2
6
  Requires PHP: 5.6
7
- Stable tag: 1.34.0
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -152,6 +152,19 @@ It then creates a database based on the parameters passed to it.
152
  6. Job listings in admin.
153
 
154
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  = 1.34.0 =
156
  * Templates Updated: `content-job_listing.php`, `job-submitted.php`.
157
  * Enhancement: Add support for pre-selecting categories in `[jobs]` using category slugs in query string (e.g. `/jobs?search_category=developer,pm,senior`).
2
  Contributors: mikejolley, automattic, adamkheckler, alexsanford1, annezazu, cena, chaselivingston, csonnek, davor.altman, donnapep, donncha, drawmyface, erania-pinnera, jacobshere, jakeom, jeherve, jenhooks, jgs, jonryan, 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.9
5
+ Tested up to: 5.4
6
  Requires PHP: 5.6
7
+ Stable tag: 1.34.1
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
152
  6. Job listings in admin.
153
 
154
  == Changelog ==
155
+
156
+ = 1.34.1 =
157
+ * Templates Updated: `job-submitted.php`, `job-dashboard.php`.
158
+ * Enhancement: Email notifications are sent separately if multiple recipients are listed.
159
+ * Enhancement: Notices at end of job submission process are now displayed as a styled notice. (@DaveParkerRKD)
160
+ * Fix: Resuming job listing submission at a particular step is now fixed.
161
+ * Fix: Issue with some permalink structures and WPMU would cause issues on `[jobs]` page.
162
+ * Dev: Adds the ability to block some jobs from being edited in the frontend.
163
+ * Dev: Adds ability to force some email notifications to be enabled.
164
+ * Dev: Allows email notifications to be sent immediately.
165
+ * Dev: Adds ability for settings to reference other settings tabs.
166
+ * Dev: Standardizes jQuery UI datepicker script IDs in frontend and backend. Plugins and themes should enqueue `wp-job-manager-datepicker` if they need jQuery UI datepicker.
167
+
168
  = 1.34.0 =
169
  * Templates Updated: `content-job_listing.php`, `job-submitted.php`.
170
  * Enhancement: Add support for pre-selecting categories in `[jobs]` using category slugs in query string (e.g. `/jobs?search_category=developer,pm,senior`).
templates/job-dashboard.php CHANGED
@@ -8,7 +8,7 @@
8
  * @author Automattic
9
  * @package wp-job-manager
10
  * @category Template
11
- * @version 1.32.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
@@ -48,7 +48,7 @@ if ( ! defined( 'ABSPATH' ) ) {
48
 
49
  switch ( $job->post_status ) {
50
  case 'publish' :
51
- if ( wpjm_user_can_edit_published_submissions() ) {
52
  $actions[ 'edit' ] = [ 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false ];
53
  }
54
  if ( is_position_filled( $job ) ) {
@@ -66,7 +66,7 @@ if ( ! defined( 'ABSPATH' ) ) {
66
  break;
67
  case 'pending_payment' :
68
  case 'pending' :
69
- if ( job_manager_user_can_edit_pending_submissions() ) {
70
  $actions['edit'] = [ 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false ];
71
  }
72
  break;
8
  * @author Automattic
9
  * @package wp-job-manager
10
  * @category Template
11
+ * @version 1.34.1
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
48
 
49
  switch ( $job->post_status ) {
50
  case 'publish' :
51
+ if ( WP_Job_Manager_Post_Types::job_is_editable( $job->ID ) ) {
52
  $actions[ 'edit' ] = [ 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false ];
53
  }
54
  if ( is_position_filled( $job ) ) {
66
  break;
67
  case 'pending_payment' :
68
  case 'pending' :
69
+ if ( WP_Job_Manager_Post_Types::job_is_editable( $job->ID ) ) {
70
  $actions['edit'] = [ 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false ];
71
  }
72
  break;
templates/job-submitted.php CHANGED
@@ -8,7 +8,7 @@
8
  * @author Automattic
9
  * @package wp-job-manager
10
  * @category Template
11
- * @version 1.31.1
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
@@ -19,21 +19,21 @@ global $wp_post_types;
19
 
20
  switch ( $job->post_status ) :
21
  case 'publish' :
22
- echo wp_kses_post(
23
  sprintf(
24
  __( '%s listed successfully. To view your listing <a href="%s">click here</a>.', 'wp-job-manager' ),
25
  esc_html( $wp_post_types['job_listing']->labels->singular_name ),
26
  get_permalink( $job->ID )
27
  )
28
- );
29
  break;
30
  case 'pending' :
31
- echo wp_kses_post(
32
  sprintf(
33
  esc_html__( '%s submitted successfully. Your listing will be visible once approved.', 'wp-job-manager' ),
34
  esc_html( $wp_post_types['job_listing']->labels->singular_name )
35
  )
36
- );
37
  break;
38
  default :
39
  do_action( 'job_manager_job_submitted_content_' . str_replace( '-', '_', sanitize_title( $job->post_status ) ), $job );
8
  * @author Automattic
9
  * @package wp-job-manager
10
  * @category Template
11
+ * @version 1.34.1
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
19
 
20
  switch ( $job->post_status ) :
21
  case 'publish' :
22
+ echo '<div class="job-manager-message">' . wp_kses_post(
23
  sprintf(
24
  __( '%s listed successfully. To view your listing <a href="%s">click here</a>.', 'wp-job-manager' ),
25
  esc_html( $wp_post_types['job_listing']->labels->singular_name ),
26
  get_permalink( $job->ID )
27
  )
28
+ ) . '</div>';
29
  break;
30
  case 'pending' :
31
+ echo '<div class="job-manager-message">' . wp_kses_post(
32
  sprintf(
33
  esc_html__( '%s submitted successfully. Your listing will be visible once approved.', 'wp-job-manager' ),
34
  esc_html( $wp_post_types['job_listing']->labels->singular_name )
35
  )
36
+ ) . '</div>';
37
  break;
38
  default :
39
  do_action( 'job_manager_job_submitted_content_' . str_replace( '-', '_', sanitize_title( $job->post_status ) ), $job );
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.34.0
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.9
10
- * Tested up to: 5.2
11
  * Requires PHP: 5.6
12
  * Text Domain: wp-job-manager
13
  * Domain Path: /languages/
@@ -21,7 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) {
21
  }
22
 
23
  // Define constants.
24
- define( 'JOB_MANAGER_VERSION', '1.34.0' );
25
  define( 'JOB_MANAGER_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
26
  define( 'JOB_MANAGER_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
27
  define( 'JOB_MANAGER_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
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.34.1
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.9
10
+ * Tested up to: 5.4
11
  * Requires PHP: 5.6
12
  * Text Domain: wp-job-manager
13
  * Domain Path: /languages/
21
  }
22
 
23
  // Define constants.
24
+ define( 'JOB_MANAGER_VERSION', '1.34.1' );
25
  define( 'JOB_MANAGER_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
26
  define( 'JOB_MANAGER_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
27
  define( 'JOB_MANAGER_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );