WP Job Manager - Version 1.29.0

Version Description

  • Enhancement: Moves license and update management for official add-ons to the core plugin. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1168)
  • Enhancement: Update language for setup wizard with more clear descriptions. (@donnapep; https://github.com/Automattic/WP-Job-Manager/pull/1194)
  • Fix: Prevent duplicate attachments to job listing posts for non-image media. (@tripflex; https://github.com/Automattic/WP-Job-Manager/pull/1144)
  • Fix: PHP error on registration form due to missing placeholder text. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1180)
  • Fix: Apply the_job_application_method filter even when no default is available. (@turtlepod; https://github.com/Automattic/WP-Job-Manager/issues/1164)
  • Fix: Properly reset category selector on [jobs] shortcode. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1190)
Download this release

Release Info

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

Code changes from version 1.28.0 to 1.29.0

assets/css/admin.css CHANGED
@@ -1 +1 @@
1
- .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.job-manager-settings-wrap .updated{display:none}.job-manager-settings-wrap .job-manager-updated{display:block;margin:1em 0 0}.widefat td.column-featured_job,.widefat td.column-filled,.widefat td.column-job_status{width:46px;text-align:left;padding-left:11px}.widefat th.column-featured_job,.widefat th.column-filled,.widefat th.column-job_status{width:1em}.widefat th.column-featured_job span,.widefat th.column-filled span,.widefat th.column-job_status span{display:block;width:1em;height:1em;line-height:1em;padding:1px 0 0;overflow:hidden}.widefat th.column-featured_job span:before,.widefat th.column-filled span:before,.widefat th.column-job_status span:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.widefat th.column-filled span:before{content:'\e807'}.widefat th.column-job_status span:before{content:'\e828'}.widefat .column-job_posted strong{display:block;margin-bottom:.2em}.widefat td.column-job_status span{position:relative;font-size:1em;line-height:1.5em;width:1em;height:0;padding:2em 0 0;overflow:hidden;display:block}.widefat td.column-job_status span:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;position:absolute;top:0;left:0;line-height:1.5em;vertical-align:middle;color:#999;content:'\e829'}.widefat td.column-job_status .status-trash:before{content:'\e82b';color:#a00}.widefat td.column-job_status .status-pending:before{content:'\e82c';color:#ffba00}.widefat td.column-job_status .status-publish:before{content:'\e82f';color:#73a724}.widefat td.column-job_status .status-expired:before{content:'\e82e';color:#a00}.widefat .column-job_listing_type{text-align:left;width:6em;word-wrap:normal!important}.widefat .column-job_listing_type .job-type{color:#fff;padding:4px;font-size:11px;-webkit-border-radius:2px;border-radius:2px;display:block;background-color:#f08d3c;text-align:center}.widefat .column-job_listing_type .full-time{background-color:#90da36}.widefat .column-job_listing_type .part-time{background-color:#f08d3c}.widefat .column-job_listing_type .temporary{background-color:#d93674}.widefat .column-job_listing_type .freelance{background-color:#39c}.widefat .column-job_listing_type .internship{background-color:#6033cc}.widefat th.column-job_position{width:20%}.widefat td.column-job_position{width:20%;height:34px}.widefat td.column-job_position .job_position{position:relative;padding-right:50px!important}.widefat td.column-job_position a.job_title{font-weight:700}.widefat td.column-job_position img{width:32px;height:32px;position:absolute;right:7px;top:0;-webkit-border-radius:50%;border-radius:50%;box-shadow:0 1px 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 0 1px rgba(0,0,0,.1);border:1px solid #fff}.widefat td.column-job_position .company{margin-top:.2em;display:block;padding-top:2px;color:#bbb}.widefat .column-job_location{width:10%}.widefat .column-job_actions{text-align:right;width:128px}.widefat .column-job_actions strong{display:block;margin-bottom:.2em}.widefat .column-job_actions .actions{padding-top:2px}.widefat .column-job_actions a.button{display:inline-block;margin:0 0 2px 4px;cursor:pointer;padding:0 6px!important;font-size:1em!important;line-height:2em!important;overflow:hidden}.widefat .column-job_actions a.button-icon{width:2em!important;padding:0!important}.widefat .column-job_actions a.button-icon:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;text-align:center;font-variant:normal;text-transform:none;float:left;width:2em!important;line-height:2em}.widefat .column-job_actions .icon-view:before{content:'\e805'}.widefat .column-job_actions .icon-edit:before{content:'\e804'}.widefat .column-job_actions .icon-delete:before{content:'\e82b'}.widefat .column-job_actions .icon-approve:before{content:'\e802'}.wp_job_manager_meta_data{zoom:1}.wp_job_manager_meta_data:after,.wp_job_manager_meta_data:before{content:"";display:table}.wp_job_manager_meta_data:after{clear:both}.wp_job_manager_meta_data .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;padding:0 12px 0 0;margin:0 0 12px;clear:both}.wp_job_manager_meta_data .form-field:nth-child(even){float:right;padding:0 0 0 12px;clear:right}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wp_job_manager_meta_data .form-field label{vertical-align:middle;display:block;font-weight:700;margin:0}.wp_job_manager_meta_data .form-field .tips{cursor:help;float:right;font-weight:400;color:#999}.wp_job_manager_meta_data .form-field input{width:100%;margin:1px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.wp_job_manager_meta_data .form-field input.checkbox,.wp_job_manager_meta_data .form-field input.radio{width:auto;margin:4px 2px;display:inline-block}.wp_job_manager_meta_data .form-field .description{display:block;color:#999}.wp_job_manager_meta_data .form-field.form-field-checkbox .description{display:inline}.wp_job_manager_meta_data .form-field .file_url input{width:75%}.wp_job_manager_meta_data .form-field .button{margin-left:4px}.wp_job_manager_meta_data .form-field .file_no_url{-o-animation:flash .3s linear infinite alternate;-webkit-animation:flash .3s linear infinite alternate;-moz-animation:flash .3s linear infinite alternate;animation:flash .3s linear infinite alternate}@-o-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-ms-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-moz-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-webkit-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@keyframes flash{from{background-color:unset}to{background-color:#dc3232}}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;padding:4px 8px;background:#464646;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.1);-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 3px rgba(0,0,0,.1);text-align:center}#tiptip_content code{background:#999;padding:1px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#464646}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#464646}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#464646}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#464646}.wp_job_manager_addons_wrap #job-manager-addons-banner{position:relative;background:#d85677;padding:0 2em 0 5em;color:#fff;margin:10px .25% 20px 0;border-color:rgba(0,0,0,.1);overflow:hidden}.wp_job_manager_addons_wrap #job-manager-addons-banner strong{font-size:1.25em;line-height:.8em;text-shadow:0 2px 0 rgba(0,0,0,.1);font-weight:400;float:left;padding:1.6em 0}.wp_job_manager_addons_wrap #job-manager-addons-banner a.button{color:#fff;text-decoration:none;font-weight:700;float:right;background:#d85677;border:1px solid #fff;line-height:1em;padding:1em;margin:1em 0;text-shadow:0 2px 0 rgba(0,0,0,.1);box-shadow:0 2px 0 rgba(0,0,0,.1);height:auto;position:relative}.wp_job_manager_addons_wrap #job-manager-addons-banner:before{display:inline-block;-webkit-font-smoothing:antialiased;vertical-align:top;font-family:jm-logo;content:"\e600";top:.02em;left:0;position:absolute;text-shadow:0 2px 0 rgba(0,0,0,.1);font-size:5em;font-weight:400;text-align:center;width:1em;height:1em;line-height:1em}.wp_job_manager_addons_wrap .products{overflow:hidden}.wp_job_manager_addons_wrap .products li{display:inline-block;margin:0 1% 10px 0!important;padding:0;vertical-align:top;width:24%;min-width:250px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;position:relative;opacity:.8}.wp_job_manager_addons_wrap .products li:nth-child(4n+0){margin-right:0!important}.wp_job_manager_addons_wrap .products li a{color:inherit;text-decoration:none}.wp_job_manager_addons_wrap .products li img{width:100%;height:auto;display:block;padding:0;margin:0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)}.wp_job_manager_addons_wrap .products li h2{margin:0!important;padding:10px 0!important;line-height:1;background:rgba(255,255,255,.6);border-bottom:1px solid rgba(0,0,0,.1);color:#000;text-align:center;position:absolute;width:100%;top:0;left:0;font-size:16px;text-shadow:none;display:none}.wp_job_manager_addons_wrap .products li:focus,.wp_job_manager_addons_wrap .products li:hover{opacity:1}.wp_job_manager_addons_wrap .products li:focus h2,.wp_job_manager_addons_wrap .products li:hover h2{display:block}.wp_job_manager_addons_wrap .products li .third_party{display:none}.wp_job_manager_addons_wrap .products li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.wp_job_manager_addons_wrap .products li .price{display:none}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.rtl .wp_job_manager_meta_data p{padding:0 20% 0 0}.rtl .wp_job_manager_meta_data label{left:auto;right:0}@media only screen and (max-width:782px){.widefat .job_position.column-primary{display:table-cell!important}.widefat .toggle-row:before{top:5px}.widefat .column-job_actions{text-align:left}.widefat .column-job_actions a.button-icon:before{float:left}.rtl .widefat .column-job_actions{text-align:right}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.wp_job_manager_meta_data .form-field{width:100%;padding:0}.wp_job_manager_meta_data .form-field:nth-child(even),.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){float:none;padding:0;margin-bottom:12px;clear:both}}
1
+ .clearfix{zoom:1}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}@font-face{font-family:job-manager;src:url(../font/job-manager.eot?4963673);src:url(../font/job-manager.eot?4963673#iefix) format('embedded-opentype'),url(../font/job-manager.woff?4963673) format('woff'),url(../font/job-manager.ttf?4963673) format('truetype'),url(../font/job-manager.svg?4963673#job-manager) format('svg');font-weight:400;font-style:normal}@font-face{font-family:jm-logo;src:url(../font/jm-logo/jm.eot?ycsbky);src:url(../font/jm-logo/jm.eot?#iefixycsbky) format('embedded-opentype'),url(../font/jm-logo/jm.woff?ycsbky) format('woff'),url(../font/jm-logo/jm.ttf?ycsbky) format('truetype'),url(../font/jm-logo/jm.svg?ycsbky#icomoon) format('svg');font-weight:400;font-style:normal}.jm-icon{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.job-manager-settings-wrap .updated{display:none}.job-manager-settings-wrap .job-manager-updated{display:block;margin:1em 0 0}a.wpjm-activate-licence-link,a.wpjm-activate-licence-link:active,a.wpjm-activate-licence-link:hover,a.wpjm-activate-licence-link:link,a.wpjm-activate-licence-link:visited{color:#ff4500}.wpjm-licences{margin-top:10px}.wpjm-licences .licence-row{align-items:center;border:solid 1px #e2e0e2;display:flex;background-color:#fff;flex-wrap:wrap;min-height:82px;margin-bottom:20px;position:relative}.wpjm-licences .plugin-info{font-size:18px;flex-basis:320px;padding:0 20px;margin-right:10px}.wpjm-licences .plugin-info .plugin-author{font-size:12px}.wpjm-licences .plugin-licence{flex:1;flex-basis:40%;padding-bottom:5px}.wpjm-licences .plugin-licence label{white-space:nowrap}.widefat td.column-featured_job,.widefat td.column-filled,.widefat td.column-job_status{width:46px;text-align:left;padding-left:11px}.widefat th.column-featured_job,.widefat th.column-filled,.widefat th.column-job_status{width:1em}.widefat th.column-featured_job span,.widefat th.column-filled span,.widefat th.column-job_status span{display:block;width:1em;height:1em;line-height:1em;padding:1px 0 0 0;overflow:hidden}.widefat th.column-featured_job span:before,.widefat th.column-filled span:before,.widefat th.column-job_status span:before{content:'\e803';font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.widefat th.column-filled span:before{content:'\e807'}.widefat th.column-job_status span:before{content:'\e828'}.widefat .column-job_posted strong{display:block;margin-bottom:.2em}.widefat td.column-job_status span{position:relative;font-size:1em;line-height:1.5em;width:1em;height:0;padding:2em 0 0 0;overflow:hidden;display:block}.widefat td.column-job_status span:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;position:absolute;top:0;left:0;line-height:1.5em;vertical-align:middle;color:#999;content:'\e829'}.widefat td.column-job_status .status-trash:before{content:'\e82b';color:#a00}.widefat td.column-job_status .status-pending:before{content:'\e82c';color:#ffba00}.widefat td.column-job_status .status-publish:before{content:'\e82f';color:#73a724}.widefat td.column-job_status .status-expired:before{content:'\e82e';color:#a00}.widefat .column-job_listing_type{text-align:left;width:6em;word-wrap:normal!important}.widefat .column-job_listing_type .job-type{color:#fff;padding:4px;font-size:11px;-webkit-border-radius:2px;border-radius:2px;display:block;background-color:#f08d3c;text-align:center}.widefat .column-job_listing_type .full-time{background-color:#90da36}.widefat .column-job_listing_type .part-time{background-color:#f08d3c}.widefat .column-job_listing_type .temporary{background-color:#d93674}.widefat .column-job_listing_type .freelance{background-color:#39c}.widefat .column-job_listing_type .internship{background-color:#6033cc}.widefat th.column-job_position{width:20%}.widefat td.column-job_position{width:20%;height:34px}.widefat td.column-job_position .job_position{position:relative;padding-right:50px!important}.widefat td.column-job_position a.job_title{font-weight:700}.widefat td.column-job_position img{width:32px;height:32px;position:absolute;right:7px;top:0;-webkit-border-radius:50%;border-radius:50%;box-shadow:0 1px 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 0 1px rgba(0,0,0,.1);border:1px solid #fff}.widefat td.column-job_position .company{margin-top:.2em;display:block;padding-top:2px;color:#bbb}.widefat .column-job_location{width:10%}.widefat .column-job_actions{text-align:right;width:128px}.widefat .column-job_actions strong{display:block;margin-bottom:.2em}.widefat .column-job_actions .actions{padding-top:2px}.widefat .column-job_actions a.button{display:inline-block;margin:0 0 2px 4px;cursor:pointer;padding:0 6px!important;font-size:1em!important;line-height:2em!important;overflow:hidden}.widefat .column-job_actions a.button-icon{width:2em!important;padding:0!important}.widefat .column-job_actions a.button-icon:before{font-family:job-manager!important;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;float:left;width:2em!important;line-height:2em}.widefat .column-job_actions .icon-view:before{content:'\e805'}.widefat .column-job_actions .icon-edit:before{content:'\e804'}.widefat .column-job_actions .icon-delete:before{content:'\e82b'}.widefat .column-job_actions .icon-approve:before{content:'\e802'}.wp_job_manager_meta_data{zoom:1}.wp_job_manager_meta_data:after,.wp_job_manager_meta_data:before{content:"";display:table}.wp_job_manager_meta_data:after{clear:both}.wp_job_manager_meta_data .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;padding:0 12px 0 0;margin:0 0 12px;clear:both}.wp_job_manager_meta_data .form-field:nth-child(even){float:right;padding:0 0 0 12px;clear:right}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wp_job_manager_meta_data .form-field label{vertical-align:middle;display:block;font-weight:700;margin:0}.wp_job_manager_meta_data .form-field .tips{cursor:help;float:right;font-weight:400;color:#999}.wp_job_manager_meta_data .form-field input{width:100%;margin:1px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}.wp_job_manager_meta_data .form-field input.checkbox,.wp_job_manager_meta_data .form-field input.radio{width:auto;margin:4px 2px;display:inline-block}.wp_job_manager_meta_data .form-field .description{display:block;color:#999}.wp_job_manager_meta_data .form-field.form-field-checkbox .description{display:inline}.wp_job_manager_meta_data .form-field .file_url input{width:75%}.wp_job_manager_meta_data .form-field .button{margin-left:4px}.wp_job_manager_meta_data .form-field .file_no_url{-o-animation:flash .3s linear infinite alternate;-webkit-animation:flash .3s linear infinite alternate;-moz-animation:flash .3s linear infinite alternate;animation:flash .3s linear infinite alternate}@-o-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-ms-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-moz-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@-webkit-keyframes flash{from{background-color:unset}to{background-color:#dc3232}}@keyframes flash{from{background-color:unset}to{background-color:#dc3232}}#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;padding:4px 8px;background:#464646;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.1);-webkit-box-shadow:1px 1px 3px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 3px rgba(0,0,0,.1);text-align:center}#tiptip_content code{background:#999;padding:1px}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#464646}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#464646}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#464646}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#464646}.wp_job_manager_addons_wrap #job-manager-addons-banner{position:relative;background:#d85677;padding:0 2em 0 5em;color:#fff;margin:10px .25% 20px 0;border-color:rgba(0,0,0,.1);overflow:hidden}.wp_job_manager_addons_wrap #job-manager-addons-banner strong{font-size:1.25em;line-height:.8em;text-shadow:0 2px 0 rgba(0,0,0,.1);font-weight:400;float:left;padding:1.6em 0}.wp_job_manager_addons_wrap #job-manager-addons-banner a.button{color:#fff;text-decoration:none;font-weight:700;float:right;background:#d85677;border:1px solid #fff;line-height:1em;padding:1em;margin:1em 0;text-shadow:0 2px 0 rgba(0,0,0,.1);box-shadow:0 2px 0 rgba(0,0,0,.1);height:auto;position:relative}.wp_job_manager_addons_wrap #job-manager-addons-banner:before{display:inline-block;-webkit-font-smoothing:antialiased;vertical-align:top;font-family:jm-logo;content:"\e600";top:.02em;left:0;position:absolute;text-shadow:0 2px 0 rgba(0,0,0,.1);font-size:5em;font-weight:400;text-align:center;width:1em;height:1em;line-height:1em}.wp_job_manager_addons_wrap .products{overflow:hidden}.wp_job_manager_addons_wrap .products li{display:inline-block;margin:0 1% 10px 0!important;padding:0;vertical-align:top;width:24%;min-width:250px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 -1px 0 rgba(0,0,0,.1);overflow:hidden;position:relative;opacity:.8}.wp_job_manager_addons_wrap .products li:nth-child(4n+0){margin-right:0!important}.wp_job_manager_addons_wrap .products li a{color:inherit;text-decoration:none}.wp_job_manager_addons_wrap .products li img{width:100%;height:auto;display:block;padding:0;margin:0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)}.wp_job_manager_addons_wrap .products li h2{margin:0!important;padding:10px 0!important;line-height:1;background:rgba(255,255,255,.6);border-bottom:1px solid rgba(0,0,0,.1);color:#000;text-align:center;position:absolute;width:100%;top:0;left:0;font-size:16px;text-shadow:none;display:none}.wp_job_manager_addons_wrap .products li:focus,.wp_job_manager_addons_wrap .products li:hover{opacity:1}.wp_job_manager_addons_wrap .products li:focus h2,.wp_job_manager_addons_wrap .products li:hover h2{display:block}.wp_job_manager_addons_wrap .products li .third_party{display:none}.wp_job_manager_addons_wrap .products li p{padding:20px!important;margin:0!important;border-top:1px solid #f1f1f1}.wp_job_manager_addons_wrap .products li .price{display:none}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.rtl .wp_job_manager_meta_data p{padding:0 20% 0 0}.rtl .wp_job_manager_meta_data label{left:auto;right:0}@media only screen and (max-width:782px){.wpjm-licences .plugin-info{padding:10px}.wpjm-licences .plugin-licence{padding:10px}.widefat .job_position.column-primary{display:table-cell!important}.widefat .toggle-row:before{top:5px}.widefat .column-job_actions{text-align:left}.widefat .column-job_actions a.button-icon:before{float:left}.rtl .widefat .column-job_actions{text-align:right}.rtl .widefat .column-job_actions a.button-icon:before{float:right}.wp_job_manager_meta_data .form-field{width:100%;padding:0}.wp_job_manager_meta_data .form-field:nth-child(even){float:none;padding:0;margin-bottom:12px;clear:both}.wp_job_manager_meta_data .form-field:nth-last-child(-n+2){float:none;padding:0;margin-bottom:12px;clear:both}}
assets/css/admin.less CHANGED
@@ -10,6 +10,46 @@
10
  margin: 1em 0 0;
11
  }
12
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  .widefat {
14
  td.column-featured_job, td.column-filled, td.column-job_status {
15
  width: 46px;
@@ -492,6 +532,14 @@
492
  * Mobile styles
493
  */
494
  @media only screen and (max-width: 782px) {
 
 
 
 
 
 
 
 
495
  .widefat {
496
  .job_position.column-primary{
497
  display: table-cell !important;
10
  margin: 1em 0 0;
11
  }
12
  }
13
+
14
+ a.wpjm-activate-licence-link,
15
+ a.wpjm-activate-licence-link:link,
16
+ a.wpjm-activate-licence-link:hover,
17
+ a.wpjm-activate-licence-link:visited,
18
+ a.wpjm-activate-licence-link:active {
19
+ color: orangered;
20
+ }
21
+
22
+ .wpjm-licences {
23
+ margin-top: 10px;
24
+ .licence-row {
25
+ align-items: center;
26
+ border: solid 1px #e2e0e2;
27
+ display: flex;
28
+ background-color: #fff;
29
+ flex-wrap: wrap;
30
+ min-height: 82px;
31
+ margin-bottom: 20px;
32
+ position: relative;
33
+ }
34
+ .plugin-info {
35
+ font-size: 18px;
36
+ flex-basis: 320px;
37
+ padding: 0 20px;
38
+ margin-right: 10px;
39
+
40
+ .plugin-author {
41
+ font-size: 12px;
42
+ }
43
+ }
44
+ .plugin-licence {
45
+ flex: 1;
46
+ flex-basis: 40%;
47
+ padding-bottom: 5px;
48
+ label {
49
+ white-space: nowrap;
50
+ }
51
+ }
52
+ }
53
  .widefat {
54
  td.column-featured_job, td.column-filled, td.column-job_status {
55
  width: 46px;
532
  * Mobile styles
533
  */
534
  @media only screen and (max-width: 782px) {
535
+ .wpjm-licences {
536
+ .plugin-info {
537
+ padding: 10px;
538
+ }
539
+ .plugin-licence {
540
+ padding: 10px;
541
+ }
542
+ }
543
  .widefat {
544
  .job_position.column-primary{
545
  display: table-cell !important;
assets/css/chosen.css CHANGED
@@ -8,4 +8,4 @@ Copyright (c) 2011 Harvest http://getharvest.com
8
 
9
  MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
  This file is generated by `grunt build`, do not edit it by hand.
11
- */.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:23px;border:1px solid #aaa;border-radius:5px;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(../images/chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover,.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(../images/chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(../images/chosen-sprite.png) no-repeat 100% -20px;background:url(../images/chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:5px;height:auto;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#666;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 0 3px 5px;padding:3px 20px 3px 5px;border:1px solid #aaa;border-radius:3px;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(../images/chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close,.chosen-disabled .chosen-single{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl .chosen-drop,.chosen-rtl.chosen-container-single-nosearch .chosen-search{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(../images/chosen-sprite.png) no-repeat -30px -20px;background:url(../images/chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(../images/chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}
8
 
9
  MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
  This file is generated by `grunt build`, do not edit it by hand.
11
+ */.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:23px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(../images/chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(../images/chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(../images/chosen-sprite.png) no-repeat 100% -20px;background:url(../images/chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:5px;height:auto;outline:0;border:0!important;background:0 0!important;box-shadow:none;color:#666;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 0 3px 5px;padding:3px 20px 3px 5px;border:1px solid #aaa;border-radius:3px;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(../images/chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl .chosen-drop,.chosen-rtl.chosen-container-single-nosearch .chosen-search{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(../images/chosen-sprite.png) no-repeat -30px -20px;background:url(../images/chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(../images/chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}
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}.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;*overflow:auto;*zoom:1;*display:inline}.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;padding:0 0 1em;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;*overflow:auto;*zoom:1;*display:inline;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;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}div.job_listings{margin-bottom:1em}div.job_listings ul.job_listings{margin:0}.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 .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}.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)}.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 42px;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;*overflow:auto;*zoom:1;*display:inline;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;*overflow:auto;*zoom:1;*display:inline;content:'\e80a'}.single_job_listing .company .company_video{border-top:1px solid #eee;padding:1em 0 0;margin:1em 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;*overflow:auto;*zoom:1;*display:inline;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;*overflow:auto;*zoom:1;*display:inline;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;*overflow:auto;*zoom:1;*display:inline;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 .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;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}.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;*overflow:auto;*zoom:1;*display:inline;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}#content nav.job-manager-pagination,#job-manager-job-dashboard table .applications,#job-manager-job-dashboard table .expires,#job-manager-job-dashboard table .filled,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;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}@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}}.chosen-container{width:100%!important}.twenty-eleven ul.job_listings li.job_listing,.twenty-eleven ul.job_listings li.no_job_listings_found{padding:0!important}.twenty-ten .chosen-choices,.twenty-ten .job_types{margin:0!important}.rtl .job-manager-form label{float:right}.rtl .entry-content .job_listing_preview_title .button,.rtl .job-manager-form div.field,.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}.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}div.job_listings{margin-bottom:1em}div.job_listings ul.job_listings{margin:0}.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 .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}.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)}.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 42px;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 .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 .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}@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}}.chosen-container{width:100%!important}.twenty-eleven ul.job_listings li.job_listing,.twenty-eleven ul.job_listings li.no_job_listings_found{padding:0!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}
assets/css/job-submission.css CHANGED
@@ -1,11 +1 @@
1
- #wp-link #search-panel,
2
- #wp-link #wplink-link-existing-content {
3
- display: none;
4
- }
5
- div#wp-link-wrap.wp-core-ui {
6
- height: 300px;
7
- }
8
- .wplink-autocomplete.ui-autocomplete {
9
- display: none;
10
- visibility: hidden;
11
- }
1
+ #wp-link #search-panel,#wp-link #wplink-link-existing-content{display:none}div#wp-link-wrap.wp-core-ui{height:300px}.wplink-autocomplete.ui-autocomplete{display:none;visibility:hidden}
 
 
 
 
 
 
 
 
 
 
assets/js/admin.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){a(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),a("p.form-field-author").on("click","a.change-author",function(){return a(this).closest("p").find(".current-author").hide(),a(this).closest("p").find(".change-author").show(),!1}),a("input.job-manager-datepicker, input#_job_expires").datepicker({altFormat:"yy-mm-dd",dateFormat:job_manager_admin.date_format}),a("input.job-manager-datepicker, input#_job_expires").each(function(){if(a(this).val()){var b=a(this).val().split("-");if(3===b.length){var c=new Date(parseInt(b[0],10),parseInt(b[1],10)-1,parseInt(b[2],10));a(this).datepicker("setDate",c)}}});var b,c,d;a(document).on("click",".wp_job_manager_add_another_file_button",function(b){b.preventDefault();var c=a(this).data("field_name"),d=a(this).data("field_placeholder"),e=a(this).data("uploader_button_text"),f=a(this).data("uploader_button"),g=a(this).data("view_button");a(this).before('<span class="file_url"><input type="text" name="'+c+'[]" placeholder="'+d+'" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="'+e+'">'+f+'</button><button class="button button-small wp_job_manager_view_file_button">'+g+"</button></span>")}),a(document).on("click",".wp_job_manager_view_file_button",function(b){b.preventDefault(),d=a(this).closest(".file_url"),c=d.find("input");var e=c.val();e.indexOf("://")>-1?window.open(e,"_blank"):(c.addClass("file_no_url"),setTimeout(function(){c.removeClass("file_no_url")},1e3))}),a(document).on("click",".wp_job_manager_upload_file_button",function(e){if(e.preventDefault(),d=a(this).closest(".file_url"),c=d.find("input"),b)return void b.open();b=wp.media.frames.file_frame=wp.media({title:a(this).data("uploader_title"),button:{text:a(this).data("uploader_button_text")},multiple:!1}),b.on("select",function(){var d=b.state().get("selection").first().toJSON();a(c).val(d.url)}),b.open()})}),jQuery(document).ready(function(a){var b="job_listing_type";a("#"+b+"checklist li :radio, #"+b+"checklist-pop :radio").live("click",function(){var c=a(this),d=c.is(":checked"),e=c.val();a("#"+b+"checklist li :radio, #"+b+"checklist-pop :radio").prop("checked",!1),a("#in-"+b+"-"+e+", #in-popular-"+b+"-"+e).prop("checked",d)})});
1
+ jQuery(document).ready(function(t){t(".tips, .help_tip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),t("p.form-field-author").on("click","a.change-author",function(){return t(this).closest("p").find(".current-author").hide(),t(this).closest("p").find(".change-author").show(),!1}),t("input.job-manager-datepicker, input#_job_expires").datepicker({altFormat:"yy-mm-dd",dateFormat:job_manager_admin.date_format}),t("input.job-manager-datepicker, input#_job_expires").each(function(){if(t(this).val()){var e=t(this).val().split("-");if(3===e.length){var a=new Date(parseInt(e[0],10),parseInt(e[1],10)-1,parseInt(e[2],10));t(this).datepicker("setDate",a)}}});var e,a,i;t(document).on("click",".wp_job_manager_add_another_file_button",function(e){e.preventDefault();var a=t(this).data("field_name"),i=t(this).data("field_placeholder"),n=t(this).data("uploader_button_text"),o=t(this).data("uploader_button"),l=t(this).data("view_button");t(this).before('<span class="file_url"><input type="text" name="'+a+'[]" placeholder="'+i+'" /><button class="button button-small wp_job_manager_upload_file_button" data-uploader_button_text="'+n+'">'+o+'</button><button class="button button-small wp_job_manager_view_file_button">'+l+"</button></span>")}),t(document).on("click",".wp_job_manager_view_file_button",function(e){e.preventDefault(),i=t(this).closest(".file_url");var n=(a=i.find("input")).val();n.indexOf("://")>-1?window.open(n,"_blank"):(a.addClass("file_no_url"),setTimeout(function(){a.removeClass("file_no_url")},1e3))}),t(document).on("click",".wp_job_manager_upload_file_button",function(n){n.preventDefault(),i=t(this).closest(".file_url"),a=i.find("input"),e?e.open():((e=wp.media.frames.file_frame=wp.media({title:t(this).data("uploader_title"),button:{text:t(this).data("uploader_button_text")},multiple:!1})).on("select",function(){var i=e.state().get("selection").first().toJSON();t(a).val(i.url)}),e.open())})}),jQuery(document).ready(function(t){var e="job_listing_type";t("#"+e+"checklist li :radio, #"+e+"checklist-pop :radio").live("click",function(){var a=t(this),i=a.is(":checked"),n=a.val();t("#"+e+"checklist li :radio, #"+e+"checklist-pop :radio").prop("checked",!1),t("#in-"+e+"-"+n+", #in-popular-"+e+"-"+n).prop("checked",i)})});
assets/js/ajax-file-upload.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(a){a(".wp-job-manager-file-upload").each(function(){a(this).fileupload({dataType:"json",dropZone:a(this),url:job_manager_ajax_file_upload.ajax_url.toString().replace("%%endpoint%%","upload_file"),maxNumberOfFiles:1,formData:{script:!0},add:function(b,c){var d=a(this),e=d.closest("form"),f=d.parent().find(".job-manager-uploaded-files"),g=[],h=a(this).data("file_types");if(h){var i=new RegExp("(.|/)("+h+")$","i");c.originalFiles[0].name.length&&!i.test(c.originalFiles[0].name)&&g.push(job_manager_ajax_file_upload.i18n_invalid_file_type+" "+h)}g.length>0?window.alert(g.join("\n")):(e.find(':input[type="submit"]').attr("disabled","disabled"),c.context=a('<progress value="" max="100"></progress>').appendTo(f),c.submit())},progress:function(a,b){var c=parseInt(b.loaded/b.total*100,10);b.context.val(c)},fail:function(b,c){var d=a(this),e=d.closest("form");c.errorThrown&&window.alert(c.errorThrown),c.context.remove(),e.find(':input[type="submit"]').removeAttr("disabled")},done:function(b,c){var d=a(this),e=d.closest("form"),f=d.parent().find(".job-manager-uploaded-files"),g=d.attr("multiple")?1:0,h=["jpg","gif","png","jpeg","jpe"];c.context.remove(),void 0===c.result.success||c.result.success||window.alert(c.result.data),a.each(c.result.files,function(b,c){if(c.error)window.alert(c.error);else{var e;a.inArray(c.extension,h)>=0?(e=a.parseHTML(job_manager_ajax_file_upload.js_field_html_img),a(e).find(".job-manager-uploaded-file-preview img").attr("src",c.url)):(e=a.parseHTML(job_manager_ajax_file_upload.js_field_html),a(e).find(".job-manager-uploaded-file-name code").text(c.name)),a(e).find(".input-text").val(c.url),a(e).find(".input-text").attr("name","current_"+d.attr("name")),g?f.append(e):f.html(e)}}),e.find(':input[type="submit"]').removeAttr("disabled")}})})});
1
+ jQuery(function(e){e(".wp-job-manager-file-upload").each(function(){e(this).fileupload({dataType:"json",dropZone:e(this),url:job_manager_ajax_file_upload.ajax_url.toString().replace("%%endpoint%%","upload_file"),maxNumberOfFiles:1,formData:{script:!0},add:function(a,t){var i=e(this),r=i.closest("form"),n=i.parent().find(".job-manager-uploaded-files"),o=[],l=e(this).data("file_types");if(l){var s=new RegExp("(.|/)("+l+")$","i");t.originalFiles[0].name.length&&!s.test(t.originalFiles[0].name)&&o.push(job_manager_ajax_file_upload.i18n_invalid_file_type+" "+l)}o.length>0?window.alert(o.join("\n")):(r.find(':input[type="submit"]').attr("disabled","disabled"),t.context=e('<progress value="" max="100"></progress>').appendTo(n),t.submit())},progress:function(e,a){var t=parseInt(a.loaded/a.total*100,10);a.context.val(t)},fail:function(a,t){var i=e(this).closest("form");t.errorThrown&&window.alert(t.errorThrown),t.context.remove(),i.find(':input[type="submit"]').removeAttr("disabled")},done:function(a,t){var i=e(this),r=i.closest("form"),n=i.parent().find(".job-manager-uploaded-files"),o=i.attr("multiple")?1:0,l=["jpg","gif","png","jpeg","jpe"];t.context.remove(),void 0===t.result.success||t.result.success||window.alert(t.result.data),e.each(t.result.files,function(a,t){if(t.error)window.alert(t.error);else{var r;e.inArray(t.extension,l)>=0?(r=e.parseHTML(job_manager_ajax_file_upload.js_field_html_img),e(r).find(".job-manager-uploaded-file-preview img").attr("src",t.url)):(r=e.parseHTML(job_manager_ajax_file_upload.js_field_html),e(r).find(".job-manager-uploaded-file-name code").text(t.name)),e(r).find(".input-text").val(t.url),e(r).find(".input-text").attr("name","current_"+i.attr("name")),o?n.append(r):n.html(r)}}),r.find(':input[type="submit"]').removeAttr("disabled")}})})});
assets/js/ajax-filters.js CHANGED
@@ -199,7 +199,7 @@ jQuery( document ).ready( function ( $ ) {
199
  var form = $( this ).closest( 'form' );
200
 
201
  form.find( ':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter' ).not(':input[type="hidden"]').val( '' ).trigger( 'chosen:updated' );
202
- form.find( ':input[name^="search_categories"]' ).not(':input[type="hidden"]').val( 0 ).trigger( 'chosen:updated' );
203
  $( ':input[name="filter_job_type[]"]', form ).not(':input[type="hidden"]').attr( 'checked', 'checked' );
204
 
205
  target.triggerHandler( 'reset' );
199
  var form = $( this ).closest( 'form' );
200
 
201
  form.find( ':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter' ).not(':input[type="hidden"]').val( '' ).trigger( 'chosen:updated' );
202
+ form.find( ':input[name^="search_categories"]' ).not(':input[type="hidden"]').val( '' ).trigger( 'chosen:updated' );
203
  $( ':input[name="filter_job_type[]"]', form ).not(':input[type="hidden"]').attr( 'checked', 'checked' );
204
 
205
  target.triggerHandler( 'reset' );
assets/js/ajax-filters.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){function b(b,c){if(d){var f=b.find(".job_filters"),g=a(f).serialize(),h=a("div.job_listings").index(b);window.history.replaceState({id:"job_manager_state",page:c,data:g,index:h},"",e+"#s=1")}}var c=[];a(".job_listings").on("update_results",function(b,d,e,f){var g,h,i,j="",k=a(this),l=k.find(".job_filters"),m=k.find(".showing_jobs"),n=k.find(".job_listings"),o=k.data("per_page"),p=k.data("orderby"),q=k.data("order"),r=k.data("featured"),s=k.data("filled"),t=k.data("job_types"),u=k.data("post_status"),v=a("div.job_listings").index(this);if(!(v<0)){if(c[v]&&c[v].abort(),e||(a(n).addClass("loading"),a("li.job_listing, li.no_job_listings_found",n).css("visibility","hidden"),d>1&&!0!==k.data("show_pagination")?a(n).before('<a class="load_more_jobs load_previous" href="#"><strong>'+job_manager_ajax_filters.i18n_load_prev_listings+"</strong></a>"):k.find(".load_previous").remove(),k.find(".load_more_jobs").data("page",d)),!0===k.data("show_filters")){var w=[];a(':input[name="filter_job_type[]"]:checked, :input[name="filter_job_type[]"][type="hidden"], :input[name="filter_job_type"]',l).each(function(){w.push(a(this).val())}),g=l.find(':input[name^="search_categories"]').map(function(){return a(this).val()}).get(),h="",i="";var x=l.find(':input[name="search_keywords"]'),y=l.find(':input[name="search_location"]');x.val()!==x.attr("placeholder")&&(h=x.val()),y.val()!==y.attr("placeholder")&&(i=y.val()),j={lang:job_manager_ajax_filters.lang,search_keywords:h,search_location:i,search_categories:g,filter_job_type:w,filter_post_status:u,per_page:o,orderby:p,order:q,page:d,featured:r,filled:s,show_pagination:k.data("show_pagination"),form_data:l.serialize()}}else g=k.data("categories"),h=k.data("keywords"),i=k.data("location"),g&&(g=g.split(",")),j={lang:job_manager_ajax_filters.lang,search_categories:g,search_keywords:h,search_location:i,filter_post_status:u,filter_job_type:t,per_page:o,orderby:p,order:q,page:d,featured:r,filled:s,show_pagination:k.data("show_pagination")};c[v]=a.ajax({type:"POST",url:job_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%","get_listings"),data:j,success:function(b){if(b)try{b.showing?a(m).show().html("<span>"+b.showing+"</span>"+b.showing_links):a(m).hide(),b.showing_all?a(m).addClass("wp-job-manager-showing-all"):a(m).removeClass("wp-job-manager-showing-all"),b.html&&(e&&f?a(n).prepend(b.html):e?a(n).append(b.html):a(n).html(b.html)),!0===k.data("show_pagination")?(k.find(".job-manager-pagination").remove(),b.pagination&&k.append(b.pagination)):(!b.found_jobs||b.max_num_pages<=d?a(".load_more_jobs:not(.load_previous)",k).hide():f||a(".load_more_jobs",k).show(),a(".load_more_jobs",k).removeClass("loading"),a("li.job_listing",n).css("visibility","visible")),a(n).removeClass("loading"),k.triggerHandler("updated_results",b)}catch(c){window.console&&window.console.log(c)}},error:function(a,b,c){window.console&&"abort"!==b&&window.console.log(b+": "+c)},statusCode:{404:function(){window.console&&window.console.log("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")}}})}}),a("#search_keywords, #search_location, .job_types :input, #search_categories, .job-manager-filter").change(function(){var c=a(this).closest("div.job_listings");c.triggerHandler("update_results",[1,!1]),b(c,1)}).on("keyup",function(b){13===b.which&&a(this).trigger("change")}),a(".job_filters").on("click",".reset",function(){var c=a(this).closest("div.job_listings"),d=a(this).closest("form");return d.find(':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter').not(':input[type="hidden"]').val("").trigger("chosen:updated"),d.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val(0).trigger("chosen:updated"),a(':input[name="filter_job_type[]"]',d).not(':input[type="hidden"]').attr("checked","checked"),c.triggerHandler("reset"),c.triggerHandler("update_results",[1,!1]),b(c,1),!1}),a(document.body).on("click",".load_more_jobs",function(){var c=a(this).closest("div.job_listings"),d=parseInt(a(this).data("page")||1,10),e=!1;return a(this).addClass("loading"),a(this).is(".load_previous")?(d-=1,e=!0,1===d?a(this).remove():a(this).data("page",d)):(d+=1,a(this).data("page",d),b(c,d)),c.triggerHandler("update_results",[d,!0,e]),!1}),a("div.job_listings").on("click",".job-manager-pagination a",function(){var c=a(this).closest("div.job_listings"),d=a(this).data("page");return b(c,d),c.triggerHandler("update_results",[d,!1]),a("body, html").animate({scrollTop:c.offset().top},600),!1}),a.isFunction(a.fn.chosen)&&(1===job_manager_ajax_filters.is_rtl&&a('select[name^="search_categories"]').addClass("chosen-rtl"),a('select[name^="search_categories"]').chosen({search_contains:!0}));var d=!1;window.history&&window.history.pushState&&(d=!0);var e=document.location.href.split("#")[0];a(window).on("load",function(){a(".job_filters").each(function(){var b=a(this).closest("div.job_listings"),c=b.find(".job_filters"),d=1,e=a("div.job_listings").index(b);if(window.history.state&&window.location.hash){var f=window.history.state;f.id&&"job_manager_state"===f.id&&e===f.index&&(d=f.page,c.deserialize(f.data),c.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger("chosen:updated"))}b.triggerHandler("update_results",[d,!1])})})});
1
+ jQuery(document).ready(function(e){function a(a,t){if(i){var n=a.find(".job_filters"),s=e(n).serialize(),r=e("div.job_listings").index(a);window.history.replaceState({id:"job_manager_state",page:t,data:s,index:r},"",o+"#s=1")}}var t=[];e(".job_listings").on("update_results",function(a,i,o,n){var s,r,d,l="",_=e(this),g=_.find(".job_filters"),c=_.find(".showing_jobs"),p=_.find(".job_listings"),h=_.data("per_page"),u=_.data("orderby"),f=_.data("order"),b=_.data("featured"),j=_.data("filled"),m=_.data("job_types"),w=_.data("post_status"),v=e("div.job_listings").index(this);if(!(v<0)){if(t[v]&&t[v].abort(),o||(e(p).addClass("loading"),e("li.job_listing, li.no_job_listings_found",p).css("visibility","hidden"),i>1&&!0!==_.data("show_pagination")?e(p).before('<a class="load_more_jobs load_previous" href="#"><strong>'+job_manager_ajax_filters.i18n_load_prev_listings+"</strong></a>"):_.find(".load_previous").remove(),_.find(".load_more_jobs").data("page",i)),!0===_.data("show_filters")){var y=[];e(':input[name="filter_job_type[]"]:checked, :input[name="filter_job_type[]"][type="hidden"], :input[name="filter_job_type"]',g).each(function(){y.push(e(this).val())}),s=g.find(':input[name^="search_categories"]').map(function(){return e(this).val()}).get(),r="",d="";var k=g.find(':input[name="search_keywords"]'),x=g.find(':input[name="search_location"]');k.val()!==k.attr("placeholder")&&(r=k.val()),x.val()!==x.attr("placeholder")&&(d=x.val()),l={lang:job_manager_ajax_filters.lang,search_keywords:r,search_location:d,search_categories:s,filter_job_type:y,filter_post_status:w,per_page:h,orderby:u,order:f,page:i,featured:b,filled:j,show_pagination:_.data("show_pagination"),form_data:g.serialize()}}else s=_.data("categories"),r=_.data("keywords"),d=_.data("location"),s&&(s=s.split(",")),l={lang:job_manager_ajax_filters.lang,search_categories:s,search_keywords:r,search_location:d,filter_post_status:w,filter_job_type:m,per_page:h,orderby:u,order:f,page:i,featured:b,filled:j,show_pagination:_.data("show_pagination")};t[v]=e.ajax({type:"POST",url:job_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%","get_listings"),data:l,success:function(a){if(a)try{a.showing?e(c).show().html("<span>"+a.showing+"</span>"+a.showing_links):e(c).hide(),a.showing_all?e(c).addClass("wp-job-manager-showing-all"):e(c).removeClass("wp-job-manager-showing-all"),a.html&&(o&&n?e(p).prepend(a.html):o?e(p).append(a.html):e(p).html(a.html)),!0===_.data("show_pagination")?(_.find(".job-manager-pagination").remove(),a.pagination&&_.append(a.pagination)):(!a.found_jobs||a.max_num_pages<=i?e(".load_more_jobs:not(.load_previous)",_).hide():n||e(".load_more_jobs",_).show(),e(".load_more_jobs",_).removeClass("loading"),e("li.job_listing",p).css("visibility","visible")),e(p).removeClass("loading"),_.triggerHandler("updated_results",a)}catch(e){window.console&&window.console.log(e)}},error:function(e,a,t){window.console&&"abort"!==a&&window.console.log(a+": "+t)},statusCode:{404:function(){window.console&&window.console.log("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")}}})}}),e("#search_keywords, #search_location, .job_types :input, #search_categories, .job-manager-filter").change(function(){var t=e(this).closest("div.job_listings");t.triggerHandler("update_results",[1,!1]),a(t,1)}).on("keyup",function(a){13===a.which&&e(this).trigger("change")}),e(".job_filters").on("click",".reset",function(){var t=e(this).closest("div.job_listings"),i=e(this).closest("form");return i.find(':input[name="search_keywords"], :input[name="search_location"], .job-manager-filter').not(':input[type="hidden"]').val("").trigger("chosen:updated"),i.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val("").trigger("chosen:updated"),e(':input[name="filter_job_type[]"]',i).not(':input[type="hidden"]').attr("checked","checked"),t.triggerHandler("reset"),t.triggerHandler("update_results",[1,!1]),a(t,1),!1}),e(document.body).on("click",".load_more_jobs",function(){var t=e(this).closest("div.job_listings"),i=parseInt(e(this).data("page")||1,10),o=!1;return e(this).addClass("loading"),e(this).is(".load_previous")?(o=!0,1===(i-=1)?e(this).remove():e(this).data("page",i)):(i+=1,e(this).data("page",i),a(t,i)),t.triggerHandler("update_results",[i,!0,o]),!1}),e("div.job_listings").on("click",".job-manager-pagination a",function(){var t=e(this).closest("div.job_listings"),i=e(this).data("page");return a(t,i),t.triggerHandler("update_results",[i,!1]),e("body, html").animate({scrollTop:t.offset().top},600),!1}),e.isFunction(e.fn.chosen)&&(1===job_manager_ajax_filters.is_rtl&&e('select[name^="search_categories"]').addClass("chosen-rtl"),e('select[name^="search_categories"]').chosen({search_contains:!0}));var i=!1;window.history&&window.history.pushState&&(i=!0);var o=document.location.href.split("#")[0];e(window).on("load",function(){e(".job_filters").each(function(){var a=e(this).closest("div.job_listings"),t=a.find(".job_filters"),i=1,o=e("div.job_listings").index(a);if(window.history.state&&window.location.hash){var n=window.history.state;n.id&&"job_manager_state"===n.id&&o===n.index&&(i=n.page,t.deserialize(n.data),t.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger("chosen:updated"))}a.triggerHandler("update_results",[i,!1])})})});
assets/js/job-application.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){a("body").hasClass("job-application-details-keep-open")||a(".application_details").hide(),a(".application_button").click(function(){a(".application_details").slideToggle()})});
1
+ jQuery(document).ready(function(i){i("body").hasClass("job-application-details-keep-open")||i(".application_details").hide(),i(".application_button").click(function(){i(".application_details").slideToggle()})});
assets/js/job-dashboard.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){a(".job-dashboard-action-delete").click(function(){return window.confirm(job_manager_job_dashboard.i18n_confirm_delete)})});
1
+ jQuery(document).ready(function(n){n(".job-dashboard-action-delete").click(function(){return window.confirm(job_manager_job_dashboard.i18n_confirm_delete)})});
assets/js/job-submission.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(a){a("body").on("click",".job-manager-remove-uploaded-file",function(){return a(this).closest(".job-manager-uploaded-file").remove(),!1})});
1
+ jQuery(document).ready(function(e){e("body").on("click",".job-manager-remove-uploaded-file",function(){return e(this).closest(".job-manager-uploaded-file").remove(),!1})});
changelog.txt CHANGED
@@ -1,5 +1,13 @@
 
 
 
 
 
 
 
 
1
  = 1.28.0 =
2
- * Enhancement: Improves support for Google Job Search by adding `JobListing` structured data. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1115)
3
  * Enhancement: Adds ability for job types to be mapped to an employment type as defined for Google Job Search. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1112)
4
  * Enhancement: Requests search engines no longer index expired and filled job listings. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1120)
5
  * Enhancement: Improves support with third-party sitemap generation in Jetpack, Yoast SEO, and All in One SEO. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1119)
1
+ = 1.29.0 =
2
+ * Enhancement: Moves license and update management for official add-ons to the core plugin. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1168)
3
+ * Enhancement: Update language for setup wizard with more clear descriptions. (@donnapep; https://github.com/Automattic/WP-Job-Manager/pull/1194)
4
+ * Fix: Prevent duplicate attachments to job listing posts for non-image media. (@tripflex; https://github.com/Automattic/WP-Job-Manager/pull/1144)
5
+ * Fix: PHP error on registration form due to missing placeholder text. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1180)
6
+ * Fix: Apply `the_job_application_method` filter even when no default is available. (@turtlepod; https://github.com/Automattic/WP-Job-Manager/issues/1164)
7
+ * Fix: Properly reset category selector on `[jobs]` shortcode. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1190)
8
+
9
  = 1.28.0 =
10
+ * Enhancement: Improves support for Google Job Search by adding `JobPosting` structured data. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1115)
11
  * Enhancement: Adds ability for job types to be mapped to an employment type as defined for Google Job Search. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1112)
12
  * Enhancement: Requests search engines no longer index expired and filled job listings. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1120)
13
  * Enhancement: Improves support with third-party sitemap generation in Jetpack, Yoast SEO, and All in One SEO. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1119)
includes/admin/class-wp-job-manager-addons.php CHANGED
@@ -79,11 +79,21 @@ class WP_Job_Manager_Addons {
79
 
80
  ?>
81
  <div class="wrap wp_job_manager wp_job_manager_addons_wrap">
82
- <h2><?php _e( 'WP Job Manager Add-ons', 'wp-job-manager' ); ?></h2>
83
-
84
- <div id="job-manager-addons-banner" class="notice updated below-h2"><strong><?php _e( 'Do you need multiple add-ons?', 'wp-job-manager' ); ?></strong> <a href="https://wpjobmanager.com/add-ons/bundle/" class="button"><?php _e( 'Check out the core add-on bundle &rarr;', 'wp-job-manager' ); ?></a></div>
85
-
86
- <?php echo $addons; ?>
 
 
 
 
 
 
 
 
 
 
87
  </div>
88
  <?php
89
  }
79
 
80
  ?>
81
  <div class="wrap wp_job_manager wp_job_manager_addons_wrap">
82
+ <nav class="nav-tab-wrapper woo-nav-tab-wrapper">
83
+ <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=job_listing&page=job-manager-addons' ) ); ?>" class="nav-tab<?php if ( ! isset( $_GET['section'] ) || 'helper' !== $_GET['section'] ) { echo ' nav-tab-active'; } ?>"><?php _e( 'WP Job Manager Add-ons', 'wp-job-manager' ); ?></a>
84
+ <?php if ( current_user_can( 'update_plugins' ) ) : ?>
85
+ <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=job_listing&page=job-manager-addons&section=helper' ) ); ?>" class="nav-tab<?php if ( isset( $_GET['section'] ) && 'helper' === $_GET['section'] ) { echo ' nav-tab-active'; } ?>"><?php _e( 'Licenses', 'wp-job-manager' ); ?></a>
86
+ <?php endif; ?>
87
+ </nav>
88
+ <?php
89
+ if ( isset( $_GET['section'] ) && 'helper' === $_GET['section'] ) {
90
+ do_action( 'job_manager_helper_output' );
91
+ } else {
92
+ echo '<h1 class="screen-reader-text">' . __( 'WP Job Manager Add-ons', 'wp-job-manager' ) . '</h1>';
93
+ echo '<div id="job-manager-addons-banner" class="notice updated below-h2"><strong>' . __( 'Do you need multiple add-ons?', 'wp-job-manager' ) . '</strong> <a href="https://wpjobmanager.com/add-ons/bundle/" class="button">' . __( 'Check out the core add-on bundle &rarr;', 'wp-job-manager' ) . '</a></div>';
94
+ echo $addons;
95
+ }
96
+ ?>
97
  </div>
98
  <?php
99
  }
includes/admin/class-wp-job-manager-admin.php CHANGED
@@ -86,7 +86,7 @@ class WP_Job_Manager_Admin {
86
 
87
  $screen = get_current_screen();
88
 
89
- if ( in_array( $screen->id, apply_filters( 'job_manager_admin_screen_ids', array( 'edit-job_listing', 'job_listing', 'job_listing_page_job-manager-settings', 'job_listing_page_job-manager-addons' ) ) ) ) {
90
  $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
91
 
92
  wp_enqueue_style( 'jquery-ui-style', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version );
@@ -109,7 +109,7 @@ class WP_Job_Manager_Admin {
109
  public function admin_menu() {
110
  add_submenu_page( 'edit.php?post_type=job_listing', __( 'Settings', 'wp-job-manager' ), __( 'Settings', 'wp-job-manager' ), 'manage_options', 'job-manager-settings', array( $this->settings_page, 'output' ) );
111
 
112
- if ( apply_filters( 'job_manager_show_addons_page', true ) )
113
  add_submenu_page( 'edit.php?post_type=job_listing', __( 'WP Job Manager Add-ons', 'wp-job-manager' ), __( 'Add-ons', 'wp-job-manager' ) , 'manage_options', 'job-manager-addons', array( $this, 'addons_page' ) );
114
  }
115
 
86
 
87
  $screen = get_current_screen();
88
 
89
+ if ( in_array( $screen->id, apply_filters( 'job_manager_admin_screen_ids', array( 'edit-job_listing', 'plugins', 'job_listing', 'job_listing_page_job-manager-settings', 'job_listing_page_job-manager-addons' ) ) ) ) {
90
  $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
91
 
92
  wp_enqueue_style( 'jquery-ui-style', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version );
109
  public function admin_menu() {
110
  add_submenu_page( 'edit.php?post_type=job_listing', __( 'Settings', 'wp-job-manager' ), __( 'Settings', 'wp-job-manager' ), 'manage_options', 'job-manager-settings', array( $this->settings_page, 'output' ) );
111
 
112
+ if ( WP_Job_Manager_Helper::instance()->has_licenced_products() || apply_filters( 'job_manager_show_addons_page', true ) )
113
  add_submenu_page( 'edit.php?post_type=job_listing', __( 'WP Job Manager Add-ons', 'wp-job-manager' ), __( 'Add-ons', 'wp-job-manager' ) , 'manage_options', 'job-manager-addons', array( $this, 'addons_page' ) );
114
  }
115
 
includes/admin/class-wp-job-manager-setup.php CHANGED
@@ -155,15 +155,15 @@ class WP_Job_Manager_Setup {
155
 
156
  <?php if ( 1 === $step ) : ?>
157
 
158
- <h3><?php _e( 'Setup Wizard Introduction', 'wp-job-manager' ); ?></h3>
159
 
160
- <p><?php _e( 'Thanks for installing <em>WP Job Manager</em>!', 'wp-job-manager' ); ?></p>
161
- <p><?php _e( 'This setup wizard will help you get started by creating the pages for job submission, job management, and listing your jobs.', 'wp-job-manager' ); ?></p>
162
- <p><?php printf( __( 'If you want to skip the wizard and setup the pages and shortcodes yourself manually, the process is still relatively simple. Refer to the %sdocumentation%s for help.', 'wp-job-manager' ), '<a href="https://wpjobmanager.com/documentation/">', '</a>' ); ?></p>
163
 
164
  <p class="submit">
165
- <a href="<?php echo esc_url( add_query_arg( 'step', 2 ) ); ?>" class="button button-primary"><?php _e( 'Continue to page setup', 'wp-job-manager' ); ?></a>
166
- <a href="<?php echo esc_url( add_query_arg( 'skip-job-manager-setup', 1, admin_url( 'index.php?page=job-manager-setup&step=3' ) ) ); ?>" class="button"><?php _e( 'Skip setup. I will setup the plugin manually', 'wp-job-manager' ); ?></a>
167
  </p>
168
 
169
  <?php endif; ?>
@@ -171,7 +171,8 @@ class WP_Job_Manager_Setup {
171
 
172
  <h3><?php _e( 'Page Setup', 'wp-job-manager' ); ?></h3>
173
 
174
- <p><?php printf( __( '<em>WP Job Manager</em> includes %1$sshortcodes%2$s which can be used within your %3$spages%2$s to output content. These can be created for you below. For more information on the job shortcodes view the %4$sshortcode documentation%2$s.', 'wp-job-manager' ), '<a href="http://codex.wordpress.org/Shortcode" title="What is a shortcode?" target="_blank" class="help-page-link">', '</a>', '<a href="http://codex.wordpress.org/Pages" target="_blank" class="help-page-link">', '<a href="https://wpjobmanager.com/document/shortcode-reference/" target="_blank" class="help-page-link">' ); ?></p>
 
175
 
176
  <form action="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>" method="post">
177
  <?php wp_nonce_field( 'step_3', 'setup_wizard' ); ?>
@@ -189,9 +190,7 @@ class WP_Job_Manager_Setup {
189
  <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[submit_job_form]" /></td>
190
  <td><input type="text" value="<?php echo esc_attr( _x( 'Post a Job', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[submit_job_form]" /></td>
191
  <td>
192
- <p><?php _e( 'This page allows employers to post jobs to your website from the front-end.', 'wp-job-manager' ); ?></p>
193
-
194
- <p><?php _e( 'If you do not want to accept submissions from users in this way (for example you just want to post jobs from the admin dashboard) you can skip creating this page.', 'wp-job-manager' ); ?></p>
195
  </td>
196
  <td><code>[submit_job_form]</code></td>
197
  </tr>
@@ -199,16 +198,14 @@ class WP_Job_Manager_Setup {
199
  <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[job_dashboard]" /></td>
200
  <td><input type="text" value="<?php echo esc_attr( _x( 'Job Dashboard', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[job_dashboard]" /></td>
201
  <td>
202
- <p><?php _e( 'This page allows employers to manage and edit their own jobs from the front-end.', 'wp-job-manager' ); ?></p>
203
-
204
- <p><?php _e( 'If you plan on managing all listings from the admin dashboard you can skip creating this page.', 'wp-job-manager' ); ?></p>
205
  </td>
206
  <td><code>[job_dashboard]</code></td>
207
  </tr>
208
  <tr>
209
  <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[jobs]" /></td>
210
  <td><input type="text" value="<?php echo esc_attr( _x( 'Jobs', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[jobs]" /></td>
211
- <td><?php _e( 'This page allows users to browse, search, and filter job listings on the front-end of your site.', 'wp-job-manager' ); ?></td>
212
  <td><code>[jobs]</code></td>
213
  </tr>
214
  </tbody>
@@ -226,38 +223,38 @@ class WP_Job_Manager_Setup {
226
  <?php endif; ?>
227
  <?php if ( 3 === $step ) : ?>
228
 
229
- <h3><?php _e( 'All Done!', 'wp-job-manager' ); ?></h3>
230
 
231
- <p><?php _e( 'Looks like you\'re all set to start using the plugin. In case you\'re wondering where to go next:', 'wp-job-manager' ); ?></p>
232
 
233
  <ul class="wp-job-manager-next-steps">
234
- <li><a href="<?php echo admin_url( 'edit.php?post_type=job_listing&page=job-manager-settings' ); ?>"><?php _e( 'Tweak the plugin settings', 'wp-job-manager' ); ?></a></li>
235
- <li><a href="<?php echo admin_url( 'post-new.php?post_type=job_listing' ); ?>"><?php _e( 'Add a job via the back-end', 'wp-job-manager' ); ?></a></li>
236
 
237
- <?php if ( $permalink = job_manager_get_permalink( 'submit_job_form' ) ) : ?>
238
- <li><a href="<?php echo esc_url( $permalink ); ?>"><?php _e( 'Add a job via the front-end', 'wp-job-manager' ); ?></a></li>
239
  <?php else : ?>
240
- <li><a href="https://wpjobmanager.com/document/the-job-submission-form/"><?php _e( 'Find out more about the front-end job submission form', 'wp-job-manager' ); ?></a></li>
241
  <?php endif; ?>
242
 
243
- <?php if ( $permalink = job_manager_get_permalink( 'jobs' ) ) : ?>
244
- <li><a href="<?php echo esc_url( $permalink ); ?>"><?php _e( 'View submitted job listings', 'wp-job-manager' ); ?></a></li>
245
  <?php else : ?>
246
- <li><a href="https://wpjobmanager.com/document/shortcode-reference/#section-1"><?php _e( 'Add the [jobs] shortcode to a page to list jobs', 'wp-job-manager' ); ?></a></li>
247
  <?php endif; ?>
248
 
249
  <?php if ( $permalink = job_manager_get_permalink( 'job_dashboard' ) ) : ?>
250
  <li><a href="<?php echo esc_url( $permalink ); ?>"><?php _e( 'View the job dashboard', 'wp-job-manager' ); ?></a></li>
251
  <?php else : ?>
252
- <li><a href="https://wpjobmanager.com/document/the-job-dashboard/"><?php _e( 'Find out more about the front-end job dashboard', 'wp-job-manager' ); ?></a></li>
253
  <?php endif; ?>
254
  </ul>
255
 
256
- <p><?php printf( __( 'And don\'t forget, if you need any more help using <em>WP Job Manager</em> you can consult the %1$sdocumentation%2$s or %3$spost on the forums%2$s!', 'wp-job-manager' ), '<a href="https://wpjobmanager.com/documentation/">', '</a>', '<a href="https://wordpress.org/support/plugin/wp-job-manager">' ); ?></p>
257
 
258
  <div class="wp-job-manager-support-the-plugin">
259
- <h3><?php _e( 'Support the Ongoing Development of this Plugin', 'wp-job-manager' ); ?></h3>
260
- <p><?php _e( 'There are many ways to support open-source projects such as WP Job Manager, for example code contribution, translation, or even telling your friends how awesome the plugin (hopefully) is. Thanks in advance for your support - it is much appreciated!', 'wp-job-manager' ); ?></p>
261
  <ul>
262
  <li class="icon-review"><a href="https://wordpress.org/support/view/plugin-reviews/wp-job-manager#postform"><?php _e( 'Leave a positive review', 'wp-job-manager' ); ?></a></li>
263
  <li class="icon-localization"><a href="https://translate.wordpress.org/projects/wp-plugins/wp-job-manager"><?php _e( 'Contribute a localization', 'wp-job-manager' ); ?></a></li>
155
 
156
  <?php if ( 1 === $step ) : ?>
157
 
158
+ <h3><?php _e( 'Welcome to the Setup Wizard!', 'wp-job-manager' ); ?></h3>
159
 
160
+ <p><?php _e( 'Thanks for installing <em>WP Job Manager</em>! Let\'s get your site ready to accept job listings.', 'wp-job-manager' ); ?></p>
161
+ <p><?php _e( 'This setup wizard will walk you through the process of creating pages for job submissions, management, and listings.', 'wp-job-manager' ); ?></p>
162
+ <p><?php printf( __( 'If you\'d prefer to skip this and set up your pages manually, our %sdocumentation%s will walk you through each step.', 'wp-job-manager' ), '<a href="https://wpjobmanager.com/documentation/">', '</a>' ); ?></p>
163
 
164
  <p class="submit">
165
+ <a href="<?php echo esc_url( add_query_arg( 'step', 2 ) ); ?>" class="button button-primary"><?php _e( 'Start setup', 'wp-job-manager' ); ?></a>
166
+ <a href="<?php echo esc_url( add_query_arg( 'skip-job-manager-setup', 1, admin_url( 'index.php?page=job-manager-setup&step=3' ) ) ); ?>" class="button"><?php _e( 'Skip setup. I will set up the plugin manually.', 'wp-job-manager' ); ?></a>
167
  </p>
168
 
169
  <?php endif; ?>
171
 
172
  <h3><?php _e( 'Page Setup', 'wp-job-manager' ); ?></h3>
173
 
174
+ <p><?php _e( 'With WP Job Manager, employers and applicants can post, manage, and browse job listings right on your website. Tell us which of these common pages you\'d like your site to have and we\'ll create and configure them for you.', 'wp-job-manager' ); ?></p>
175
+ <p><?php printf( __( '(These pages are created using %1$sshortcodes%2$s, which we take care of in this step. If you\'d like to build these pages yourself or want to add one of these options to an existing page on your site, you can skip this step and take a look at %4$sshortcode documentation%2$s for detailed instructions.)', 'wp-job-manager' ), '<a href="http://codex.wordpress.org/Shortcode" title="What is a shortcode?" target="_blank" class="help-page-link">', '</a>', '<a href="http://codex.wordpress.org/Pages" target="_blank" class="help-page-link">', '<a href="https://wpjobmanager.com/document/shortcode-reference/" target="_blank" class="help-page-link">' ); ?></p>
176
 
177
  <form action="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>" method="post">
178
  <?php wp_nonce_field( 'step_3', 'setup_wizard' ); ?>
190
  <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[submit_job_form]" /></td>
191
  <td><input type="text" value="<?php echo esc_attr( _x( 'Post a Job', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[submit_job_form]" /></td>
192
  <td>
193
+ <p><?php _e( 'Creates a page that allows employers to post new jobs directly from a page on your website, instead of requiring them to log in to an admin area. If you\'d rather not allow this -- for example, if you want employers to use the admin dashboard only -- you can uncheck this setting.', 'wp-job-manager' ); ?></p>
 
 
194
  </td>
195
  <td><code>[submit_job_form]</code></td>
196
  </tr>
198
  <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[job_dashboard]" /></td>
199
  <td><input type="text" value="<?php echo esc_attr( _x( 'Job Dashboard', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[job_dashboard]" /></td>
200
  <td>
201
+ <p><?php _e( 'Creates a page that allows employers to manage their job listings directly from a page on your website, instead of requiring them to log in to an admin area. If you want to manage all job listings from the admin dashboard only, you can uncheck this setting.', 'wp-job-manager' ); ?></p>
 
 
202
  </td>
203
  <td><code>[job_dashboard]</code></td>
204
  </tr>
205
  <tr>
206
  <td><input type="checkbox" checked="checked" name="wp-job-manager-create-page[jobs]" /></td>
207
  <td><input type="text" value="<?php echo esc_attr( _x( 'Jobs', 'Default page title (wizard)', 'wp-job-manager' ) ); ?>" name="wp-job-manager-page-title[jobs]" /></td>
208
+ <td><?php _e( 'Creates a page where visitors can browse, search, and filter job listings.', 'wp-job-manager' ); ?></td>
209
  <td><code>[jobs]</code></td>
210
  </tr>
211
  </tbody>
223
  <?php endif; ?>
224
  <?php if ( 3 === $step ) : ?>
225
 
226
+ <h3><?php _e( 'You\'re ready to start using WP Job Manager!', 'wp-job-manager' ); ?></h3>
227
 
228
+ <p><?php _e( 'Wondering what to do now? Here are some of the most common next steps:', 'wp-job-manager' ); ?></p>
229
 
230
  <ul class="wp-job-manager-next-steps">
231
+ <li><a href="<?php echo admin_url( 'edit.php?post_type=job_listing&page=job-manager-settings' ); ?>"><?php _e( 'Tweak your settings', 'wp-job-manager' ); ?></a></li>
232
+ <li><a href="<?php echo admin_url( 'post-new.php?post_type=job_listing' ); ?>"><?php _e( 'Add a job using the admin dashboard', 'wp-job-manager' ); ?></a></li>
233
 
234
+ <?php if ( $permalink = job_manager_get_permalink( 'jobs' ) ) : ?>
235
+ <li><a href="<?php echo esc_url( $permalink ); ?>"><?php _e( 'View submitted job listings', 'wp-job-manager' ); ?></a></li>
236
  <?php else : ?>
237
+ <li><a href="https://wpjobmanager.com/document/shortcode-reference/#section-1"><?php _e( 'Add job listings to a page using the [jobs] shortcode', 'wp-job-manager' ); ?></a></li>
238
  <?php endif; ?>
239
 
240
+ <?php if ( $permalink = job_manager_get_permalink( 'submit_job_form' ) ) : ?>
241
+ <li><a href="<?php echo esc_url( $permalink ); ?>"><?php _e( 'Add a job via the front-end', 'wp-job-manager' ); ?></a></li>
242
  <?php else : ?>
243
+ <li><a href="https://wpjobmanager.com/document/the-job-submission-form/"><?php _e( 'Learn to use the front-end job submission board', 'wp-job-manager' ); ?></a></li>
244
  <?php endif; ?>
245
 
246
  <?php if ( $permalink = job_manager_get_permalink( 'job_dashboard' ) ) : ?>
247
  <li><a href="<?php echo esc_url( $permalink ); ?>"><?php _e( 'View the job dashboard', 'wp-job-manager' ); ?></a></li>
248
  <?php else : ?>
249
+ <li><a href="https://wpjobmanager.com/document/the-job-dashboard/"><?php _e( 'Learn to use the front-end job dashboard', 'wp-job-manager' ); ?></a></li>
250
  <?php endif; ?>
251
  </ul>
252
 
253
+ <p><?php printf( __( 'If you need help, you can find more detail in our %1$ssupport documentation%2$s or post your question on the %3$sWP Job Manager support forums%2$s. Happy hiring!', 'wp-job-manager' ), '<a href="https://wpjobmanager.com/documentation/">', '</a>', '<a href="https://wordpress.org/support/plugin/wp-job-manager">' ); ?></p>
254
 
255
  <div class="wp-job-manager-support-the-plugin">
256
+ <h3><?php _e( 'Support WP Job Manager\'s Ongoing Development', 'wp-job-manager' ); ?></h3>
257
+ <p><?php _e( 'There are lots of ways you can support open source software projects like this one: contributing code, fixing a bug, assisting with non-English translation, or just telling your friends about WP Job Manager to help spread the word. We appreciate your support!', 'wp-job-manager' ); ?></p>
258
  <ul>
259
  <li class="icon-review"><a href="https://wordpress.org/support/view/plugin-reviews/wp-job-manager#postform"><?php _e( 'Leave a positive review', 'wp-job-manager' ); ?></a></li>
260
  <li class="icon-localization"><a href="https://translate.wordpress.org/projects/wp-plugins/wp-job-manager"><?php _e( 'Contribute a localization', 'wp-job-manager' ); ?></a></li>
includes/forms/class-wp-job-manager-form-submit-job.php CHANGED
@@ -689,7 +689,7 @@ class WP_Job_Manager_Form_Submit_Job extends WP_Job_Manager_Form {
689
  // Handle attachments
690
  if ( sizeof( $maybe_attach ) && apply_filters( 'job_manager_attach_uploaded_files', true ) ) {
691
  // Get attachments
692
- $attachments = get_posts( 'post_parent=' . $this->job_id . '&post_type=attachment&fields=ids&post_mime_type=image&numberposts=-1' );
693
  $attachment_urls = array();
694
 
695
  // Loop attachments already attached to the job
689
  // Handle attachments
690
  if ( sizeof( $maybe_attach ) && apply_filters( 'job_manager_attach_uploaded_files', true ) ) {
691
  // Get attachments
692
+ $attachments = get_posts( 'post_parent=' . $this->job_id . '&post_type=attachment&fields=ids&numberposts=-1' );
693
  $attachment_urls = array();
694
 
695
  // Loop attachments already attached to the job
includes/helper/class-wp-job-manager-helper-api.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ }
6
+
7
+ /**
8
+ * WP_Job_Manager_Helper_API
9
+ */
10
+ class WP_Job_Manager_Helper_API {
11
+
12
+ const API_BASE_URL = 'https://wpjobmanager.com/';
13
+
14
+ /**
15
+ * The single instance of the class.
16
+ *
17
+ * @var self
18
+ * @since 1.29.0
19
+ */
20
+ private static $_instance = null;
21
+
22
+ /**
23
+ * Allows for accessing single instance of class. Class should only be constructed once per call.
24
+ *
25
+ * @since 1.29.0
26
+ * @static
27
+ * @return self Main instance.
28
+ */
29
+ public static function instance() {
30
+ if ( is_null( self::$_instance ) ) {
31
+ self::$_instance = new self();
32
+ }
33
+ return self::$_instance;
34
+ }
35
+
36
+ /**
37
+ * Sends and receives data to and from the server API
38
+ *
39
+ * @param array|string $args
40
+ * @return object|bool $response
41
+ */
42
+ public function plugin_update_check( $args ) {
43
+ $args = wp_parse_args( $args );
44
+ $args['wc-api'] = 'wp_plugin_licencing_update_api';
45
+ $args['request'] = 'pluginupdatecheck';
46
+ return $this->request( $args );
47
+ }
48
+
49
+ /**
50
+ * Sends and receives data to and from the server API
51
+ *
52
+ * @param array|string $args
53
+ * @return object $response
54
+ */
55
+ public function plugin_information( $args ) {
56
+ $args = wp_parse_args( $args );
57
+ $args['wc-api'] = 'wp_plugin_licencing_update_api';
58
+ $args['request'] = 'plugininformation';
59
+ return $this->request( $args );
60
+ }
61
+
62
+ /**
63
+ * Attempt to activate a plugin licence.
64
+ *
65
+ * @param array|string $args
66
+ * @return boolean|string JSON response or false if failed.
67
+ */
68
+ public function activate( $args ) {
69
+ $args = wp_parse_args( $args );
70
+ $args['wc-api'] = 'wp_plugin_licencing_activation_api';
71
+ $args['request'] = 'activate';
72
+ $response = $this->request( $args, true );
73
+ if ( false === $response ) {
74
+ return false;
75
+ }
76
+ return $response;
77
+ }
78
+
79
+ /**
80
+ * Attempt to deactivate a plugin licence.
81
+ *
82
+ * @param array|string $args
83
+ * @return boolean|string JSON response or false if failed.
84
+ */
85
+ public function deactivate( $args ) {
86
+ $args = wp_parse_args( $args );
87
+ $args['wc-api'] = 'wp_plugin_licencing_activation_api';
88
+ $args['request'] = 'deactivate';
89
+ $response = $this->request( $args, false );
90
+ if ( false === $response ) {
91
+ return false;
92
+ }
93
+ return $response;
94
+ }
95
+
96
+ /**
97
+ * Make a licence helper API request.
98
+ *
99
+ * @param array $args
100
+ * @param bool $return_error
101
+ *
102
+ * @return array|bool|mixed|object
103
+ */
104
+ protected function request( $args, $return_error = false ) {
105
+ $defaults = array(
106
+ 'instance' => $this->get_site_url(),
107
+ 'plugin_name' => '',
108
+ 'version' => '',
109
+ 'api_product_id' => '',
110
+ 'licence_key' => '',
111
+ 'email' => '',
112
+ );
113
+
114
+ $args = wp_parse_args( $args, $defaults );
115
+ $request = wp_safe_remote_get( $this->get_api_base_url() . '?' . http_build_query( $args, '', '&' ), array(
116
+ 'timeout' => 10,
117
+ 'headers' => array(
118
+ 'Accept' => 'application/json',
119
+ ),
120
+ ) );
121
+
122
+ if ( is_wp_error( $request ) || 200 !== wp_remote_retrieve_response_code( $request ) ) {
123
+ if ( $return_error ) {
124
+ if ( is_wp_error( $request ) ) {
125
+ return array(
126
+ 'error_code' => $request->get_error_code(),
127
+ 'error' => $request->get_error_message(),
128
+ );
129
+ }
130
+ return array(
131
+ 'error_code' => wp_remote_retrieve_response_code( $request ),
132
+ 'error' => 'Error code: ' . wp_remote_retrieve_response_code( $request ),
133
+ );
134
+ }
135
+ return false;
136
+ }
137
+
138
+ $response = @json_decode( wp_remote_retrieve_body( $request ), true );
139
+
140
+ if ( is_array( $response ) ) {
141
+ return $response;
142
+ }
143
+
144
+ return false;
145
+ }
146
+
147
+ /**
148
+ * Returns the site URL that is MU safe.
149
+ *
150
+ * @return string
151
+ */
152
+ private function get_site_url() {
153
+ if ( is_multisite() || is_network_admin() ) {
154
+ return network_site_url();
155
+ }
156
+ return site_url();
157
+ }
158
+
159
+ /**
160
+ * Returns the API base URL.
161
+ *
162
+ * @return string
163
+ */
164
+ private function get_api_base_url() {
165
+ if ( defined( 'JOB_MANAGER_VERSION' )
166
+ && defined( 'JOB_MANAGER_DEV_API_BASE_URL')
167
+ && '-dev' === substr( JOB_MANAGER_VERSION, -4 )
168
+ ) {
169
+ return JOB_MANAGER_DEV_API_BASE_URL;
170
+ }
171
+ return self::API_BASE_URL;
172
+ }
173
+ }
includes/helper/class-wp-job-manager-helper-options.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ }
6
+
7
+ /**
8
+ * WP_Job_Manager_Helper_Options
9
+ */
10
+ class WP_Job_Manager_Helper_Options {
11
+ const OPTION_NAME = 'job_manager_helper';
12
+
13
+ /**
14
+ * Update a WPJM plugin's licence data.
15
+ *
16
+ * @param string $product_slug
17
+ * @param string $key
18
+ * @param mixed $value
19
+ *
20
+ * @return bool
21
+ */
22
+ public static function update( $product_slug, $key, $value ) {
23
+ $options = self::get_master_option();
24
+ if ( ! isset( $options[ $product_slug ] ) ) {
25
+ $options[ $product_slug ] = array();
26
+ }
27
+ $options[ $product_slug ][ $key ] = $value;
28
+ return self::update_master_option( $options );
29
+ }
30
+
31
+ /**
32
+ * Retrieve a WPJM plugin's licence data.
33
+ *
34
+ * @param string $product_slug
35
+ * @param string $key
36
+ * @param mixed $default
37
+ *
38
+ * @return mixed
39
+ */
40
+ public static function get( $product_slug, $key, $default = false ) {
41
+ $options = self::get_master_option();
42
+ if ( ! isset( $options[ $product_slug ] ) ) {
43
+ $options[ $product_slug ] = self::attempt_legacy_restore( $product_slug );
44
+ }
45
+ if ( isset( $options[ $product_slug ][ $key ] ) ) {
46
+ return $options[ $product_slug ][ $key ];
47
+ }
48
+ return $default;
49
+ }
50
+
51
+ /**
52
+ * Delete a WPJM plugin's licence data.
53
+ *
54
+ * @param string $product_slug
55
+ * @param string $key
56
+ *
57
+ * @return bool
58
+ */
59
+ public static function delete( $product_slug, $key ) {
60
+ $options = self::get_master_option();
61
+ if ( ! isset( $options[ $product_slug ] ) ) {
62
+ $options[ $product_slug ] = array();
63
+ }
64
+ unset( $options[ $product_slug ][ $key ] );
65
+ return self::update_master_option( $options );
66
+ }
67
+
68
+ /**
69
+ * Attempt to retrieve licence data from legacy storage.
70
+ *
71
+ * @param string $product_slug
72
+ *
73
+ * @return array
74
+ */
75
+ private static function attempt_legacy_restore( $product_slug ) {
76
+ $options = self::get_master_option();
77
+ if ( ! isset( $options[ $product_slug ] ) ) {
78
+ $options[ $product_slug ] = array();
79
+ }
80
+ foreach ( array( 'licence_key', 'email', 'errors', 'hide_key_notice' ) as $key ) {
81
+ $option_value = get_option( $product_slug . '_' . $key, false );
82
+ if ( ! empty( $option_value ) ) {
83
+ $options[ $product_slug ][ $key ] = $option_value;
84
+ delete_option( $product_slug . '_' . $key );
85
+ }
86
+ }
87
+ self::update_master_option( $options );
88
+ return $options[ $product_slug ];
89
+ }
90
+
91
+ /**
92
+ * Retrieve the master option.
93
+ *
94
+ * @return array
95
+ */
96
+ private static function get_master_option() {
97
+ if ( is_multisite() || is_network_admin() ) {
98
+ return get_site_option( self::OPTION_NAME, array() );
99
+ }
100
+ return get_option( self::OPTION_NAME, array() );
101
+ }
102
+
103
+ /**
104
+ * Update the master option.
105
+ *
106
+ * @return bool
107
+ */
108
+ private static function update_master_option( $value ) {
109
+ if ( is_multisite() || is_network_admin() ) {
110
+ return update_site_option( self::OPTION_NAME, $value );
111
+ }
112
+ return update_option( self::OPTION_NAME, $value );
113
+ }
114
+ }
includes/helper/class-wp-job-manager-helper.php ADDED
@@ -0,0 +1,577 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit; // Exit if accessed directly
5
+ }
6
+
7
+ /**
8
+ * Handles Job Manager's Ajax endpoints.
9
+ *
10
+ * @package wp-job-manager
11
+ * @since 1.29.0
12
+ */
13
+ class WP_Job_Manager_Helper {
14
+ /**
15
+ * @var array Messages when updating licences.
16
+ */
17
+ protected $licence_messages = array();
18
+
19
+ /**
20
+ * @var WP_Job_Manager_Helper_API
21
+ */
22
+ protected $api;
23
+
24
+ /**
25
+ * The single instance of the class.
26
+ *
27
+ * @var self
28
+ * @since 1.29.0
29
+ */
30
+ private static $_instance = null;
31
+
32
+ /**
33
+ * Allows for accessing single instance of class. Class should only be constructed once per call.
34
+ *
35
+ * @since 1.29.0
36
+ * @static
37
+ * @return self Main instance.
38
+ */
39
+ public static function instance() {
40
+ if ( is_null( self::$_instance ) ) {
41
+ self::$_instance = new self();
42
+ }
43
+ return self::$_instance;
44
+ }
45
+
46
+ /**
47
+ * Loads the class, runs on init.
48
+ */
49
+ public function init() {
50
+ include_once( 'class-wp-job-manager-helper-options.php' );
51
+ include_once( 'class-wp-job-manager-helper-api.php' );
52
+
53
+ $this->api = WP_Job_Manager_Helper_API::instance();
54
+
55
+ add_action( 'job_manager_helper_output', array( $this, 'licence_output' ) );
56
+
57
+ add_filter( 'job_manager_addon_core_version_check', array( $this, 'addon_core_version_check' ), 10, 2 );
58
+ add_filter( 'extra_plugin_headers', array( $this, 'extra_headers' ) );
59
+ add_filter( 'plugins_api', array( $this, 'plugins_api' ), 20, 3 );
60
+ add_action( 'pre_set_site_transient_update_plugins', array( $this, 'check_for_updates' ) );
61
+
62
+ add_action( 'activated_plugin', array( $this, 'plugin_activated' ) );
63
+ add_action( 'deactivated_plugin', array( $this, 'plugin_deactivated' ) );
64
+ add_action( 'admin_init', array( $this, 'admin_init' ) );
65
+ }
66
+
67
+ /**
68
+ * Initializes admin-only actions.
69
+ */
70
+ public function admin_init() {
71
+ add_action( 'plugin_action_links', array( $this, 'plugin_links' ), 10, 2 );
72
+ add_action( 'admin_notices', array( $this, 'licence_error_notices' ) );
73
+ $this->handle_admin_request();
74
+ }
75
+
76
+ /**
77
+ * Handles special tasks on admin requests.
78
+ */
79
+ private function handle_admin_request() {
80
+ if ( ! empty( $_GET['dismiss-wpjm-licence-notice'] ) ) {
81
+ $product_plugins = $this->get_installed_plugins();
82
+ $product_slug = sanitize_text_field( $_GET['dismiss-wpjm-licence-notice'] );
83
+ if ( isset( $product_plugins[ $product_slug ] ) ) {
84
+ WP_Job_Manager_Helper_Options::update( $product_slug, 'hide_key_notice', true );
85
+ }
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Tell the add-on when to check for and display and core WPJM version notices.
91
+ *
92
+ * @param bool $do_check True if the add-on should do a core version check.
93
+ * @param string $minimum_required_core_version Minimum version the plugin is reporting it requires.
94
+ * @return bool
95
+ */
96
+ public function addon_core_version_check( $do_check, $minimum_required_core_version = null ) {
97
+ if ( ! is_admin() || ! did_action( 'admin_init' ) ) {
98
+ return false;
99
+ }
100
+
101
+ // We only want to show the notices on the plugins page and main job listing admin page.
102
+ $screen = get_current_screen();
103
+ if ( null === $screen || ! in_array( $screen->id, array( 'plugins', 'edit-job_listing' ) ) ) {
104
+ return false;
105
+ }
106
+
107
+ $dev_version_loc = strpos( JOB_MANAGER_VERSION, '-dev' );
108
+ if (
109
+ false !== $dev_version_loc
110
+ && $minimum_required_core_version === substr( JOB_MANAGER_VERSION, 0, $dev_version_loc )
111
+ ) {
112
+ return false;
113
+ }
114
+
115
+ return $do_check;
116
+ }
117
+
118
+ /**
119
+ * Check for licence managed WPJM addon plugin updates.
120
+ *
121
+ * @param array $check_for_updates_data
122
+ *
123
+ * @return array
124
+ */
125
+ public function check_for_updates( $check_for_updates_data ) {
126
+ // Set version variables
127
+ foreach ( $this->get_installed_plugins() as $product_slug => $plugin_data ) {
128
+ if ( $response = $this->get_plugin_version( $plugin_data['_filename'] ) ) {
129
+ // If there is a new version, modify the transient to reflect an update is available
130
+ if ( $response !== false && isset( $response['new_version'] ) && version_compare( $response['new_version'], $plugin_data['Version'], '>' ) ) {
131
+ $check_for_updates_data->response[ $plugin_data['_filename'] ] = (object) $response;
132
+ }
133
+ }
134
+ }
135
+ return $check_for_updates_data;
136
+ }
137
+
138
+ /**
139
+ * Get plugin version info from API.
140
+ *
141
+ * @param string $plugin_filename
142
+ *
143
+ * @return array|bool
144
+ */
145
+ private function get_plugin_version( $plugin_filename ) {
146
+ $plugin_data = $this->get_licence_managed_plugin( $plugin_filename );
147
+ if ( ! $plugin_data ) {
148
+ return false;
149
+ }
150
+ $product_slug = $plugin_data['_product_slug'];
151
+ $licence = $this->get_plugin_licence( $product_slug );
152
+ if ( ! $licence || empty( $licence['licence_key'] ) ) {
153
+ return false;
154
+ }
155
+
156
+ $response = $this->api->plugin_update_check( array(
157
+ 'plugin_name' => $plugin_data['Name'],
158
+ 'version' => $plugin_data['Version'],
159
+ 'api_product_id' => $product_slug,
160
+ 'licence_key' => $licence['licence_key'],
161
+ 'email' => $licence['email'],
162
+ ) );
163
+
164
+ if ( isset( $response['errors'] ) ) {
165
+ $this->handle_api_errors( $product_slug, $response['errors'] );
166
+ }
167
+
168
+ // Set version variables
169
+ if ( ! empty( $response ) ) {
170
+ return $response;
171
+ }
172
+
173
+ return false;
174
+ }
175
+
176
+ /**
177
+ * Cleanup old things when WPJM licence managed plugin is activated.
178
+ *
179
+ * @param string $plugin_filename
180
+ */
181
+ public function plugin_activated( $plugin_filename ) {
182
+ $plugins = $this->get_installed_plugins( false );
183
+ foreach ( $plugins as $product_slug => $plugin_data ) {
184
+ if ( $plugin_filename !== $plugin_data['_filename'] ) {
185
+ continue;
186
+ }
187
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'hide_key_notice' );
188
+ break;
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Deactivate licence when WPJM licence managed plugin is deactivated.
194
+ *
195
+ * @param string $plugin_filename
196
+ */
197
+ public function plugin_deactivated( $plugin_filename ) {
198
+ $plugins = $this->get_installed_plugins( false );
199
+ foreach ( $plugins as $product_slug => $plugin_data ) {
200
+ if ( $plugin_filename !== $plugin_data['_filename'] ) {
201
+ continue;
202
+ }
203
+ $this->deactivate_licence( $product_slug );
204
+ break;
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Fetches the plugin information for WPJM plugins.
210
+ *
211
+ * @param false|object|array $response The result object or array. Default false.
212
+ * @param string $action The type of information being requested from the Plugin Install API.
213
+ * @param object $args Plugin API arguments.
214
+ *
215
+ * @return false|object|array
216
+ */
217
+ public function plugins_api( $response, $action, $args ) {
218
+ if ( 'plugin_information' !== $action ) {
219
+ return $response;
220
+ }
221
+
222
+ if ( empty( $args->slug ) ) {
223
+ return $response;
224
+ }
225
+
226
+ if ( ( $plugin_info = $this->get_plugin_info( $args->slug ) ) ) {
227
+ $response = (object) $plugin_info;
228
+ }
229
+
230
+ return $response;
231
+ }
232
+
233
+ /**
234
+ * Appends links to manage plugin licence when managed.
235
+ *
236
+ * @param array $actions
237
+ * @param string $plugin_filename
238
+ * @return array
239
+ */
240
+ public function plugin_links( $actions, $plugin_filename ) {
241
+ $plugin = $this->get_licence_managed_plugin( $plugin_filename );
242
+ if ( ! $plugin || ! current_user_can( 'update_plugins' ) ) {
243
+ return $actions;
244
+ }
245
+ $product_slug = $plugin['_product_slug'];
246
+ $licence = $this->get_plugin_licence( $product_slug );
247
+ $css_class = '';
248
+ if ( $licence && ! empty( $licence['licence_key'] ) ) {
249
+ $manage_licence_label = __( 'Manage License', 'wp-job-manager' );
250
+ } else {
251
+ $manage_licence_label = __( 'Activate License', 'wp-job-manager' );
252
+ $css_class = 'wpjm-activate-licence-link';
253
+ }
254
+ $actions[] = '<a class="' . $css_class . '" href="' . esc_url( admin_url( 'edit.php?post_type=job_listing&page=job-manager-addons&section=helper' ) ) . '">' . $manage_licence_label . '</a>';
255
+ return $actions;
256
+ }
257
+
258
+ /**
259
+ * Returns the plugin info for a licenced WPJM plugin.
260
+ *
261
+ * @param string $product_slug
262
+ *
263
+ * @return bool|object
264
+ */
265
+ protected function get_plugin_info( $product_slug ) {
266
+ if ( ! $this->is_product_installed( $product_slug ) ) {
267
+ return false;
268
+ }
269
+ $args = $this->get_plugin_licence( $product_slug );
270
+ if ( empty( $args['licence_key'] ) || empty( $args['email'] ) ) {
271
+ return false;
272
+ }
273
+ $args['api_product_id'] = $product_slug;
274
+
275
+ $response = $this->api->plugin_information( $args );
276
+ if ( isset( $response['errors'] ) ) {
277
+ $this->handle_api_errors( $product_slug, $response['errors'] );
278
+ }
279
+
280
+ return $response;
281
+ }
282
+
283
+ /**
284
+ * Checks if a WPJM plugin is installed.
285
+ *
286
+ * @param string $product_slug
287
+ *
288
+ * @return bool
289
+ */
290
+ public function is_product_installed( $product_slug ) {
291
+ $product_plugins = $this->get_installed_plugins();
292
+ return isset( $product_plugins[ $product_slug ] );
293
+ }
294
+
295
+ /**
296
+ * Returns true if there are licensed products being managed.
297
+ *
298
+ * @return bool
299
+ */
300
+ public function has_licenced_products() {
301
+ $product_plugins = $this->get_installed_plugins();
302
+ return ! empty( $product_plugins );
303
+ }
304
+
305
+ /**
306
+ * Returns the plugin data for plugin with a `WPJM-Product` tag by plugin filename.
307
+ *
308
+ * @param $plugin_filename
309
+ * @return bool|array
310
+ */
311
+ private function get_licence_managed_plugin( $plugin_filename ) {
312
+ foreach ( $this->get_installed_plugins() as $plugin ) {
313
+ if ( $plugin_filename === $plugin['_filename'] ) {
314
+ return $plugin;
315
+ }
316
+ }
317
+ return false;
318
+ }
319
+
320
+ /**
321
+ * Gets the licence key and email for a WPJM managed plugin.
322
+ *
323
+ * @param string $product_slug
324
+ * @return array|bool
325
+ */
326
+ public function get_plugin_licence( $product_slug ) {
327
+ $licence_key = WP_Job_Manager_Helper_Options::get( $product_slug, 'licence_key' );
328
+ $activation_email = WP_Job_Manager_Helper_Options::get( $product_slug, 'email' );
329
+ $errors = WP_Job_Manager_Helper_Options::get( $product_slug, 'errors' );
330
+
331
+ return array(
332
+ 'licence_key' => $licence_key,
333
+ 'email' => $activation_email,
334
+ 'errors' => $errors,
335
+ );
336
+ }
337
+
338
+ /**
339
+ * Adds newly recognized data header in WordPress plugin files.
340
+ *
341
+ * @params array $headers
342
+ * @return array
343
+ */
344
+ public function extra_headers( $headers ) {
345
+ $headers[] = 'WPJM-Product';
346
+ return $headers;
347
+ }
348
+
349
+ /**
350
+ * Returns list of installed WPJM plugins with managed licences indexed by product ID.
351
+ *
352
+ * @param bool $active_only Only return active plugins
353
+ * @return array
354
+ */
355
+ protected function get_installed_plugins( $active_only = true ) {
356
+ if ( ! function_exists( 'get_plugins' ) ) {
357
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
358
+ }
359
+
360
+ $wpjm_plugins = array();
361
+ $plugins = get_plugins();
362
+
363
+ foreach ( $plugins as $filename => $data ) {
364
+ if ( empty( $data['WPJM-Product'] ) || ( true === $active_only && ! is_plugin_active( $filename ) ) ) {
365
+ continue;
366
+ }
367
+
368
+ $data['_filename'] = $filename;
369
+ $data['_product_slug'] = $data['WPJM-Product'];
370
+ $data['_type'] = 'plugin';
371
+ $wpjm_plugins[ $data['WPJM-Product'] ] = $data;
372
+ }
373
+
374
+ return $wpjm_plugins;
375
+ }
376
+
377
+ /**
378
+ * Outputs the licence management.
379
+ */
380
+ public function licence_output() {
381
+ if ( ! current_user_can( 'update_plugins' ) ) {
382
+ return;
383
+ }
384
+ if ( ! empty( $_POST ) ) {
385
+ $this->handle_request();
386
+ }
387
+ $licenced_plugins = $this->get_installed_plugins();
388
+ include_once( dirname( __FILE__ ) . '/views/html-licences.php' );
389
+ }
390
+
391
+ /**
392
+ * Outputs unset licence key notices.
393
+ */
394
+ public function licence_error_notices() {
395
+ foreach( $this->get_installed_plugins() as $product_slug => $plugin_data ) {
396
+ $licence = $this->get_plugin_licence( $product_slug );
397
+ if ( empty( $licence['licence_key'] ) && ! WP_Job_Manager_Helper_Options::get( $product_slug, 'hide_key_notice' ) ) {
398
+ include( 'views/html-licence-key-notice.php' );
399
+ }
400
+ }
401
+ }
402
+
403
+ /**
404
+ * Handles a request on the manage licence key screen.
405
+ */
406
+ private function handle_request() {
407
+ $licenced_plugins = $this->get_installed_plugins();
408
+ if ( empty( $_POST )
409
+ || empty( $_POST['_wpnonce'] )
410
+ || empty( $_POST['action'] )
411
+ || empty( $_POST['product_slug'] )
412
+ || ! isset( $licenced_plugins[ $_POST['product_slug'] ] )
413
+ || ! wp_verify_nonce( $_POST['_wpnonce'], 'wpjm-manage-licence' )
414
+ ) {
415
+ return false;
416
+ }
417
+ $product_slug = sanitize_text_field( $_POST['product_slug'] );
418
+ switch ( $_POST['action'] ) {
419
+ case 'activate':
420
+ if ( empty( $_POST['email'] ) || empty( $_POST['licence_key'] ) ) {
421
+ $this->add_error( $product_slug, __( 'Please enter a valid license key and email address in order to activate this plugin\'s license.', 'wp-job-manager' ) );
422
+ break;
423
+ }
424
+ $email = sanitize_email( $_POST['email'] );
425
+ $licence_key = sanitize_text_field( $_POST['licence_key'] );
426
+ $this->activate_licence( $product_slug, $licence_key, $email );
427
+ break;
428
+ case 'deactivate':
429
+ $this->deactivate_licence( $product_slug );
430
+ break;
431
+ }
432
+ }
433
+
434
+ /**
435
+ * Activate a licence key for a WPJM add-on plugin.
436
+ *
437
+ * @param string $product_slug
438
+ * @param string $licence_key
439
+ * @param string $email
440
+ */
441
+ private function activate_licence( $product_slug, $licence_key, $email ) {
442
+ $response = $this->api->activate( array(
443
+ 'api_product_id' => $product_slug,
444
+ 'licence_key' => $licence_key,
445
+ 'email' => $email,
446
+ ) );
447
+
448
+ if ( false === $response ) {
449
+ $this->add_error( $product_slug, __( 'Connection failed to the License Key API server - possible server issue.', 'wp-job-manager' ) );
450
+ } elseif ( isset( $response['error_code'] ) && isset( $response['error'] ) ) {
451
+ $this->add_error( $product_slug, $response['error'] );
452
+ } elseif ( ! empty( $response['activated'] ) ) {
453
+ WP_Job_Manager_Helper_Options::update( $product_slug, 'licence_key', $licence_key );
454
+ WP_Job_Manager_Helper_Options::update( $product_slug, 'email', $email );
455
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'errors' );
456
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'hide_key_notice' );
457
+ $this->add_success( $product_slug, __( 'Plugin license has been activated.', 'wp-job-manager' ) );
458
+ } else {
459
+ $this->add_error( $product_slug, __( 'An unknown error occurred while attempting to activate the license', 'wp-job-manager' ) );
460
+ }
461
+ }
462
+
463
+ /**
464
+ * Deactivate a licence key for a WPJM add-on plugin.
465
+ *
466
+ * @param string $product_slug
467
+ */
468
+ private function deactivate_licence( $product_slug ) {
469
+ $licence = $this->get_plugin_licence( $product_slug );
470
+ if ( empty( $licence['licence_key'] ) || empty( $licence['email'] ) ) {
471
+ $this->add_error( $product_slug, __( 'licence is not active.', 'wp-job-manager' ) );
472
+ return;
473
+ }
474
+ $this->api->deactivate( array(
475
+ 'api_product_id' => $product_slug,
476
+ 'licence_key' => $licence['licence_key'],
477
+ 'email' => $licence['email'],
478
+ ) );
479
+
480
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'licence_key' );
481
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'email' );
482
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'errors' );
483
+ WP_Job_Manager_Helper_Options::delete( $product_slug, 'hide_key_notice' );
484
+ delete_site_transient( 'update_plugins' );
485
+ $this->add_success( $product_slug, __( 'Plugin license has been deactivated.', 'wp-job-manager' ) );
486
+ }
487
+
488
+ /**
489
+ * Handle errors from the API.
490
+ *
491
+ * @param string $product_slug
492
+ * @param array $errors
493
+ */
494
+ private function handle_api_errors( $product_slug, $errors ) {
495
+ $plugin_products = $this->get_installed_plugins();
496
+ if ( ! isset( $plugin_products[ $product_slug ] ) ) {
497
+ return;
498
+ }
499
+ if ( ! empty( $errors['no_activation'] ) ) {
500
+ $this->deactivate_licence( $product_slug );
501
+ $this->add_licence_error( $product_slug, $errors['no_activation'] );
502
+ } elseif ( ! empty( $errors['expired_key'] ) ) {
503
+ $this->deactivate_licence( $product_slug );
504
+ $this->add_licence_error( $product_slug, $errors['expired_key'] );
505
+ }
506
+ }
507
+
508
+ /**
509
+ * Add an error message for a licence.
510
+ *
511
+ * @param string $product_slug
512
+ * @param string $message Your error message
513
+ * @param string $type Type of error message
514
+ */
515
+ private function add_licence_error( $product_slug, $message, $type = '' ) {
516
+ $licence = $this->get_plugin_licence( $product_slug );
517
+ $errors = ! empty( $licence['errors'] ) ? $licence['errors'] : array();
518
+ if ( $type ) {
519
+ $errors[ $type ] = $message;
520
+ } else {
521
+ $errors[] = $message;
522
+ }
523
+ WP_Job_Manager_Helper_Options::update( $product_slug, 'errors', $errors );
524
+ }
525
+
526
+ /**
527
+ * Add an error message.
528
+ *
529
+ * @param string $product_slug The plugin slug.
530
+ * @param string $message Your error message.
531
+ */
532
+ private function add_error( $product_slug, $message ) {
533
+ $this->add_message( 'error', $product_slug, $message );
534
+ }
535
+
536
+ /**
537
+ * Add a success message.
538
+ *
539
+ * @param string $product_slug The plugin slug.
540
+ * @param string $message Your error message.
541
+ */
542
+ private function add_success( $product_slug, $message ) {
543
+ $this->add_message( 'success', $product_slug, $message );
544
+ }
545
+
546
+ /**
547
+ * Add a message.
548
+ *
549
+ * @param string $type Message type.
550
+ * @param string $product_slug The plugin slug.
551
+ * @param string $message Your error message.
552
+ */
553
+ private function add_message( $type, $product_slug, $message ) {
554
+ if ( ! isset( $this->licence_messages[ $product_slug ] ) ) {
555
+ $this->licence_messages[ $product_slug ] = array();
556
+ }
557
+ $this->licence_messages[ $product_slug ][] = array(
558
+ 'type' => $type,
559
+ 'message' => $message,
560
+ );
561
+ }
562
+
563
+ /**
564
+ * Get a plugin's licence messages.
565
+ *
566
+ * @param string $product_slug The plugin slug.
567
+ * @return array
568
+ */
569
+ public function get_messages( $product_slug ) {
570
+ if ( ! isset( $this->licence_messages[ $product_slug ] ) ) {
571
+ $this->licence_messages[ $product_slug ] = array();
572
+ }
573
+ return $this->licence_messages[ $product_slug ];
574
+ }
575
+ }
576
+
577
+ WP_Job_Manager_Helper::instance()->init();
includes/helper/views/html-licence-key-notice.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ exit; // Exit if accessed directly
4
+ }
5
+ ?>
6
+ <div class="updated">
7
+ <p class="wpjm-updater-dismiss" style="float:right;"><a href="<?php echo esc_url( add_query_arg( 'dismiss-wpjm-licence-notice', $product_slug ) ); ?>"><?php _e( 'Hide notice' ); ?></a></p>
8
+ <p><?php printf( '<a href="%s">Please enter your license key</a> to get updates for "%s".', esc_url( admin_url( 'edit.php?post_type=job_listing&page=job-manager-addons&section=helper#' . sanitize_title( $product_slug . '_row' ) ) ), esc_html( $plugin_data['Name'] ) ); ?></p>
9
+ </div>
includes/helper/views/html-licences.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ exit; // Exit if accessed directly
4
+ }
5
+ ?>
6
+ <h1 class="screen-reader-text"><?php _e( 'Licenses', 'wp-job-manager' ); ?></h1>
7
+ <div class="wpjm-licences">
8
+ <?php if ( ! empty( $licenced_plugins ) ) : ?>
9
+ <?php foreach ( $licenced_plugins as $product_slug => $plugin_data ) : ?>
10
+ <?php
11
+ $licence = WP_Job_Manager_Helper::get_plugin_licence( $product_slug );
12
+ ?>
13
+ <div class="licence-row">
14
+ <div class="plugin-info">
15
+ <?php echo $plugin_data['Name']; ?>
16
+ <div class="plugin-author">
17
+ <?php
18
+ $author = $plugin_data['Author'];
19
+ if ( !empty( $plugin_data['AuthorURI'] ) ) {
20
+ $author = '<a href="' . $plugin_data['AuthorURI'] . '">' . $plugin_data['Author'] . '</a>';
21
+ }
22
+ echo $author;
23
+ ?>
24
+ </div>
25
+ </div>
26
+ <div class="plugin-licence">
27
+ <?php
28
+ $notices = WP_Job_Manager_Helper::get_messages( $product_slug );
29
+ if ( empty( $notices) && ! empty( $licence['errors'] ) ) {
30
+ $notices = array();
31
+ foreach ( $licence['errors'] as $key => $error ) {
32
+ $notices[] = array(
33
+ 'type' => 'error',
34
+ 'message' => $error,
35
+ );
36
+ }
37
+ }
38
+ foreach ( $notices as $message ) {
39
+ echo '<div class="notice inline notice-'. esc_attr( $message['type'] ) .'"><p>'. wp_kses_post( $message['message'] ) . '</p></div>';
40
+ }
41
+ ?>
42
+ <form method="post">
43
+ <?php wp_nonce_field( 'wpjm-manage-licence' ); ?>
44
+ <?php
45
+ if ( ! empty( $licence['licence_key'] ) && ! empty( $licence['email'] ) ) {
46
+ ?>
47
+ <input type="hidden" id="<?php echo sanitize_title( $product_slug ); ?>_action" name="action" value="deactivate"/>
48
+ <input type="hidden" id="<?php echo sanitize_title( $product_slug ); ?>_plugin" name="product_slug" value="<?php echo esc_attr( $product_slug ); ?>"/>
49
+
50
+ <label for="<?php echo sanitize_title( $product_slug ); ?>_licence_key"><?php _e( 'License' ); ?>:
51
+ <input type="text" disabled="disabled" id="<?php echo sanitize_title( $product_slug ); ?>_licence_key" name="licence_key" placeholder="XXXX-XXXX-XXXX-XXXX" value="<?php echo esc_attr( $licence['licence_key'] ); ?>"/>
52
+ </label>
53
+ <label for="<?php echo sanitize_title( $product_slug ); ?>_email"><?php _e( 'Email' ); ?>:
54
+ <input type="email" disabled="disabled" id="<?php echo sanitize_title( $product_slug ); ?>_email" name="email" placeholder="Email address" value="<?php echo esc_attr( $licence['email'] ); ?>"/>
55
+ </label>
56
+
57
+ <input type="submit" class="button" name="submit" value="<?php _e( 'Deactivate License' ); ?>" />
58
+ <?php
59
+ } else { // licence is not active
60
+ ?>
61
+ <input type="hidden" id="<?php echo sanitize_title( $product_slug ); ?>_action" name="action" value="activate"/>
62
+ <input type="hidden" id="<?php echo sanitize_title( $product_slug ); ?>_plugin" name="product_slug" value="<?php echo esc_attr( $product_slug ); ?>"/>
63
+ <label for="<?php echo sanitize_title( $product_slug ); ?>_licence_key"><?php _e( 'License' ); ?>:
64
+ <input type="text" id="<?php echo sanitize_title( $product_slug ); ?>_licence_key" name="licence_key" placeholder="XXXX-XXXX-XXXX-XXXX"/>
65
+ </label>
66
+ <label for="<?php echo sanitize_title( $product_slug ); ?>_email"><?php _e( 'Email' ); ?>:
67
+ <input type="email" id="<?php echo sanitize_title( $product_slug ); ?>_email" name="email" placeholder="Email address" value="<?php echo esc_attr( get_option( 'admin_email' ) ); ?>"/>
68
+ </label>
69
+ <input type="submit" class="button" name="submit" value="<?php _e( 'Activate License' ); ?>" />
70
+ <?php
71
+ } // end if : else licence is not active
72
+ ?>
73
+ </form>
74
+ </div>
75
+ </div>
76
+ <?php endforeach; ?>
77
+ <div class="notice notice-info inline"><p><?php printf( 'Lost your license key? <a href="%s">Retrieve it here</a>.', esc_url( 'https://wpjobmanager.com/lost-licence-key/' ) ); ?></p></div>
78
+ <?php else: ?>
79
+ <div class="notice notice-warning inline"><p><?php _e( 'No plugins are activated that have licenses managed by WP Job Manager.', 'wp-job-manager' ); ?></p></div>
80
+ <?php endif; ?>
81
+ </div>
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.28.0\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Automattic/WP-Job-Manager/issues\n"
7
- "POT-Creation-Date: 2017-08-01 16:44:29+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -13,16 +13,22 @@ msgstr ""
13
  "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
14
  "X-Generator: grunt-wp-i18n 0.5.4\n"
15
 
16
- #: includes/admin/class-wp-job-manager-addons.php:82
 
17
  #: includes/admin/class-wp-job-manager-admin.php:113
18
  msgid "WP Job Manager Add-ons"
19
  msgstr ""
20
 
21
- #: includes/admin/class-wp-job-manager-addons.php:84
 
 
 
 
 
22
  msgid "Do you need multiple add-ons?"
23
  msgstr ""
24
 
25
- #: includes/admin/class-wp-job-manager-addons.php:84
26
  msgid "Check out the core add-on bundle &rarr;"
27
  msgstr ""
28
 
@@ -571,32 +577,33 @@ msgid "3. Done"
571
  msgstr ""
572
 
573
  #: includes/admin/class-wp-job-manager-setup.php:158
574
- msgid "Setup Wizard Introduction"
575
  msgstr ""
576
 
577
  #: includes/admin/class-wp-job-manager-setup.php:160
578
- msgid "Thanks for installing <em>WP Job Manager</em>!"
 
 
579
  msgstr ""
580
 
581
  #: includes/admin/class-wp-job-manager-setup.php:161
582
  msgid ""
583
- "This setup wizard will help you get started by creating the pages for job "
584
- "submission, job management, and listing your jobs."
585
  msgstr ""
586
 
587
  #: includes/admin/class-wp-job-manager-setup.php:162
588
  msgid ""
589
- "If you want to skip the wizard and setup the pages and shortcodes yourself "
590
- "manually, the process is still relatively simple. Refer to the "
591
- "%sdocumentation%s for help."
592
  msgstr ""
593
 
594
  #: includes/admin/class-wp-job-manager-setup.php:165
595
- msgid "Continue to page setup"
596
  msgstr ""
597
 
598
  #: includes/admin/class-wp-job-manager-setup.php:166
599
- msgid "Skip setup. I will setup the plugin manually"
600
  msgstr ""
601
 
602
  #: includes/admin/class-wp-job-manager-setup.php:172
@@ -605,130 +612,128 @@ msgstr ""
605
 
606
  #: includes/admin/class-wp-job-manager-setup.php:174
607
  msgid ""
608
- "<em>WP Job Manager</em> includes %1$sshortcodes%2$s which can be used "
609
- "within your %3$spages%2$s to output content. These can be created for you "
610
- "below. For more information on the job shortcodes view the %4$sshortcode "
611
- "documentation%2$s."
612
  msgstr ""
613
 
614
- #: includes/admin/class-wp-job-manager-setup.php:182
615
- msgid "Page Title"
 
 
 
 
 
616
  msgstr ""
617
 
618
  #: includes/admin/class-wp-job-manager-setup.php:183
619
- msgid "Page Description"
620
  msgstr ""
621
 
622
  #: includes/admin/class-wp-job-manager-setup.php:184
623
- msgid "Content Shortcode"
624
  msgstr ""
625
 
626
- #: includes/admin/class-wp-job-manager-setup.php:192
627
- msgid "This page allows employers to post jobs to your website from the front-end."
628
  msgstr ""
629
 
630
- #: includes/admin/class-wp-job-manager-setup.php:194
631
  msgid ""
632
- "If you do not want to accept submissions from users in this way (for "
633
- "example you just want to post jobs from the admin dashboard) you can skip "
634
- "creating this page."
 
635
  msgstr ""
636
 
637
- #: includes/admin/class-wp-job-manager-setup.php:202
638
  msgid ""
639
- "This page allows employers to manage and edit their own jobs from the "
640
- "front-end."
 
 
641
  msgstr ""
642
 
643
- #: includes/admin/class-wp-job-manager-setup.php:204
644
- msgid ""
645
- "If you plan on managing all listings from the admin dashboard you can skip "
646
- "creating this page."
647
  msgstr ""
648
 
649
- #: includes/admin/class-wp-job-manager-setup.php:211
650
- msgid ""
651
- "This page allows users to browse, search, and filter job listings on the "
652
- "front-end of your site."
653
  msgstr ""
654
 
655
- #: includes/admin/class-wp-job-manager-setup.php:219
656
- msgid "Skip this step"
657
  msgstr ""
658
 
659
- #: includes/admin/class-wp-job-manager-setup.php:229
660
- msgid "All Done!"
661
  msgstr ""
662
 
663
  #: includes/admin/class-wp-job-manager-setup.php:231
664
- msgid ""
665
- "Looks like you're all set to start using the plugin. In case you're "
666
- "wondering where to go next:"
667
  msgstr ""
668
 
669
- #: includes/admin/class-wp-job-manager-setup.php:234
670
- msgid "Tweak the plugin settings"
671
  msgstr ""
672
 
673
  #: includes/admin/class-wp-job-manager-setup.php:235
674
- msgid "Add a job via the back-end"
675
- msgstr ""
676
-
677
- #: includes/admin/class-wp-job-manager-setup.php:238
678
- msgid "Add a job via the front-end"
679
  msgstr ""
680
 
681
- #: includes/admin/class-wp-job-manager-setup.php:240
682
- msgid "Find out more about the front-end job submission form"
683
  msgstr ""
684
 
685
- #: includes/admin/class-wp-job-manager-setup.php:244
686
- msgid "View submitted job listings"
687
  msgstr ""
688
 
689
- #: includes/admin/class-wp-job-manager-setup.php:246
690
- msgid "Add the [jobs] shortcode to a page to list jobs"
691
  msgstr ""
692
 
693
- #: includes/admin/class-wp-job-manager-setup.php:250
694
  msgid "View the job dashboard"
695
  msgstr ""
696
 
697
- #: includes/admin/class-wp-job-manager-setup.php:252
698
- msgid "Find out more about the front-end job dashboard"
699
  msgstr ""
700
 
701
- #: includes/admin/class-wp-job-manager-setup.php:256
702
  msgid ""
703
- "And don't forget, if you need any more help using <em>WP Job Manager</em> "
704
- "you can consult the %1$sdocumentation%2$s or %3$spost on the forums%2$s!"
 
705
  msgstr ""
706
 
707
- #: includes/admin/class-wp-job-manager-setup.php:259
708
- msgid "Support the Ongoing Development of this Plugin"
709
  msgstr ""
710
 
711
- #: includes/admin/class-wp-job-manager-setup.php:260
712
  msgid ""
713
- "There are many ways to support open-source projects such as WP Job Manager, "
714
- "for example code contribution, translation, or even telling your friends "
715
- "how awesome the plugin (hopefully) is. Thanks in advance for your support - "
716
- "it is much appreciated!"
717
  msgstr ""
718
 
719
- #: includes/admin/class-wp-job-manager-setup.php:262
720
  msgid "Leave a positive review"
721
  msgstr ""
722
 
723
- #: includes/admin/class-wp-job-manager-setup.php:263
724
  msgid "Contribute a localization"
725
  msgstr ""
726
 
727
- #: includes/admin/class-wp-job-manager-setup.php:264
728
  msgid "Contribute code or report a bug"
729
  msgstr ""
730
 
731
- #: includes/admin/class-wp-job-manager-setup.php:265
732
  msgid "Help other users on the forums"
733
  msgstr ""
734
 
@@ -1090,7 +1095,7 @@ msgid "Application email"
1090
  msgstr ""
1091
 
1092
  #: includes/forms/class-wp-job-manager-form-submit-job.php:144
1093
- #: wp-job-manager-template.php:641
1094
  msgid "you@yourdomain.com"
1095
  msgstr ""
1096
 
@@ -1221,6 +1226,63 @@ msgstr ""
1221
  msgid "You must be signed in to post a new listing."
1222
  msgstr ""
1223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1224
  #: includes/rest-api/class-wp-job-manager-controllers-status.php:52
1225
  msgid "Not Found"
1226
  msgstr ""
@@ -1506,47 +1568,47 @@ msgstr ""
1506
  msgid "Inactive"
1507
  msgstr ""
1508
 
1509
- #: wp-job-manager-template.php:237
1510
  msgid "Application via \"%s\" listing on %s"
1511
  msgstr ""
1512
 
1513
- #: wp-job-manager-template.php:615
1514
  msgid "Username"
1515
  msgstr ""
1516
 
1517
- #: wp-job-manager-template.php:623
1518
  msgid "Password"
1519
  msgstr ""
1520
 
1521
- #: wp-job-manager-template.php:633
1522
  msgid "Verify Password"
1523
  msgstr ""
1524
 
1525
- #: wp-job-manager-template.php:640
1526
  msgid "Your email"
1527
  msgstr ""
1528
 
1529
- #: wp-job-manager-template.php:667
1530
  msgid "Posted on "
1531
  msgstr ""
1532
 
1533
- #: wp-job-manager-template.php:669 wp-job-manager-template.php:689
1534
  msgid "Posted %s ago"
1535
  msgstr ""
1536
 
1537
- #: wp-job-manager-template.php:712
1538
  msgid "Anywhere"
1539
  msgstr ""
1540
 
1541
- #: wp-job-manager.php:209
1542
  msgid "Load previous listings"
1543
  msgstr ""
1544
 
1545
- #: wp-job-manager.php:260
1546
  msgid "Invalid file type. Accepted types:"
1547
  msgstr ""
1548
 
1549
- #: wp-job-manager.php:271
1550
  msgid "Are you sure you want to delete this listing?"
1551
  msgstr ""
1552
 
@@ -1593,17 +1655,17 @@ msgctxt "Job type slug - resave permalinks after changing this"
1593
  msgid "job-type"
1594
  msgstr ""
1595
 
1596
- #: includes/admin/class-wp-job-manager-setup.php:190
1597
  msgctxt "Default page title (wizard)"
1598
  msgid "Post a Job"
1599
  msgstr ""
1600
 
1601
- #: includes/admin/class-wp-job-manager-setup.php:200
1602
  msgctxt "Default page title (wizard)"
1603
  msgid "Job Dashboard"
1604
  msgstr ""
1605
 
1606
- #: includes/admin/class-wp-job-manager-setup.php:210
1607
  msgctxt "Default page title (wizard)"
1608
  msgid "Jobs"
1609
  msgstr ""
@@ -1649,4 +1711,4 @@ msgstr ""
1649
  #: wp-job-manager-functions.php:260
1650
  msgctxt "post status"
1651
  msgid "Active"
1652
- msgstr ""
2
  # This file is distributed under the GPL2+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP Job Manager 1.29.0\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Automattic/WP-Job-Manager/issues\n"
7
+ "POT-Creation-Date: 2017-10-02 17:06:15+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
13
  "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
14
  "X-Generator: grunt-wp-i18n 0.5.4\n"
15
 
16
+ #: includes/admin/class-wp-job-manager-addons.php:83
17
+ #: includes/admin/class-wp-job-manager-addons.php:92
18
  #: includes/admin/class-wp-job-manager-admin.php:113
19
  msgid "WP Job Manager Add-ons"
20
  msgstr ""
21
 
22
+ #: includes/admin/class-wp-job-manager-addons.php:85
23
+ #: includes/helper/views/html-licences.php:6
24
+ msgid "Licenses"
25
+ msgstr ""
26
+
27
+ #: includes/admin/class-wp-job-manager-addons.php:93
28
  msgid "Do you need multiple add-ons?"
29
  msgstr ""
30
 
31
+ #: includes/admin/class-wp-job-manager-addons.php:93
32
  msgid "Check out the core add-on bundle &rarr;"
33
  msgstr ""
34
 
577
  msgstr ""
578
 
579
  #: includes/admin/class-wp-job-manager-setup.php:158
580
+ msgid "Welcome to the Setup Wizard!"
581
  msgstr ""
582
 
583
  #: includes/admin/class-wp-job-manager-setup.php:160
584
+ msgid ""
585
+ "Thanks for installing <em>WP Job Manager</em>! Let's get your site ready to "
586
+ "accept job listings."
587
  msgstr ""
588
 
589
  #: includes/admin/class-wp-job-manager-setup.php:161
590
  msgid ""
591
+ "This setup wizard will walk you through the process of creating pages for "
592
+ "job submissions, management, and listings."
593
  msgstr ""
594
 
595
  #: includes/admin/class-wp-job-manager-setup.php:162
596
  msgid ""
597
+ "If you'd prefer to skip this and set up your pages manually, our "
598
+ "%sdocumentation%s will walk you through each step."
 
599
  msgstr ""
600
 
601
  #: includes/admin/class-wp-job-manager-setup.php:165
602
+ msgid "Start setup"
603
  msgstr ""
604
 
605
  #: includes/admin/class-wp-job-manager-setup.php:166
606
+ msgid "Skip setup. I will set up the plugin manually."
607
  msgstr ""
608
 
609
  #: includes/admin/class-wp-job-manager-setup.php:172
612
 
613
  #: includes/admin/class-wp-job-manager-setup.php:174
614
  msgid ""
615
+ "With WP Job Manager, employers and applicants can post, manage, and browse "
616
+ "job listings right on your website. Tell us which of these common pages "
617
+ "you'd like your site to have and we'll create and configure them for you."
 
618
  msgstr ""
619
 
620
+ #: includes/admin/class-wp-job-manager-setup.php:175
621
+ msgid ""
622
+ "(These pages are created using %1$sshortcodes%2$s, which we take care of in "
623
+ "this step. If you'd like to build these pages yourself or want to add one "
624
+ "of these options to an existing page on your site, you can skip this step "
625
+ "and take a look at %4$sshortcode documentation%2$s for detailed "
626
+ "instructions.)"
627
  msgstr ""
628
 
629
  #: includes/admin/class-wp-job-manager-setup.php:183
630
+ msgid "Page Title"
631
  msgstr ""
632
 
633
  #: includes/admin/class-wp-job-manager-setup.php:184
634
+ msgid "Page Description"
635
  msgstr ""
636
 
637
+ #: includes/admin/class-wp-job-manager-setup.php:185
638
+ msgid "Content Shortcode"
639
  msgstr ""
640
 
641
+ #: includes/admin/class-wp-job-manager-setup.php:193
642
  msgid ""
643
+ "Creates a page that allows employers to post new jobs directly from a page "
644
+ "on your website, instead of requiring them to log in to an admin area. If "
645
+ "you'd rather not allow this -- for example, if you want employers to use "
646
+ "the admin dashboard only -- you can uncheck this setting."
647
  msgstr ""
648
 
649
+ #: includes/admin/class-wp-job-manager-setup.php:201
650
  msgid ""
651
+ "Creates a page that allows employers to manage their job listings directly "
652
+ "from a page on your website, instead of requiring them to log in to an "
653
+ "admin area. If you want to manage all job listings from the admin dashboard "
654
+ "only, you can uncheck this setting."
655
  msgstr ""
656
 
657
+ #: includes/admin/class-wp-job-manager-setup.php:208
658
+ msgid "Creates a page where visitors can browse, search, and filter job listings."
 
 
659
  msgstr ""
660
 
661
+ #: includes/admin/class-wp-job-manager-setup.php:216
662
+ msgid "Skip this step"
 
 
663
  msgstr ""
664
 
665
+ #: includes/admin/class-wp-job-manager-setup.php:226
666
+ msgid "You're ready to start using WP Job Manager!"
667
  msgstr ""
668
 
669
+ #: includes/admin/class-wp-job-manager-setup.php:228
670
+ msgid "Wondering what to do now? Here are some of the most common next steps:"
671
  msgstr ""
672
 
673
  #: includes/admin/class-wp-job-manager-setup.php:231
674
+ msgid "Tweak your settings"
 
 
675
  msgstr ""
676
 
677
+ #: includes/admin/class-wp-job-manager-setup.php:232
678
+ msgid "Add a job using the admin dashboard"
679
  msgstr ""
680
 
681
  #: includes/admin/class-wp-job-manager-setup.php:235
682
+ msgid "View submitted job listings"
 
 
 
 
683
  msgstr ""
684
 
685
+ #: includes/admin/class-wp-job-manager-setup.php:237
686
+ msgid "Add job listings to a page using the [jobs] shortcode"
687
  msgstr ""
688
 
689
+ #: includes/admin/class-wp-job-manager-setup.php:241
690
+ msgid "Add a job via the front-end"
691
  msgstr ""
692
 
693
+ #: includes/admin/class-wp-job-manager-setup.php:243
694
+ msgid "Learn to use the front-end job submission board"
695
  msgstr ""
696
 
697
+ #: includes/admin/class-wp-job-manager-setup.php:247
698
  msgid "View the job dashboard"
699
  msgstr ""
700
 
701
+ #: includes/admin/class-wp-job-manager-setup.php:249
702
+ msgid "Learn to use the front-end job dashboard"
703
  msgstr ""
704
 
705
+ #: includes/admin/class-wp-job-manager-setup.php:253
706
  msgid ""
707
+ "If you need help, you can find more detail in our %1$ssupport "
708
+ "documentation%2$s or post your question on the %3$sWP Job Manager support "
709
+ "forums%2$s. Happy hiring!"
710
  msgstr ""
711
 
712
+ #: includes/admin/class-wp-job-manager-setup.php:256
713
+ msgid "Support WP Job Manager's Ongoing Development"
714
  msgstr ""
715
 
716
+ #: includes/admin/class-wp-job-manager-setup.php:257
717
  msgid ""
718
+ "There are lots of ways you can support open source software projects like "
719
+ "this one: contributing code, fixing a bug, assisting with non-English "
720
+ "translation, or just telling your friends about WP Job Manager to help "
721
+ "spread the word. We appreciate your support!"
722
  msgstr ""
723
 
724
+ #: includes/admin/class-wp-job-manager-setup.php:259
725
  msgid "Leave a positive review"
726
  msgstr ""
727
 
728
+ #: includes/admin/class-wp-job-manager-setup.php:260
729
  msgid "Contribute a localization"
730
  msgstr ""
731
 
732
+ #: includes/admin/class-wp-job-manager-setup.php:261
733
  msgid "Contribute code or report a bug"
734
  msgstr ""
735
 
736
+ #: includes/admin/class-wp-job-manager-setup.php:262
737
  msgid "Help other users on the forums"
738
  msgstr ""
739
 
1095
  msgstr ""
1096
 
1097
  #: includes/forms/class-wp-job-manager-form-submit-job.php:144
1098
+ #: wp-job-manager-template.php:642
1099
  msgid "you@yourdomain.com"
1100
  msgstr ""
1101
 
1226
  msgid "You must be signed in to post a new listing."
1227
  msgstr ""
1228
 
1229
+ #: includes/helper/class-wp-job-manager-helper.php:249
1230
+ msgid "Manage License"
1231
+ msgstr ""
1232
+
1233
+ #: includes/helper/class-wp-job-manager-helper.php:251
1234
+ #: includes/helper/views/html-licences.php:69
1235
+ msgid "Activate License"
1236
+ msgstr ""
1237
+
1238
+ #: includes/helper/class-wp-job-manager-helper.php:421
1239
+ msgid ""
1240
+ "Please enter a valid license key and email address in order to activate "
1241
+ "this plugin's license."
1242
+ msgstr ""
1243
+
1244
+ #: includes/helper/class-wp-job-manager-helper.php:449
1245
+ msgid "Connection failed to the License Key API server - possible server issue."
1246
+ msgstr ""
1247
+
1248
+ #: includes/helper/class-wp-job-manager-helper.php:457
1249
+ msgid "Plugin license has been activated."
1250
+ msgstr ""
1251
+
1252
+ #: includes/helper/class-wp-job-manager-helper.php:459
1253
+ msgid "An unknown error occurred while attempting to activate the license"
1254
+ msgstr ""
1255
+
1256
+ #: includes/helper/class-wp-job-manager-helper.php:471
1257
+ msgid "licence is not active."
1258
+ msgstr ""
1259
+
1260
+ #: includes/helper/class-wp-job-manager-helper.php:485
1261
+ msgid "Plugin license has been deactivated."
1262
+ msgstr ""
1263
+
1264
+ #: includes/helper/views/html-licence-key-notice.php:7
1265
+ msgid "Hide notice"
1266
+ msgstr ""
1267
+
1268
+ #: includes/helper/views/html-licences.php:50
1269
+ #: includes/helper/views/html-licences.php:63
1270
+ msgid "License"
1271
+ msgstr ""
1272
+
1273
+ #: includes/helper/views/html-licences.php:53
1274
+ #: includes/helper/views/html-licences.php:66
1275
+ msgid "Email"
1276
+ msgstr ""
1277
+
1278
+ #: includes/helper/views/html-licences.php:57
1279
+ msgid "Deactivate License"
1280
+ msgstr ""
1281
+
1282
+ #: includes/helper/views/html-licences.php:79
1283
+ msgid "No plugins are activated that have licenses managed by WP Job Manager."
1284
+ msgstr ""
1285
+
1286
  #: includes/rest-api/class-wp-job-manager-controllers-status.php:52
1287
  msgid "Not Found"
1288
  msgstr ""
1568
  msgid "Inactive"
1569
  msgstr ""
1570
 
1571
+ #: wp-job-manager-template.php:238
1572
  msgid "Application via \"%s\" listing on %s"
1573
  msgstr ""
1574
 
1575
+ #: wp-job-manager-template.php:616
1576
  msgid "Username"
1577
  msgstr ""
1578
 
1579
+ #: wp-job-manager-template.php:624
1580
  msgid "Password"
1581
  msgstr ""
1582
 
1583
+ #: wp-job-manager-template.php:634
1584
  msgid "Verify Password"
1585
  msgstr ""
1586
 
1587
+ #: wp-job-manager-template.php:641
1588
  msgid "Your email"
1589
  msgstr ""
1590
 
1591
+ #: wp-job-manager-template.php:668
1592
  msgid "Posted on "
1593
  msgstr ""
1594
 
1595
+ #: wp-job-manager-template.php:670 wp-job-manager-template.php:690
1596
  msgid "Posted %s ago"
1597
  msgstr ""
1598
 
1599
+ #: wp-job-manager-template.php:713
1600
  msgid "Anywhere"
1601
  msgstr ""
1602
 
1603
+ #: wp-job-manager.php:213
1604
  msgid "Load previous listings"
1605
  msgstr ""
1606
 
1607
+ #: wp-job-manager.php:264
1608
  msgid "Invalid file type. Accepted types:"
1609
  msgstr ""
1610
 
1611
+ #: wp-job-manager.php:275
1612
  msgid "Are you sure you want to delete this listing?"
1613
  msgstr ""
1614
 
1655
  msgid "job-type"
1656
  msgstr ""
1657
 
1658
+ #: includes/admin/class-wp-job-manager-setup.php:191
1659
  msgctxt "Default page title (wizard)"
1660
  msgid "Post a Job"
1661
  msgstr ""
1662
 
1663
+ #: includes/admin/class-wp-job-manager-setup.php:199
1664
  msgctxt "Default page title (wizard)"
1665
  msgid "Job Dashboard"
1666
  msgstr ""
1667
 
1668
+ #: includes/admin/class-wp-job-manager-setup.php:207
1669
  msgctxt "Default page title (wizard)"
1670
  msgid "Jobs"
1671
  msgstr ""
1711
  #: wp-job-manager-functions.php:260
1712
  msgctxt "post status"
1713
  msgid "Active"
1714
+ msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: mikejolley, automattic, adamkheckler, annezazu, cena, chaselivings
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.3.1
5
  Tested up to: 4.8
6
- Stable tag: 1.28.0
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -141,8 +141,16 @@ You can view (and contribute) translations via the [translate.wordpress.org](htt
141
 
142
  == Changelog ==
143
 
 
 
 
 
 
 
 
 
144
  = 1.28.0 =
145
- * Enhancement: Improves support for Google Job Search by adding `JobListing` structured data. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1115)
146
  * Enhancement: Adds ability for job types to be mapped to an employment type as defined for Google Job Search. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1112)
147
  * Enhancement: Requests search engines no longer index expired and filled job listings. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1120)
148
  * Enhancement: Improves support with third-party sitemap generation in Jetpack, Yoast SEO, and All in One SEO. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1119)
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.3.1
5
  Tested up to: 4.8
6
+ Stable tag: 1.29.0
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
141
 
142
  == Changelog ==
143
 
144
+ = 1.29.0 =
145
+ * Enhancement: Moves license and update management for official add-ons to the core plugin. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1168)
146
+ * Enhancement: Update language for setup wizard with more clear descriptions. (@donnapep; https://github.com/Automattic/WP-Job-Manager/pull/1194)
147
+ * Fix: Prevent duplicate attachments to job listing posts for non-image media. (@tripflex; https://github.com/Automattic/WP-Job-Manager/pull/1144)
148
+ * Fix: PHP error on registration form due to missing placeholder text. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1180)
149
+ * Fix: Apply `the_job_application_method` filter even when no default is available. (@turtlepod; https://github.com/Automattic/WP-Job-Manager/issues/1164)
150
+ * Fix: Properly reset category selector on `[jobs]` shortcode. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1190)
151
+
152
  = 1.28.0 =
153
+ * Enhancement: Improves support for Google Job Search by adding `JobPosting` structured data. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1115)
154
  * Enhancement: Adds ability for job types to be mapped to an employment type as defined for Google Job Search. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1112)
155
  * Enhancement: Requests search engines no longer index expired and filled job listings. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1120)
156
  * Enhancement: Improves support with third-party sitemap generation in Jetpack, Yoast SEO, and All in One SEO. (@jom; https://github.com/Automattic/WP-Job-Manager/pull/1119)
templates/form-fields/password-field.php CHANGED
@@ -8,12 +8,12 @@
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
- * @version 1.5.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly
16
  }
17
  ?>
18
- <input type="password" class="input-text"<?php if ( isset( $field['autocomplete'] ) && false === $field['autocomplete'] ) { echo ' autocomplete="off"'; } ?> name="<?php echo esc_attr( isset( $field['name'] ) ? $field['name'] : $key ); ?>" id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" value="<?php echo isset( $field['value'] ) ? esc_attr( $field['value'] ) : ''; ?>" maxlength="<?php echo ! empty( $field['maxlength'] ) ? $field['maxlength'] : ''; ?>" <?php if ( ! empty( $field['required'] ) ) echo 'required'; ?> />
19
  <?php if ( ! empty( $field['description'] ) ) : ?><small class="description"><?php echo $field['description']; ?></small><?php endif; ?>
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
+ * @version 1.29.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly
16
  }
17
  ?>
18
+ <input type="password" class="input-text"<?php if ( isset( $field['autocomplete'] ) && false === $field['autocomplete'] ) { echo ' autocomplete="off"'; } ?> name="<?php echo esc_attr( isset( $field['name'] ) ? $field['name'] : $key ); ?>" id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo empty( $field['placeholder'] ) ? '' : esc_attr( $field['placeholder'] ); ?>" value="<?php echo isset( $field['value'] ) ? esc_attr( $field['value'] ) : ''; ?>" maxlength="<?php echo ! empty( $field['maxlength'] ) ? $field['maxlength'] : ''; ?>" <?php if ( ! empty( $field['required'] ) ) echo 'required'; ?> />
19
  <?php if ( ! empty( $field['description'] ) ) : ?><small class="description"><?php echo $field['description']; ?></small><?php endif; ?>
templates/form-fields/text-field.php CHANGED
@@ -8,12 +8,12 @@
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
- * @version 1.27.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly
16
  }
17
  ?>
18
- <input type="text" class="input-text" name="<?php echo esc_attr( isset( $field['name'] ) ? $field['name'] : $key ); ?>"<?php if ( isset( $field['autocomplete'] ) && false === $field['autocomplete'] ) { echo ' autocomplete="off"'; } ?> id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" value="<?php echo isset( $field['value'] ) ? esc_attr( $field['value'] ) : ''; ?>" maxlength="<?php echo ! empty( $field['maxlength'] ) ? $field['maxlength'] : ''; ?>" <?php if ( ! empty( $field['required'] ) ) echo 'required'; ?> />
19
  <?php if ( ! empty( $field['description'] ) ) : ?><small class="description"><?php echo $field['description']; ?></small><?php endif; ?>
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
+ * @version 1.29.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly
16
  }
17
  ?>
18
+ <input type="text" class="input-text" name="<?php echo esc_attr( isset( $field['name'] ) ? $field['name'] : $key ); ?>"<?php if ( isset( $field['autocomplete'] ) && false === $field['autocomplete'] ) { echo ' autocomplete="off"'; } ?> id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo empty( $field['placeholder'] ) ? '' : esc_attr( $field['placeholder'] ); ?>" value="<?php echo isset( $field['value'] ) ? esc_attr( $field['value'] ) : ''; ?>" maxlength="<?php echo ! empty( $field['maxlength'] ) ? $field['maxlength'] : ''; ?>" <?php if ( ! empty( $field['required'] ) ) echo 'required'; ?> />
19
  <?php if ( ! empty( $field['description'] ) ) : ?><small class="description"><?php echo $field['description']; ?></small><?php endif; ?>
templates/form-fields/textarea-field.php CHANGED
@@ -8,12 +8,12 @@
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
- * @version 1.27.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly
16
  }
17
  ?>
18
- <textarea cols="20" rows="3" class="input-text" name="<?php echo esc_attr( isset( $field['name'] ) ? $field['name'] : $key ); ?>" id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo esc_attr( $field['placeholder'] ); ?>" maxlength="<?php echo ! empty( $field['maxlength'] ) ? $field['maxlength'] : ''; ?>" <?php if ( ! empty( $field['required'] ) ) echo 'required'; ?>><?php echo isset( $field['value'] ) ? esc_textarea( $field['value'] ) : ''; ?></textarea>
19
- <?php if ( ! empty( $field['description'] ) ) : ?><small class="description"><?php echo $field['description']; ?></small><?php endif; ?>
8
  * @author Automattic
9
  * @package WP Job Manager
10
  * @category Template
11
+ * @version 1.29.0
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit; // Exit if accessed directly
16
  }
17
  ?>
18
+ <textarea cols="20" rows="3" class="input-text" name="<?php echo esc_attr( isset( $field['name'] ) ? $field['name'] : $key ); ?>" id="<?php echo esc_attr( $key ); ?>" placeholder="<?php echo empty( $field['placeholder'] ) ? '' : esc_attr( $field['placeholder'] ); ?>" maxlength="<?php echo ! empty( $field['maxlength'] ) ? $field['maxlength'] : ''; ?>" <?php if ( ! empty( $field['required'] ) ) echo 'required'; ?>><?php echo isset( $field['value'] ) ? esc_textarea( $field['value'] ) : ''; ?></textarea>
19
+ <?php if ( ! empty( $field['description'] ) ) : ?><small class="description"><?php echo $field['description']; ?></small><?php endif; ?>
wp-job-manager-template.php CHANGED
@@ -227,8 +227,9 @@ function get_the_job_application_method( $post = null ) {
227
  $method = new stdClass();
228
  $apply = $post->_application;
229
 
230
- if ( empty( $apply ) )
231
- return false;
 
232
 
233
  if ( strstr( $apply, '@' ) && is_email( $apply ) ) {
234
  $method->type = 'email';
227
  $method = new stdClass();
228
  $apply = $post->_application;
229
 
230
+ if ( empty( $apply ) ) {
231
+ return apply_filters( 'the_job_application_method', false, $post );
232
+ }
233
 
234
  if ( strstr( $apply, '@' ) && is_email( $apply ) ) {
235
  $method->type = 'email';
wp-job-manager.php CHANGED
@@ -3,7 +3,7 @@
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.28.0
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.1
@@ -58,7 +58,7 @@ class WP_Job_Manager {
58
  */
59
  public function __construct() {
60
  // Define constants
61
- define( 'JOB_MANAGER_VERSION', '1.28.0' );
62
  define( 'JOB_MANAGER_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
63
  define( 'JOB_MANAGER_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
64
 
@@ -71,6 +71,7 @@ class WP_Job_Manager {
71
  include_once( 'includes/class-wp-job-manager-forms.php' );
72
  include_once( 'includes/class-wp-job-manager-geocode.php' );
73
  include_once( 'includes/class-wp-job-manager-cache-helper.php' );
 
74
 
75
  add_action( 'rest_api_init', array( $this, 'rest_api' ) );
76
 
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.29.0
7
  * Author: Automattic
8
  * Author URI: https://wpjobmanager.com/
9
  * Requires at least: 4.1
58
  */
59
  public function __construct() {
60
  // Define constants
61
+ define( 'JOB_MANAGER_VERSION', '1.29.0' );
62
  define( 'JOB_MANAGER_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
63
  define( 'JOB_MANAGER_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
64
 
71
  include_once( 'includes/class-wp-job-manager-forms.php' );
72
  include_once( 'includes/class-wp-job-manager-geocode.php' );
73
  include_once( 'includes/class-wp-job-manager-cache-helper.php' );
74
+ include_once( 'includes/helper/class-wp-job-manager-helper.php' );
75
 
76
  add_action( 'rest_api_init', array( $this, 'rest_api' ) );
77