Completed
Pull Request — master (#1344)
by
unknown
05:13
created

Sensei_Legacy_Shortcodes::user_courses()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 11

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 22
rs 9.2
cc 2
eloc 11
nc 2
nop 2
1
<?php
2
3
/**
4
 * Sensei_Legacy_Shortcodes class
5
 *
6
 * All functionality pertaining the the shortcodes before
7
 * version 1.9
8
 *
9
 * These shortcodes will soon be deprecated.
10
 *
11
 * @package Content
12
 * @subpackage Shortcode
13
 * @author Automattic
14
 *
15
 * @since		1.6.0
16
 *
17
 */
18
class Sensei_Legacy_Shortcodes {
19
20
    /**
21
     * Add the legacy shortcodes to WordPress
22
     *
23
     * @since 1.9.0
24
     */
25
    public static function init(){
26
27
        add_shortcode( 'allcourses',      array( __CLASS__, 'all_courses' ) );
28
        add_shortcode( 'newcourses',      array( __CLASS__,'new_courses' ) );
29
        add_shortcode( 'featuredcourses', array( __CLASS__,'featured_courses') );
30
        add_shortcode( 'freecourses',     array( __CLASS__,'free_courses') );
31
        add_shortcode( 'paidcourses',     array( __CLASS__,'paid_courses') );
32
        add_shortcode( 'usercourses',     array( __CLASS__,'user_courses' ) );
33
34
    }
35
    /**
36
     * all_courses shortcode output function.
37
     *
38
     * The function should only be called indirectly through do_shortcode()
39
     *
40
     * @access public
41
     * @param mixed $atts
42
     * @param mixed $content (default: null)
43
     * @return string
44
     */
45
    public static function all_courses( $atts, $content = null ) {
46
47
        return self::generate_shortcode_courses( '', 'allcourses' ); // all courses but no title
48
49
    } // all_courses()
50
51
    /**
52
     * paid_courses function.
53
     *
54
     * @access public
55
     * @param mixed $atts
56
     * @param mixed $content (default: null)
57
     * @return string
58
     */
59
    public static function paid_courses( $atts, $content = null ) {
60
61
        return self::generate_shortcode_courses( __( 'Paid Courses', 'woothemes-sensei' ), 'paidcourses' );
62
63
    } // End paid_courses()
64
65
66
    /**
67
     * featured_courses function.
68
     *
69
     * @access public
70
     * @param mixed $atts
71
     * @param mixed $content (default: null)
72
     * @return string
73
     */
74
    public static function featured_courses( $atts, $content = null ) {
75
76
        return self::generate_shortcode_courses( __( 'Featured Courses', 'woothemes-sensei' ), 'featuredcourses' );
77
78
    } // End featured_courses()
79
80
    /**
81
     * shortcode_free_courses function.
82
     *
83
     * @access public
84
     * @param mixed $atts
85
     * @param mixed $content (default: null)
86
     * @return string
87
     */
88
    public static function free_courses( $atts, $content = null ) {
89
90
        return self::generate_shortcode_courses( __( 'Free Courses', 'woothemes-sensei' ) 'freecourses' );
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ')'
Loading history...
91
92
    } // End free_courses()
93
94
    /**
95
     * shortcode_new_courses function.
96
     *
97
     * @access public
98
     * @param mixed $atts
99
     * @param mixed $content (default: null)
100
     * @return string
101
     */
102
    public static function new_courses( $atts, $content = null ) {
103
104
        return self::generate_shortcode_courses( __( 'New Courses', 'woothemes-sensei' ), 'newcourses' );
105
106
    } // End new_courses()
107
108
    /**
109
     * Generate courses adding a title.
110
     *
111
     * @since 1.9.0
112
     *
113
     * @param $title
114
     * @param $shortcode_specific_override
115
     * @return string
116
     */
117
    public static function generate_shortcode_courses( $title , $shortcode_specific_override  ){
118
119
        global  $shortcode_override, $posts_array;
120
121
        $shortcode_override = $shortcode_specific_override;
122
123
        // do not show this short code if there is a shortcode int he url and
124
        // this specific shortcode is not the one requested in the ur.
125
        $specific_shortcode_requested = isset( $_GET['action'] ) ?  sanitize_text_field(  $_GET['action']  ) : '';
126
        if( ! empty( $specific_shortcode_requested) &&
127
            $specific_shortcode_requested != $shortcode_override ){
128
129
            return '';
130
131
        }
132
133
        // loop and get all courses html
134
        ob_start();
135
        self::initialise_legacy_course_loop();
136
        $courses = ob_get_clean();
137
138
        $content = '';
139
        if( count( $posts_array ) > 0 ){
140
141
            $before = empty($title)? '' : '<header class="archive-header"><h2>'. $title .'</h2></header>';
142
            $before .= '<section id="main-course" class="course-container">';
143
144
            $after = '</section>';
145
146
            //assemble
147
            $content = $before . $courses . $after;
148
149
        }
150
151
        return $content;
152
153
    }// end generate_shortcode_courses
154
155
156
    /**
157
     * user_courses function.
158
     *
159
     * @access public
160
     * @param mixed $atts
161
     * @param mixed $content (default: null)
162
     * @return string
163
     */
164
    public static function user_courses( $atts, $content = null ) {
165
        global $shortcode_override;
166
        extract( shortcode_atts( array(	'amount' => 0 ), $atts ) );
167
168
        $shortcode_override = 'usercourses';
169
170
        ob_start();
171
172
        if( is_user_logged_in() ){
173
174
            Sensei_Templates::get_template( 'user/my-courses.php' );
175
176
        }else{
177
178
            Sensei()->frontend->sensei_login_form();
179
180
        }
181
182
        $content = ob_get_clean();
183
        return $content;
184
185
    } // End user_courses()
186
187
    /**
188
     * This function is simply to honor the legacy
189
     * loop-course.php for the old shortcodes.
190
     * @since 1.9.0
191
     */
192
    public static function initialise_legacy_course_loop(){
193
194
        global  $post, $wp_query, $shortcode_override, $course_excludes;
195
196
        // Handle Query Type
197
        $query_type = '';
198
199
        if ( isset( $_GET[ 'action' ] ) && ( '' != esc_html( $_GET[ 'action' ] ) ) ) {
200
            $query_type = esc_html( $_GET[ 'action' ] );
201
        } // End If Statement
202
203
        if ( '' != $shortcode_override ) {
204
            $query_type = $shortcode_override;
205
        } // End If Statement
206
207
        if ( !is_array( $course_excludes ) ) { $course_excludes = array(); }
208
209
        // Check that query returns results
210
        // Handle Pagination
211
        $paged = $wp_query->get( 'paged' );
212
        $paged = empty( $paged ) ? 1 : $paged;
213
214
215
        // Check for pagination settings
216
        if ( isset( Sensei()->settings->settings[ 'course_archive_amount' ] ) && ( 0 < absint( Sensei()->settings->settings[ 'course_archive_amount' ] ) ) ) {
217
218
            $amount = absint( Sensei()->settings->settings[ 'course_archive_amount' ] );
219
220
        } else {
221
222
            $amount = $wp_query->get( 'posts_per_page' );
223
224
        } // End If Statement
225
226
        // This is not a paginated page (or it's simply the first page of a paginated page/post)
227
228
        global $posts_array;
229
        $course_includes   = array();
230
231
        $query_args = Sensei()->course->get_archive_query_args( $shortcode_override, $amount, $course_includes, $course_excludes );
232
        $course_query = new WP_Query( $query_args );
233
        $posts_array = $course_query->get_posts();
234
235
        // output the courses
236
        if( ! empty( $posts_array ) ) {
237
238
            //output all courses for current query
239
            self::loop_courses( $course_query, $amount );
240
241
        }
242
243
    }
244
245
    /**
246
     * Loop through courses in the query and output the infomration needed
247
     *
248
     * @since 1.9.0
249
     *
250
     * @param WP_Query $course_query
251
     */
252
    public static function loop_courses( $course_query, $amount ){
253
254
        global $shortcode_override, $posts_array, $post, $wp_query, $shortcode_override, $course_excludes, $course_includes;
255
256
        if ( count( $course_query->get_posts() ) > 0 ) {
257
258
            do_action( 'sensei_course_archive_header', $shortcode_override );
259
260
            foreach ( $course_query->get_posts() as $course){
261
262
                // Make sure the other loops dont include the same post twice!
263
                array_push( $course_excludes, $course->ID );
264
265
                // output the course markup
266
                self::the_course( $course->ID );
267
268
            } // End For Loop
269
270
            // More and Prev links
271
            $posts_array_query = new WP_Query(Sensei()->course->course_query( $shortcode_override, $amount, $course_includes, $course_excludes ) );
272
            $posts_array       = $posts_array_query->get_posts();
273
            $max_pages = $course_query->found_posts / $amount;
274
            if ( '' != $shortcode_override && ( $max_pages > $course_query->get( 'paged' ) ) ) {
275
276
                switch( $shortcode_override ){
277
                    case 'paidcourses':
278
                        $filter = 'paid';
279
                        break;
280
                    case 'featuredcourses':
281
                        $filter = 'featured';
282
                        break;
283
                    case 'freecourses':
284
                        $filter = 'free';
285
                        break;
286
                    default:
287
                        $filter = '';
288
                        break;
289
                }
290
291
                $quer_args = array();
292
                $quer_args[ 'paged' ] = '2';
293
                if( !empty( $filter ) ){
294
                    $quer_args[ 'course_filter' ] = $filter;
295
                }
296
297
                $course_pagination_link = get_post_type_archive_link( 'course' );
298
                $more_link_text = esc_html( Sensei()->settings->settings[ 'course_archive_more_link_text' ] );
299
                $more_link_url =  esc_url( add_query_arg( $quer_args, $course_pagination_link ) );
300
301
                // next/more
302
                $html  = '<div class="navigation"><div class="nav-next">';
303
                $html .= '<a href="' . $more_link_url . '">';
304
                $html .= $more_link_text;
305
                $html .= '<span class="meta-nav"></span></a></div>';
306
307
                echo apply_filters( 'course_archive_next_link', $html );
308
309
            } // End If Statement
310
311
        } // End If Statement
312
    }
313
314
    /**
315
     * Print a single course markup
316
     *
317
     * @param $course_id
318
     */
319
    public static function the_course( $course_id ){
320
321
        // Get meta data
322
        $course =  get_post( $course_id );
323
        $user_info = get_userdata( absint( $course->post_author ) );
324
        $author_link = get_author_posts_url( absint( $course->post_author ) );
325
        $author_display_name = $user_info->display_name;
326
        $author_id = $course->post_author;
327
        $category_output = get_the_term_list( $course_id, 'course-category', '', ', ', '' );
328
        $preview_lesson_count = intval( Sensei()->course->course_lesson_preview_count( $course_id ) );
329
        $is_user_taking_course = Sensei_Utils::user_started_course( $course_id, get_current_user_id() );
330
        ?>
331
332
        <article class="<?php echo esc_attr( join( ' ', get_post_class( array( 'course', 'post' ), $course_id ) ) ); ?>">
333
            <?php
334
            // so that legacy shortcodes work with the party plugins that wants to hook in
335
            do_action('sensei_course_content_before',$course->ID );
336
            ?>
337
            <div class="course-content">
338
339
                <?php Sensei()->course->course_image($course_id); ?>
340
341
                <header>
342
343
                    <h2><a href="<?php echo get_permalink($course_id) ?>" title="<?php echo $course->post_title; ?>"><?php echo $course->post_title; ?></a></h2>
344
345
                </header>
346
347
                <section class="entry">
348
349
                    <p class="sensei-course-meta">
350
351
                        <?php if ( isset( Sensei()->settings->settings[ 'course_author' ] ) && ( Sensei()->settings->settings[ 'course_author' ] ) ) { ?>
352
                            <span class="course-author"><?php _e( 'by ', 'woothemes-sensei' ); ?><a href="<?php echo $author_link; ?>" title="<?php echo esc_attr( $author_display_name ); ?>"><?php echo esc_html( $author_display_name   ); ?></a></span>
353
                        <?php } // End If Statement ?>
354
355
                        <span class="course-lesson-count">
356
                                    <?php echo Sensei()->course->course_lesson_count( $course_id ) . '&nbsp;' .  __( 'Lessons', 'woothemes-sensei' ); ?>
357
                                </span>
358
359
                        <?php if ( '' != $category_output ) { ?>
360
                            <span class="course-category"><?php echo sprintf( __( 'in %s', 'woothemes-sensei' ), $category_output ); ?></span>
361
                        <?php } // End If Statement ?>
362
363
                        <?php sensei_simple_course_price( $course_id ); ?>
364
365
                    </p>
366
367
                    <p class="course-excerpt"><?php echo $course->post_excerpt; ?>
368
369
                    </p>
370
371
                    <?php if ( 0 < $preview_lesson_count && !$is_user_taking_course ) {
372
                        $preview_lessons = sprintf( __( '(%d preview lessons)', 'woothemes-sensei' ), $preview_lesson_count ); ?>
373
                        <p class="sensei-free-lessons">
374
                            <a href="<?php echo get_permalink( $course_id ); ?>"><?php _e( 'Preview this course', 'woothemes-sensei' ) ?>
375
                            </a> - <?php echo $preview_lessons; ?>
376
                        </p>
377
                    <?php } ?>
378
379
                </section>
380
381
            </div>
382
            <?php
383
            // so that legacy shortcodes work with thir party plugins that wants to hook in
384
            do_action('sensei_course_content_after', $course->ID);
385
            ?>
386
387
        </article>
388
389
        <?php
390
391
392
    } // end the_course
393
394
}// end class legacy shortcodes