Issues (1066)

classes/class-lsx-projects-frontend.php (5 issues)

1
<?php
2
/**
3
 * LSX Projects Frontend Class
4
 *
5
 * @package   LSX Projects
6
 * @author    LightSpeed
7
 * @license   GPL3
8
 * @link
9
 * @copyright 2017 LightSpeed
10
 */
11
class LSX_Projects_Frontend {
12
13
	public function __construct() {
14
		$this->options = projects_get_options();
0 ignored issues
show
Bug Best Practice introduced by
The property options does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
15
16
		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5 );
17
		add_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ), 10, 2 );
18
		add_filter( 'template_include', array( $this, 'single_template_include' ), 99 );
19
		add_filter( 'template_include', array( $this, 'archive_template_include' ), 99 );
20
21
		if ( ! empty( $this->options['display']['projects_disable_single'] ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
22
			add_action( 'template_redirect', array( $this, 'disable_single' ) );
23
		}
24
25
		if ( is_admin() ) {
26
			add_filter( 'lsx_customizer_colour_selectors_body', array( $this, 'customizer_body_colours_handler' ), 15, 2 );
27
		}
28
29
		add_filter( 'lsx_banner_title', array( $this, 'lsx_banner_archive_title' ), 15 );
30
31
		add_filter( 'excerpt_more_p', array( $this, 'change_excerpt_more' ) );
32
		add_filter( 'excerpt_length', array( $this, 'change_excerpt_length' ) );
33
		add_filter( 'excerpt_strip_tags', array( $this, 'change_excerpt_strip_tags' ) );
34
35
		add_filter( 'pre_get_posts', array( $this, 'posts_per_page' ) );
36
		add_action( 'wp_footer', array( $this, 'add_form_modal' ) );
37
	}
38
39
	public function enqueue_scripts() {
40
		$has_slick = wp_script_is( 'slick', 'queue' );
41
42
		if ( ! $has_slick ) {
43
			wp_enqueue_style( 'slick', LSX_PROJECTS_URL . 'assets/css/vendor/slick.css', array(), LSX_PROJECTS_VER, null );
44
			wp_enqueue_script( 'slick', LSX_PROJECTS_URL . 'assets/js/vendor/slick.min.js', array( 'jquery' ), null, LSX_PROJECTS_VER, true );
45
		}
46
47
		$has_scrolltofixed = wp_script_is( 'scrolltofixed', 'queue' );
48
49
		if ( ! $has_scrolltofixed ) {
50
			wp_enqueue_script( 'scrolltofixed', LSX_PROJECTS_URL . 'assets/js/vendor/jquery-scrolltofixed-min.js', array( 'jquery' ), null, LSX_PROJECTS_VER, true );
51
		}
52
53
		$has_isotope = wp_script_is( 'isotope', 'queue' );
54
55
		if ( ! $has_isotope ) {
56
			wp_enqueue_script( 'isotope', LSX_PROJECTS_URL . 'assets/js/vendor/isotope.pkgd.min.js', array( 'jquery' ), null, LSX_PROJECTS_VER, true );
57
		}
58
59
		wp_enqueue_script( 'lsx-projects', LSX_PROJECTS_URL . 'assets/js/lsx-projects.min.js', array( 'jquery', 'slick', 'scrolltofixed', 'isotope' ), LSX_PROJECTS_VER, true );
60
61
		$params = apply_filters( 'lsx_projects_js_params', array(
62
			'ajax_url' => admin_url( 'admin-ajax.php' ),
63
		));
64
65
		wp_localize_script( 'lsx-projects', 'lsx_customizer_params', $params );
66
67
		wp_enqueue_style( 'lsx-projects', LSX_PROJECTS_URL . 'assets/css/lsx-projects.css', array(), LSX_PROJECTS_VER );
68
		wp_style_add_data( 'lsx-projects', 'rtl', 'replace' );
69
	}
70
71
	/**
72
	 * Allow data params for Slick slider addon.
73
	 */
74
	public function wp_kses_allowed_html( $allowedtags, $context ) {
75
		$allowedtags['div']['data-slick'] = true;
76
		return $allowedtags;
77
	}
78
79
	/**
80
	 * Single template.
81
	 */
82
	public function single_template_include( $template ) {
83
		if ( is_main_query() && is_singular( 'project' ) ) {
84
			if ( empty( locate_template( array( 'single-projects.php' ) ) ) && file_exists( LSX_PROJECTS_PATH . 'templates/single-projects.php' ) ) {
85
				$template = LSX_PROJECTS_PATH . 'templates/single-projects.php';
86
			}
87
		}
88
89
		return $template;
90
	}
91
92
	/**
93
	 * Archive template.
94
	 */
95
	public function archive_template_include( $template ) {
96
		if ( is_main_query() && ( is_post_type_archive( 'project' ) || is_tax( 'project-group' ) ) ) {
97
			if ( empty( locate_template( array( 'archive-projects.php' ) ) ) && file_exists( LSX_PROJECTS_PATH . 'templates/archive-projects.php' ) ) {
98
				$template = LSX_PROJECTS_PATH . 'templates/archive-projects.php';
99
			}
100
		}
101
102
		return $template;
103
	}
104
105
	/**
106
	 * Removes access to single project member posts.
107
	 */
108
	public function disable_single() {
109
		$queried_post_type = get_query_var( 'post_type' );
110
111
		if ( is_single() && 'project' === $queried_post_type ) {
112
			wp_redirect( home_url(), 301 );
113
			exit;
114
		}
115
	}
116
117
	/**
118
	 * Handle body colours that might be change by LSX Customiser
119
	 */
120
	public function customizer_body_colours_handler( $css, $colors ) {
121
		$css .= '
122
			@import "' . LSX_PROJECTS_PATH . '/assets/css/scss/customizer-projects-body-colours";
123
124
			/**
125
			 * LSX Customizer - Body (LSX Projects)
126
			 */
127
			@include customizer-projects-body-colours (
128
				$bg: 		' . $colors['background_color'] . ',
129
				$breaker: 	' . $colors['body_line_color'] . ',
130
				$color:    	' . $colors['body_text_color'] . ',
131
				$link:    	' . $colors['body_link_color'] . ',
132
				$hover:    	' . $colors['body_link_hover_color'] . ',
133
				$small:    	' . $colors['body_text_small_color'] . '
134
			);
135
		';
136
137
		return $css;
138
	}
139
140
	/**
141
	 * Change the LSX Banners title for project archive.
142
	 */
143
	public function lsx_banner_archive_title( $title ) {
144
		if ( is_main_query() && is_post_type_archive( 'project' ) ) {
145
			$title = '<h1 class="page-title">' . esc_html__( 'Portfolio', 'lsx-projects' ) . '</h1>';
146
		}
147
148
		if ( is_main_query() && is_tax( 'project-group' ) ) {
149
			$tax = get_queried_object();
150
			$title = '<h1 class="page-title">' . esc_html__( 'Project Type', 'lsx-projects' ) . ': ' . apply_filters( 'the_title', $tax->name ) . '</h1>';
151
		}
152
153
		return $title;
154
	}
155
156
	/**
157
	 * Remove the "continue reading" when the single is disabled.
158
	 */
159
	public function change_excerpt_more( $excerpt_more ) {
160
		global $post;
161
162
		if ( 'project' === $post->post_type ) {
163
			if ( ! empty( $this->options['display']['projects_disable_single'] ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
164
				$excerpt_more = '';
165
			}
166
		}
167
168
		return $excerpt_more;
169
	}
170
171
	/**
172
	 * Change the word count when crop the content to excerpt (homepage widget).
173
	 */
174
	public function change_excerpt_length( $excerpt_word_count ) {
175
		global $post;
176
177
		if ( is_front_page() && 'project' === $post->post_type ) {
178
			$excerpt_word_count = 20;
179
		}
180
181
		if ( is_singular( 'project' ) && ( 'team' === $post->post_type || 'testimonial' === $post->post_type ) ) {
182
			$excerpt_word_count = 20;
183
		}
184
185
		return $excerpt_word_count;
186
	}
187
188
	/**
189
	 * Change the allowed tags crop the content to excerpt (homepage widget).
190
	 */
191
	public function change_excerpt_strip_tags( $allowed_tags ) {
192
		global $post;
193
194
		if ( is_front_page() && 'project' === $post->post_type ) {
195
			$allowed_tags = '<p>,<br>,<b>,<strong>,<i>,<u>,<ul>,<ol>,<li>,<span>';
196
		}
197
198
		if ( is_singular( 'project' ) && ( 'team' === $post->post_type || 'testimonial' === $post->post_type ) ) {
199
			$allowed_tags = '<p>,<br>,<b>,<strong>,<i>,<u>,<ul>,<ol>,<li>,<span>';
200
		}
201
202
		return $allowed_tags;
203
	}
204
205
	/**
206
	 * Change posts per page counter for archive.
207
	 */
208
	public function posts_per_page( $query ) {
209
		if ( ! is_admin() && $query->is_main_query() ) {
210
			if ( $query->is_post_type_archive( 'project' ) || $query->is_tax( 'project-group' ) ) {
211
				if ( ! function_exists( 'lsx_search' ) ) {
212
					$query->set( 'posts_per_page', -1 );
213
				} else {
214
					$query->set( 'posts_per_page', '12' );
215
				}
216
			}
217
		}
218
219
		return $query;
220
	}
221
222
	/**
223
	 * Add form modal
224
	 */
225
	public function add_form_modal() {
226
227
		if ( empty( $this->options['display']['projects_modal_enable'] ) ) {
228
			return '';
229
		}
230
231
		if ( empty( $this->options['display']['projects_modal_cta_label'] ) || empty( $this->options['display']['projects_modal_form_id'] ) || empty( $this->options['display']['projects_wpform_modal_form_id'] ) ) {
232
			return '';
233
		}
234
235
		if ( ! is_singular( 'project' ) ) {
236
			return '';
237
		}
238
		?>
239
		<div class="lsx-modal modal fade" id="lsx-project-contact" role="dialog">
240
			<div class="modal-dialog">
241
				<div class="modal-content">
242
					<button type="button" class="close" data-dismiss="modal">&times;</button>
243
244
					<div class="modal-header">
245
						<h4 class="modal-title"><?php echo esc_html( $this->options['display']['projects_modal_cta_label'] ); ?></h4>
246
					</div>
247
248
					<div class="modal-body">
249
						<?php
250
						if ( ! empty( $this->options['display']['projects_modal_form_id'] ) ) {
251
							echo do_shortcode( '[caldera_form id="' . $this->options['display']['projects_modal_form_id'] . '"]' );
252
						} elseif ( ! empty( $this->options['display']['projects_wpform_modal_form_id'] ) ) {
253
							echo do_shortcode( '[wpforms id="' . $this->options['display']['projects_wpform_modal_form_id'] . '"]' );
254
						} ?>
255
					</div>
256
				</div>
257
			</div>
258
		</div>
259
		<?php
260
	}
261
262
}
263
264
global $lsx_projects_frontend;
265
$lsx_projects_frontend = new LSX_Projects_Frontend();
266