Ordercustomizer/panel.php000064400000002140147600022000010544 0ustar00set_panel(); $this->set_section(); } public function set_panel() { $this->customizer->add_panel( [ 'id' => $this->panelID, 'title' => esc_html__( 'Bookmark & Follow', 'soledad' ), 'priority' => $this->id, ] ); } public function set_section() { $this->add_lazy_section( 'penci_bookmark_follow_general_section', esc_html__( 'General', 'penci-bookmark-follow' ), $this->panelID ); $this->add_lazy_section( 'penci_bookmark_follow_noti_section', esc_html__( 'Notifications Settings', 'penci-bookmark-follow' ), $this->panelID ); $this->add_lazy_section( 'penci_bookmark_follow_email_section', esc_html__( 'Email Settings', 'penci-bookmark-follow' ), $this->panelID ); $this->add_lazy_section( 'penci_bookmark_follow_translate_section', esc_html__( 'Quick Text Translation', 'penci-bookmark-follow' ), $this->panelID ); } }customizer/settings.php000064400000003135147600022000011312 0ustar00customizer = \SoledadFW\Customizer\Customizer::get_instance(); } if ( is_customize_preview() || ! is_admin() ) { add_filter( 'soledad_fw_register_lazy_section', array( $this, 'register_lazy_section' ) ); add_action( 'soledad_fw_register_customizer_option', array( $this, 'load_customizer' ), 95 ); } } /** * @return Customizer */ public static function getInstance() { if ( null === static::$instance ) { static::$instance = new static(); } return static::$instance; } public function register_lazy_section( $result ) { $array = $this->list_section; $path = dirname( __DIR__ ) . '/customizer/'; foreach ( $array as $id ) { $result[ $id ][] = "{$path}{$id}.php"; } return $result; } public function load_customizer() { $this->customizer = Customizer\Customizer::get_instance(); new Customizer\PenciBF_Option( $this->customizer, 206 ); } } customizer/penci_bookmark_follow_noti_section.php000064400000007077147600022000016605 0ustar00 'pencibf_double_opt_in', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Require Email Confirmation', 'penci-bookmark-follow' ), 'description' => esc_html__( 'When enable, Registered users will be sent a confirmation email to subscribe, and will only be added once they confirmed the subscription', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_email_01', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Posts Notification Events', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_post_trigger_notification_post_update', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Email: When post / page updated', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_post_trigger_notification_new_comment', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Email: When new comment added', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_email_03', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Author Notification Events', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_trigger_notification_post_published', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Email: When post / page published', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_trigger_notification_post_update', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Email: When post / page updated', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_trigger_notification_new_comment', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Email: When new comment added', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_email_02', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Popup Notifications', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_enable_popup_notify', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'default' => true, 'label' => esc_html__( 'Enable Popup Notify', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_notify_text_cl', 'transport' => 'postMessage', 'type' => 'soledad-fw-color', 'label' => esc_html__( 'Popup Text Color', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_notify_bg_cl', 'transport' => 'postMessage', 'type' => 'soledad-fw-color', 'label' => esc_html__( 'Popup Background Color', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_notify_timeout', 'transport' => 'postMessage', 'default' => '2000', 'type' => 'soledad-fw-number', 'label' => esc_html__( 'Popup Timeout', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_position', 'transport' => 'postMessage', 'default' => 'bottom-center', 'type' => 'soledad-fw-select', 'label' => esc_html__( 'Popup Position', 'penci-bookmark-follow' ), 'choices' => [ 'top-left' => 'Top Left', 'top-right' => 'Top Right', 'top-center' => 'Top Center', 'mid-center' => 'Middle Center', 'bottom-left' => 'Bottom Left', 'bottom-right' => 'Bottom Right', 'bottom-center' => 'Bottom Center', ] ); return $options;customizer/penci_bookmark_follow_general_section.php000064400000020207147600022000017237 0ustar00 'pencibf_disable_header_icon', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Disable Header Bookmark Icon', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_01', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Posts Type Follows', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_prevent_type', 'default' => ['post'], 'sanitize' => 'penci_sanitize_multiple_checkbox', 'label' => __( 'Enable Support in Post Types', 'soledad' ), 'type' => 'soledad-fw-select', 'multiple' => 999, 'choices' => call_user_func( function () { $exclude = array( 'attachment', 'revision', 'nav_menu_item', 'safecss', 'penci-block', 'penci_builder', 'custom-post-template', 'archive-template', ); $registered = get_post_types( [ 'show_in_nav_menus' => true ], 'objects' ); $types = array(); foreach ( $registered as $post ) { if ( in_array( $post->name, $exclude ) ) { continue; } $types[ $post->name ] = $post->label; } return $types; } ) ); $options[] = array( 'id' => 'pencibf_disable_follow_guest', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Disable Guest Followers', 'penci-bookmark-follow' ), 'description' => esc_html__( 'Guests (non-logged-in users) have the permission to follow any post by default. If you check this option, then Follow button would not be displayed for Guest users.', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_enable_notify_followers', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Auto Send Email Notification for Followers', 'penci-bookmark-follow' ), 'description' => esc_html__( 'If this option is checked, whenever the post is edited or receives new comments, the followers will receive an email notification.', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_disable_auto_follow_add_comment', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Disable Email Notify When Comment Added', 'penci-bookmark-follow' ), 'description' => esc_html__( 'This option allows you to disable email notifications when a post receives a new comment. It applies when you have checked the "Auto Send Email Notification for Followers" option mentioned above.', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_custom_subscribe_page', 'transport' => 'postMessage', 'type' => 'soledad-fw-ajax-select', 'description' => __( 'After selecting a custom bookmark page, you need to insert the shortcodes [pencibf_follow_post_list] and [pencibf_follow_author_list] into the page to display the bookmarked content.','penci-bookmark-follow'), 'choices' => call_user_func( function () { $builder_layout = [ '' => '- Select -' ]; $builder_layouts = get_posts( [ 'post_type' => 'page', 'posts_per_page' => - 1, ] ); foreach ( $builder_layouts as $builder_builder ) { $builder_layout[ $builder_builder->ID ] = $builder_builder->post_title; } return $builder_layout; } ), 'label' => esc_html__( 'Custom Bookmark Page', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_custom_unsubscribe_page', 'transport' => 'postMessage', 'type' => 'soledad-fw-ajax-select', 'description' => __( 'After selecting a custom Unsubscribe page, you need to insert the shortcodes [pencibf_unsubscribe] into the page to display the Unsubscribe Form.','penci-bookmark-follow'), 'choices' => call_user_func( function () { $builder_layout = [ '' => '- Select -' ]; $builder_layouts = get_posts( [ 'post_type' => 'page', 'posts_per_page' => - 1, ] ); foreach ( $builder_layouts as $builder_builder ) { $builder_layout[ $builder_builder->ID ] = $builder_builder->post_title; } return $builder_layout; } ), 'label' => esc_html__( 'Custom Unsubscribe Email Bookmark Page', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_custom_cat_page', 'transport' => 'postMessage', 'type' => 'soledad-fw-ajax-select', 'description' => __( 'Select the page that you\'ve inserted the Category Listing element.','penci-bookmark-follow'), 'choices' => call_user_func( function () { $builder_layout = [ '' => '- Select -' ]; $builder_layouts = get_posts( [ 'post_type' => 'page', 'posts_per_page' => - 1, ] ); foreach ( $builder_layouts as $builder_builder ) { $builder_layout[ $builder_builder->ID ] = $builder_builder->post_title; } return $builder_layout; } ), 'label' => esc_html__( 'Custom Category Listing Page', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_04', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Bookmark Page Settings', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_number_ppp', 'transport' => 'postMessage', 'default' => '6', 'type' => 'soledad-fw-number', 'label' => esc_html__( 'Number of Bookmark Items Per Page', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_show_postdate', 'sanitize' => 'penci_sanitize_checkbox_field', 'default' => true, 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Show Post Date', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_show_author', 'sanitize' => 'penci_sanitize_checkbox_field', 'default' => true, 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Show Post Author', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_show_comments', 'sanitize' => 'penci_sanitize_checkbox_field', 'default' => false, 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Show Post Comment Count', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_show_views', 'sanitize' => 'penci_sanitize_checkbox_field', 'default' => false, 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Show Post Views', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_show_reading', 'sanitize' => 'penci_sanitize_checkbox_field', 'default' => false, 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Show Post Reading Time', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_06', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Colors', 'penci-bookmark-follow' ), ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmark Color', 'id' => 'pencibf_bm_cl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmark Border Color', 'id' => 'pencibf_bm_bcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmark Background Color', 'id' => 'pencibf_bm_bgcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmark Hover Color', 'id' => 'pencibf_bm_hcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmark Hover Border Color', 'id' => 'pencibf_bm_hbcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmark Hover Background Color', 'id' => 'pencibf_bm_hbgcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmarked Color', 'id' => 'pencibf_bm_bmcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmarked Border Color', 'id' => 'pencibf_bm_bmbcl', ); $options[] = array( 'sanitize' => 'sanitize_hex_color', 'type' => 'soledad-fw-color', 'label' => 'Bookmarked Background Color', 'id' => 'pencibf_bm_bmbgcl', ); return $options;customizer/penci_bookmark_follow_translate_section.php000064400000014615147600022000017625 0ustar00 'pencibf_header_12', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Posts Follows', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_followtext', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Bookmark', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Text: Bookmark', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_followingtext', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Bookmarked', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Text: Bookmarked', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_unfollowtext', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Un-bookmark', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Text: Un-bookmark', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_03', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Author Follows', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_followtext', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Follow', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Text: Follow', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_followingtext', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Following', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Text: Following', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_unfollowtext', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Unfollow', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Text: Unfollow', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_heading_02', 'transport' => 'postMessage', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Post Popup Content', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_success_title', 'transport' => 'postMessage', 'default' => __( 'Success', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Success Heading Title', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_success_mess', 'transport' => 'postMessage', 'default' => __( 'Post added to Bookmark', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Success Message', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_remove_title', 'transport' => 'postMessage', 'default' => __( 'Removed', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Post Remove Heading Title', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_remove_mess', 'transport' => 'postMessage', 'default' => __( 'Post remove from Bookmark list', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Post Remove Message', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_heading_03', 'transport' => 'postMessage', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Author Popup Content', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_success_author_title', 'transport' => 'postMessage', 'default' => __( 'Success', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Success Heading Title', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_success_author_mess', 'transport' => 'postMessage', 'default' => __( 'Successfully add author from the favorite list', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Success Content', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_remove_author_title', 'transport' => 'postMessage', 'default' => __( 'Removed', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Author Remove Title', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_remove_author_mess', 'transport' => 'postMessage', 'default' => __( 'Successfully remove author from the favorite list', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Author Remove Message', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_heading_term', 'transport' => 'postMessage', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Term Popup Content', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_success_term_title', 'transport' => 'postMessage', 'default' => __( 'Success', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Success Heading Title', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_success_term_mess', 'transport' => 'postMessage', 'default' => __( 'Successfully add category from the favorite list', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Success Content', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_remove_term_title', 'transport' => 'postMessage', 'default' => __( 'Removed', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Author Remove Title', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_popup_remove_term_mess', 'transport' => 'postMessage', 'default' => __( 'Successfully remove category from the favorite list', 'penci-bookmark-follow' ), 'type' => 'soledad-fw-text', 'label' => esc_html__( 'Author Remove Message', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_other', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Other Texts', 'penci-bookmark-follow' ), ); $texts = pencibg_default_text(); foreach ( $texts as $id => $text ) { $options[] = array( 'id' => 'pencibf_text_' . $id, 'type' => 'soledad-fw-text', 'default' => $text, 'label' => esc_html__( 'Text:' . $text, 'penci-bookmark-follow' ), ); } return $options;customizer/penci_bookmark_follow_email_section.php000064400000026425147600022000016721 0ustar00 'pencibf_from_email', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'From Email Address', 'penci-bookmark-follow' ), 'description' => esc_html__( 'When enable, Registered users will be sent a confirmation email to subscribe, and will only be added once they confirmed the subscription', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_enable_unsubscribe_url', 'transport' => 'postMessage', 'type' => 'soledad-fw-toggle', 'label' => esc_html__( 'Add Unsubscribe link to email Message', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_unsubscribe_message', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'value' => 'If you want to unsubscribe, click on {unsubscribe_url}', 'label' => esc_html__( 'Unsubscribe Message', 'penci-bookmark-follow' ), 'description' => esc_html__( 'Enter the custom Unsubscribe Message. Available template tags for unsubscribe message are: {unsubscribe_url} - displays the unsubscribe url for unsubscribe email', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_notify_01', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Edit Post Subscription Email Template', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_email_subject', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Post {post_name} updated at {site_name}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'description' => esc_html__( 'This is the subject of the email that will be sent to the followers of that post when post is updated. Available template tags for subject fields are :{post_name} - displays the title of the post, {site_name} - displays the name of your site ', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_email_body', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'default' => __( 'Post {post_name} updated If you want to see page click below link {post_link} for {site_link}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'description' => __( 'This is the body, main content of the email that will be sent to the followers of that post when post is updated.
The available tags are: {post_name} - displays the title of the post
{post_link} - displays the post title with link
{site_name} - displays the name of your site
{site_link} - displays the site name with link', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_notify_03', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'New Post Author Subscription Email Template', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_email_subject', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Post {post_name} updated at {site_name}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'description' => esc_html__( 'This is the subject of the email that will be sent to the followers of that post when post is updated. Available template tags for subject fields are :{post_name} - displays the title of the post, {site_name} - displays the name of your site ', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_email_body', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'default' => __( 'New post added by the author "{author_name}": {post_name} {post_description} If you want to see page click below link {post_link} for {site_link}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'description' => __( 'This is the body, main content of the email that will be sent to the followers of that post when post is updated.
The available tags are: {post_name} - displays the title of the post
{post_link} - displays the post title with link
{site_name} - displays the name of your site
{site_link} - displays the site name with link', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_notify_04', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Comment Subscription Email Template', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_comment_email_subject', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'New comment on "{post_name}" by {user_name}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'description' => esc_html__( 'This is the subject of the email that will be sent to the followers of that post when post is updated. Available template tags for subject fields are :{post_name} - displays the title of the post, {site_name} - displays the name of your site ', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_comment_email_body', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'default' => __( 'New comment added on the post "{post_name}" by {user_name}, see below : {comment_text}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'description' => __( 'This is the body, main content of the email that will be sent to the followers of that post when post is updated.
The available tags are: {post_name} - displays the title of the post
{post_link} - displays the post title with link
{site_name} - displays the name of your site
{site_link} - displays the site name with link', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_notify_05', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Posts Confirmation Email Template', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_confirm_email_subject', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Follow {post_name} - {site_name}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'description' => esc_html__( 'This is the subject of the email that will be sent to the followers of that post when post is updated. Available template tags for subject fields are :{post_name} - displays the title of the post, {site_name} - displays the name of your site ', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_confirm_email_body', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'default' => __( 'Hello You recently followed below blog post. This means you will receive an email when post is updated. Blog Post URL: {post_link} To activate, click confirm below. If you did not request this, please feel free to disregard this notice! {subscribe_url} Thanks', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'description' => __( 'This is the body, main content of the email that will be sent to the followers of that post when post is updated.
The available tags are: {post_name} - displays the title of the post
{post_link} - displays the post title with link
{site_name} - displays the name of your site
{site_link} - displays the site name with link', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_notify_07', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Author Confirmation Email Template', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_confirm_email_subject', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( 'Follow {author_name} - {site_name}', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'description' => esc_html__( ' This is the subject of the email that will be sent to the user for confirming his email address for subscription of any authors. Available template tags for subject fields are : {author_name} - displays the name of author {site_name} - displays the name of your site', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_author_confirm_email_body', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'default' => __( 'Hello You recently followed the author "{author_name}". This means you will receive an email when any new post is published by the author "{author_name}". To activate, click confirm below. If you did not request this, please feel free to disregard this notice! {subscribe_url} Thanks', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'description' => __( 'This is the body, main content of the email that will be sent to the user for confirming his email address for subscription of any authors. The available tags are: {author_name} - displays the name of the author {site_name} - displays the name of your site {site_link} - displays the site name with link {subscribe_url} - displays the subscribe url for confirm email subscription.', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_header_notify_08', 'type' => 'soledad-fw-header', 'label' => esc_html__( 'Unsubscribe Confirmation Email Template', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_unsubscribe_confirm_email_subject', 'transport' => 'postMessage', 'type' => 'soledad-fw-text', 'default' => __( '[{site_name}] Please confirm your unsubscription request', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'description' => esc_html__( 'This is the subject of the email that will be sent to the user for confirming his email address for unsubscription. Available template tags for subject fields are : {email} - displays the follower\'s email {site_name} - displays the name of your site', 'penci-bookmark-follow' ), ); $options[] = array( 'id' => 'pencibf_unsubscribe_confirm_email_body', 'transport' => 'postMessage', 'type' => 'soledad-fw-textarea', 'default' => __( '{site_name} has received a request to unsubscribe for this email address. To complete your request please click on the link below: {confirm_url} If you did not request this, please feel free to disregard this notice!". To activate, click confirm below. If you did not request this, please feel free to disregard this notice! {subscribe_url} Thanks', 'penci-bookmark-follow' ), 'label' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'description' => __( 'This is the body, main content of the email that will be sent to the user for confirming his email address for unsubscription. The available tags are: {email} - displays the follower\'s email {site_name} - displays the name of your site {site_link} - displays the site name with link {confirm_url} - displays the confirm url for confirm email unsubscription.', 'penci-bookmark-follow' ), ); return $options;inc/admin/forms/penci-bf-users-logs-list-authors.php000064400000030700147600022000016453 0ustar00model = $penci_bl_model; //Set parent defaults parent::__construct( array( 'singular' => 'userlog', //singular name of the listed records 'plural' => 'userlogs', //plural name of the listed records 'ajax' => false //does this table support ajax? ) ); } /** * Displaying Followed author User Logs * * Does prepare the data for displaying followed post users in the table. * * @package Penci Bookmark Follow * @since 1.0.0 */ function display_follow_author_user_logs() { $prefix = PENCI_BL_META_PREFIX; //if search is call then pass searching value to function for displaying searching values $args = array(); $args['logid'] = $_GET['logid']; //in case of search make parameter for retriving search data if(isset($_REQUEST['s']) && !empty($_REQUEST['s'])) { $args['search'] = $_REQUEST['s']; } //get followed post list data from database $data = $this->model->penci_bl_get_follow_author_user_logs_data( $args ); foreach ($data as $key => $value){ // get email data from meta field $email_data = get_post_meta( $value['ID'], $prefix.'log_email_data', true ); $mail_part = explode( '%$%$%', $email_data ); // set data $data[$key]['mail_subject'] = isset( $mail_part[0] ) ? $mail_part[0] : ''; $data[$key]['mail_body'] = isset( $mail_part[1] ) ? $mail_part[1] : ''; } return $data; } /** * Mange column data * * Default Column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_default( $item, $column_name ){ switch( $column_name ) { case 'mail_subject' : return $item[ $column_name ]; case 'mail_body' : return $item[ $column_name ]; case 'post_date' : $date = date( get_option('date_format'), strtotime( $item[ $column_name ] ) ); return $date; default: return $item[ $column_name ]; } } /** * Manage User Email Column * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_mail_subject($item){ $pagestr = $pagenumber = ''; if( isset( $_GET['paged'] ) ) { $pagestr = '&paged=%s'; $pagenumber = $_GET['paged']; } //Build row action $actions['delete'] = sprintf(''.esc_html__('Delete', 'penci-bookmark-follow').'','penci-bf-author','delete',$item['ID'],$_GET['authorid'],$_GET['logid'], $pagenumber ); //Return the title contents return sprintf('%1$s %2$s', $item['mail_subject'], $this->row_actions( $actions ) ); } function column_cb($item){ return sprintf( '', $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie") $item['ID'] //The value of the checkbox should be the record's id ); } /** * Display Columns * * Handles which columns to show in table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_columns(){ $columns = array( 'cb' => '', //Render a checkbox instead of text 'mail_subject' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'mail_body' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'post_date' => esc_html__( 'Post Date', 'penci-bookmark-follow' ) ); return $columns; } /** * Sortable Columns * * Handles soratable columns of the table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_sortable_columns() { $sortable_columns = array( 'post_date' => array( 'post_date', true ) ); return $sortable_columns; } function no_items() { //message to show when no records in database table esc_html_e( 'No User Logs Found.', 'penci-bookmark-follow' ); } /** * Bulk actions field * * Handles Bulk Action combo box values * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_bulk_actions() { //bulk action combo box parameter //if you want to add some more value to bulk action parameter then push key value set in below array $actions = array( 'delete' => esc_html__('Delete','penci-bookmark-follow') ); return $actions; } function prepare_items() { /** * First, lets decide how many records per page to show */ $per_page = '10'; /** * REQUIRED. Now we need to define our column headers. This includes a complete * array of columns to be displayed (slugs & titles), a list of columns * to keep hidden, and a list of columns that are sortable. Each of these * can be defined in another method (as we've done here) before being * used to build the value for our _column_headers property. */ $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); /** * REQUIRED. Finally, we build an array to be used by the class for column * headers. The $this->_column_headers property takes an array which contains * 3 other arrays. One for all columns, one for hidden columns, and one * for sortable columns. */ $this->_column_headers = array($columns, $hidden, $sortable); /** * Instead of querying a database, we're going to fetch the example data * property we created for use in this plugin. This makes this example * package slightly different than one you might build on your own. In * this example, we'll be using array manipulation to sort and paginate * our data. In a real-world implementation, you will probably want to * use sort and pagination data to build a custom query instead, as you'll * be able to use your precisely-queried data immediately. */ $data = $this->display_follow_author_user_logs(); /** * This checks for sorting input and sorts the data in our array accordingly. * * In a real-world situation involving a database, you would probably want * to handle sorting by passing the 'orderby' and 'order' values directly * to a custom query. The returned data will be pre-sorted, and this array * sorting technique would be unnecessary. */ function usort_reorder($a,$b){ $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'post_date'; //If no sort, default to title $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order return ($order==='asc') ? $result : -$result; //Send final sort direction to usort } usort($data, 'usort_reorder'); /** * REQUIRED for pagination. Let's figure out what page the user is currently * looking at. We'll need this later, so you should always include it in * your own package classes. */ $current_page = $this->get_pagenum(); /** * REQUIRED for pagination. Let's check how many items are in our data array. * In real-world use, this would be the total number of items in your database, * without filtering. We'll need this later, so you should always include it * in your own package classes. */ $total_items = count($data); /** * The WP_List_Table class does not handle pagination for us, so we need * to ensure that the data is trimmed to only the current page. We can use * array_slice() to */ $data = array_slice($data,(($current_page-1)*$per_page),$per_page); /** * REQUIRED. Now we can add our *sorted* data to the items property, where * it can be used by the rest of the class. */ $this->items = $data; /** * REQUIRED. We also have to register our pagination options & calculations. */ $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page, //WE have to determine how many items to show on a page 'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages ) ); } } //Create an instance of our package class... $FollowedUserLogsAuthorListTable = new Penci_Bf_User_Logs_List_Authors(); //Fetch, prepare, sort, and filter our data... $FollowedUserLogsAuthorListTable->prepare_items(); $prefix = PENCI_BL_META_PREFIX; ?>
display_name ) ? $author_data->display_name : ''; $email = get_post_meta( $_GET['logid'], $prefix.'author_user_email', true ); // get email from user info $post_data = get_post( $_GET['logid'] ); if( !empty( $post_data->post_author ) ) { $email = $this->model->penci_bl_get_user_email_from_id( $post_data->post_author ); } if( strlen( $title ) > 50 ) { $title = substr( $title, 0, 50 ); $title = $title.'...'; } //back url to go back on the page $backurl = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $_GET['authorid']), admin_url( 'admin.php' ) ); ?>

views(); if(isset($_GET['message']) && !empty($_GET['message']) ) { //check message if( $_GET['message'] == '3' ) { //check message echo '

'.esc_html__("Record (s) deleted successfully.",'penci-bookmark-follow').'

'; } } ?>
search_box( esc_html__( 'Search', 'penci-bookmark-follow' ), 'penci-bookmark-follow' ); ?> display(); ?>
inc/admin/forms/penci-bf-list-authors.php000064400000024671147600022000014364 0ustar00model = $penci_bl_model; //Set parent defaults parent::__construct( array( 'singular' => 'author', //singular name of the listed records 'plural' => 'authors', //plural name of the listed records 'ajax' => false //does this table support ajax? ) ); $this->per_page = apply_filters( 'penci_bl_list_authors_per_page', 10 ); // Per page } /** * Displaying Followed author * * Does prepare the data for displaying followed author in the table. * * @package Penci Bookmark Follow * @since 1.0.0 */ function display_follow_author() { $prefix = PENCI_BL_META_PREFIX; // Taking parameter $orderby = isset( $_GET['orderby'] ) ? urldecode( $_GET['orderby'] ) : 'date'; $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( trim($_GET['s']) ) : null; $args = array( 'posts_per_page' => $this->per_page, 'orderby' => $orderby, 'order' => $order, 'page' => isset( $_GET['paged'] ) ? $_GET['paged'] : null, 'offset' => ( $this->get_pagenum() - 1 ) * $this->per_page, 'penci_bl_list_author_data' => true, ); //in case of search make parameter for retriving search data if(isset($search) && !empty($search)) { $args['search'] = $search; } //get followed post list data from database $result_data = array(); $result_data = $this->model->penci_bl_get_follow_author_data( $args ); if( isset( $result_data['data'] ) && is_array( $result_data['data'] ) && !empty( $result_data['data'] ) ){ foreach ( $result_data['data'] as $key => $value ){ $permalink = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $value['post_parent'] ), admin_url( 'admin.php' ) ); $userlist = ''. esc_html__( 'View Followers', 'penci-bookmark-follow' ) .''; $data[$key]['users'] = $userlist; $authordata = get_user_by( 'id', $value['post_parent'] ); $author_link = add_query_arg( array( 'user_id' => $value['post_parent'] ), admin_url( 'user-edit.php' ) ); $data[$key]['authorname'] = !empty( $authordata ) && isset( $authordata->display_name ) ? ''.$authordata->display_name.'
'.$authordata->user_email : ''; $data[$key]['authorid'] = $value['post_parent']; } } $result_arr['data'] = !empty($data) ? $data : array(); $result_arr['total'] = isset($result_data['total']) ? intval( $result_data['total'] ) : ''; // Total no of data return $result_arr; } /** * Mange column data * * Default Column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_default( $item, $column_name ){ switch( $column_name ) { case 'authorname': $title = $item[ $column_name ]; if( strlen( $title ) > 50 ) { $title = substr( $title, 0, 50 ); $title = $title.'...'; } default: $default_value = isset( $item[ $column_name ] ) ? $item[ $column_name ] : ''; return apply_filters( 'penci_bl_authors_column_value', $default_value, $item, $column_name ); } } /** * Manage author name Column * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_authorname($item){ $pagestr = $pagenumber = ''; if( isset( $_GET['paged'] ) ) { $pagestr = '&paged=%s'; $pagenumber = $_GET['paged']; } $actions['delete'] = sprintf(''.esc_html__('Delete', 'penci-bookmark-follow').'','penci-bf-author','delete',$item['authorid'], $pagenumber ); //Return the title contents return sprintf('%1$s %2$s', $item['authorname'], $this->row_actions( $actions ) ); } function column_cb($item){ return sprintf( '', $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie") $item['authorid'] //The value of the checkbox should be the record's id ); } /** * Display Columns * * Handles which columns to show in table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_columns(){ $columns = array( 'cb' => '', //Render a checkbox instead of text 'authorname' => esc_html__( 'Author Name', 'penci-bookmark-follow' ), 'users' => esc_html__( 'View Followers', 'penci-bookmark-follow' ), ); return apply_filters( 'penci_bl_authors_add_columns', $columns ); } /** * Sortable Columns * * Handles soratable columns of the table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_sortable_columns() { $sortable_columns = array( 'authorname' => array( 'authorname', true ), //true means its already sorted ); return apply_filters( 'penci_bl_authors_add_sortable_column', $sortable_columns ); } function no_items() { //message to show when no records in database table esc_html_e( 'No Followed Authors Found.', 'penci-bookmark-follow' ); } /** * Bulk actions field * * Handles Bulk Action combo box values * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_bulk_actions() { //bulk action combo box parameter //if you want to add some more value to bulk action parameter then push key value set in below array $actions = array( 'delete' => esc_html__('Delete','penci-bookmark-follow') ); return $actions; } /** * Add Export button * * @package Penci Bookmark Follow * @since 1.0.0 */ function extra_tablenav( $which ) { if( $which == 'top' ) { echo ' '; } } function prepare_items() { // Get how many records per page to show $per_page = $this->per_page; // Get All, Hidden, Sortable columns $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); // Get final column header $this->_column_headers = array($columns, $hidden, $sortable); // Get Data of particular page $data_res = $this->display_follow_author(); $data = $data_res['data']; /** * This checks for sorting input and sorts the data in our array accordingly. * * In a real-world situation involving a database, you would probably want * to handle sorting by passing the 'orderby' and 'order' values directly * to a custom query. The returned data will be pre-sorted, and this array * sorting technique would be unnecessary. */ function usort_reorder($a,$b){ $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'authorid'; //If no sort, default to title $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order return ($order==='asc') ? $result : -$result; //Send final sort direction to usort } usort($data, 'usort_reorder'); // Get current page number $current_page = $this->get_pagenum(); // Get total count $total_items = $data_res['total']; // Get page items $this->items = $data; /** * REQUIRED. We also have to register our pagination options & calculations. */ $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page, //WE have to determine how many items to show on a page 'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages ) ); } } //Create an instance of our package class... $FollowedAuthorListTable = new Penci_Bf_List_Authors(); //Fetch, prepare, sort, and filter our data... $FollowedAuthorListTable->prepare_items(); ?>

views(); if(isset($_GET['message']) && !empty($_GET['message']) ) { //check message if( $_GET['message'] == '3' ) { //check message echo '

'.esc_html__("Record (s) deleted successfully.",'penci-bookmark-follow').'

'; } } ?>
search_box( esc_html__( 'Search', 'penci-bookmark-follow' ), 'penci-bookmark-follow' ); ?> display(); ?>
inc/admin/forms/penci-bf-send-email.php000064400000027166147600022000013746 0ustar00
true ), 'objects' ); if ( isset( $post_types['attachment'] ) ) { // Check attachment post type exists unset( $post_types['attachment'] ); } $followers_msg = get_transient( get_current_user_id() . '_penci_bl_sent_mail_message' ); //Get message after sent email to followers if ( ! empty( $followers_msg ) ) { delete_transient( get_current_user_id() . '_penci_bl_sent_mail_message' ); } ?>




...



true ); wp_editor( '', 'followed_email_body', $settings ); ?>
' ); ?>
inc/admin/forms/penci-bf-list.php000064400000030606147600022000012674 0ustar00model = $penci_bl_model; //Set parent defaults parent::__construct( array( 'singular' => 'post', //singular name of the listed records 'plural' => 'posts', //plural name of the listed records 'ajax' => false //does this table support ajax? ) ); $this->per_page = apply_filters( 'penci_bl_per_page', 10 ); // Per page } /** * Displaying Followed Posts * * Does prepare the data for displaying followed posts in the table. * * @package Penci Bookmark Follow * @since 1.0.0 */ function display_follow_post() { // Taking parameter $orderby = isset( $_GET['orderby'] ) ? urldecode( $_GET['orderby'] ) : 'date'; $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( trim( $_GET['s'] ) ) : null; $args = array( 'posts_per_page' => $this->per_page, 'orderby' => $orderby, 'order' => $order, 'page' => isset( $_GET['paged'] ) ? $_GET['paged'] : null, 'offset' => ( $this->get_pagenum() - 1 ) * $this->per_page, 'penci_bl_list_data' => true, ); //in case of search make parameter for retriving search data if ( isset( $search ) && ! empty( $search ) ) { $args['search'] = $search; } if ( isset( $_GET['penci_bl_post_type'] ) && ! empty( $_GET['penci_bl_post_type'] ) ) { $args['post_type'] = $_GET['penci_bl_post_type']; } //get followed post list data from database $result_data = $this->model->penci_bl_get_follow_post_data( $args ); foreach ( $result_data['data'] as $key => $value ) { $permalink = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $value['ID'] ), admin_url( 'admin.php' ) ); $userlist = '' . esc_html__( 'View Followers', 'penci-bookmark-follow' ) . ''; $post_link = add_query_arg( array( 'post' => $value['ID'], 'action' => 'edit' ), admin_url( 'post.php' ) ); $data[ $key ]['ID'] = isset( $value['post_author'] ) ? $value['post_author'] : ''; $data[ $key ]['post_id'] = isset( $value['ID'] ) ? $value['ID'] : ''; $data[ $key ]['post_title'] = '' . $value['post_title'] . ''; $data[ $key ]['users'] = $userlist; $data[ $key ]['post_type'] = isset( $value['post_type'] ) ? $value['post_type'] : ''; } $result_arr['data'] = ! empty( $data ) ? $data : array(); $result_arr['total'] = isset( $result_data['total'] ) ? $result_data['total'] : ''; // Total no of data return $result_arr; } /** * Mange column data * * Default Column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_default( $item, $column_name ) { switch ( $column_name ) { case 'post_title': $title = $item[ $column_name ]; if ( strlen( $title ) > 50 ) { $title = substr( $title, 0, 50 ); $title = $title . '...'; } default: $default_value = isset( $item[ $column_name ] ) ? $item[ $column_name ] : ''; return apply_filters( 'penci_bl_posts_column_value', $default_value, $item, $column_name ); } } /** * Mange post type column data * * Handles to modify post type column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_post_type( $item ) { // get all custom post types $post_types = get_post_types( array( 'public' => true ), 'objects' ); $post_type_sort_link = ''; if ( ! empty( $item['post_type'] ) && isset( $post_types[ $item['post_type'] ]->label ) ) { $post_type_sort_url = add_query_arg( array( 'page' => 'penci-bf-post', 'penci_bl_post_type' => $item['post_type'] ), admin_url( 'admin.php' ) ); $post_type_sort_link = '' . $post_types[ $item['post_type'] ]->label . ''; } return $post_type_sort_link; } /** * Manage Post Title Column * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_post_title( $item ) { $pagestr = $pagenumber = ''; if ( isset( $_GET['paged'] ) ) { $pagestr = '&paged=%s'; $pagenumber = $_GET['paged']; } $actions['delete'] = sprintf( '' . esc_html__( 'Delete', 'penci-bookmark-follow' ) . '', 'penci-bf-post', 'delete', $item['post_id'], $pagenumber ); //Return the title contents return sprintf( '%1$s %2$s', $item['post_title'], $this->row_actions( $actions ) ); } function column_cb( $item ) { return sprintf( '', $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie") $item['post_id'] //The value of the checkbox should be the record's id ); } /** * Display Columns * * Handles which columns to show in table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_columns() { $columns = array( 'cb' => '', //Render a checkbox instead of text 'post_title' => esc_html__( 'Post Name', 'penci-bookmark-follow' ), 'users' => esc_html__( 'View Followers', 'penci-bookmark-follow' ), 'post_type' => esc_html__( 'Post Type', 'penci-bookmark-follow' ), ); return apply_filters( 'penci_bl_posts_add_columns', $columns ); } /** * Sortable Columns * * Handles soratable columns of the table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_sortable_columns() { $sortable_columns = array( 'post_title' => array( 'post_title', true ), //true means its already sorted 'post_type' => array( 'post_type', true ) ); return apply_filters( 'penci_bl_posts_add_sortable_column', $sortable_columns ); } function no_items() { //message to show when no records in database table esc_html_e( 'No Followed Posts Found.', 'penci-bookmark-follow' ); } /** * Bulk actions field * * Handles Bulk Action combo box values * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_bulk_actions() { //bulk action combo box parameter //if you want to add some more value to bulk action parameter then push key value set in below array $actions = array( 'delete' => esc_html__( 'Delete', 'penci-bookmark-follow' ) ); return $actions; } /** * Add filter for post types * * Handles to display records for particular post type * * @package Penci Bookmark Follow * @since 1.0.0 */ function extra_tablenav( $which ) { if ( $which == 'top' ) { // get all custom post types $post_types = get_post_types( array( 'public' => true ), 'objects' ); if ( isset( $post_types['attachment'] ) ) { // Check attachment post type exists unset( $post_types['attachment'] ); } $html = ''; $html .= '
'; if ( ! empty( $post_types ) ) { $html .= ''; } $html .= ' '; $html .= ' '; $html .= '
'; echo $html; } } function prepare_items() { // Get how many records per page to show $per_page = $this->per_page; // Get All, Hidden, Sortable columns $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); // Get final column header $this->_column_headers = array( $columns, $hidden, $sortable ); // Get Data of particular page $data_res = $this->display_follow_post(); $data = $data_res['data']; /** * This checks for sorting input and sorts the data in our array accordingly. * * In a real-world situation involving a database, you would probably want * to handle sorting by passing the 'orderby' and 'order' values directly * to a custom query. The returned data will be pre-sorted, and this array * sorting technique would be unnecessary. */ function usort_reorder( $a, $b ) { $orderby = ( ! empty( $_REQUEST['orderby'] ) ) ? $_REQUEST['orderby'] : 'post_title'; //If no sort, default to title $order = ( ! empty( $_REQUEST['order'] ) ) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc $result = strcmp( $a[ $orderby ], $b[ $orderby ] ); //Determine sort order return ( $order === 'asc' ) ? $result : - $result; //Send final sort direction to usort } usort( $data, 'usort_reorder' ); // Get current page number $current_page = $this->get_pagenum(); // Get total count $total_items = $data_res['total']; // Get page items $this->items = $data; /** * REQUIRED. We also have to register our pagination options & calculations. */ $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page, //WE have to determine how many items to show on a page 'total_pages' => ceil( $total_items / $per_page ) //WE have to calculate the total number of pages ) ); } } //Create an instance of our package class... $FollowedPostsListTable = new Penci_Bf_List(); //Fetch, prepare, sort, and filter our data... $FollowedPostsListTable->prepare_items(); ?>

views(); if ( isset( $_GET['message'] ) && ! empty( $_GET['message'] ) ) { //check message if ( $_GET['message'] == '3' ) { //check message echo '

' . esc_html__( "Record (s) deleted successfully.", 'penci-bookmark-follow' ) . '

'; } } ?>
search_box( esc_html__( 'Search', 'penci-bookmark-follow' ), 'penci-bookmark-follow' ); ?> display(); ?>
inc/admin/forms/penci-bf-users-list-authors.php000064400000041045147600022000015515 0ustar00model = $penci_bl_model; //Set parent defaults parent::__construct( array( 'singular' => 'user', //singular name of the listed records 'plural' => 'users', //plural name of the listed records 'ajax' => false //does this table support ajax? ) ); $this->per_page = apply_filters( 'penci_bl_users_list_authors_per_page', 10 ); // Per page } /** * Displaying Followed author Users * * Does prepare the data for displaying followed author users in the table. * * @package Penci Bookmark Follow * @since 1.0.0 */ function display_follow_author_users() { $prefix = PENCI_BL_META_PREFIX; // Taking parameter $orderby = isset( $_GET['orderby'] ) ? urldecode( $_GET['orderby'] ) : 'date'; $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( trim($_GET['s']) ) : null; $args = array( 'posts_per_page' => $this->per_page, 'orderby' => $orderby, 'order' => $order, 'page' => isset( $_GET['paged'] ) ? $_GET['paged'] : null, 'offset' => ( $this->get_pagenum() - 1 ) * $this->per_page, 'penci_bl_users_list_authors_data' => true, ); $args['authorid'] = $_GET['authorid']; //in case of search make parameter for retriving search data if(isset($search) && !empty($search)) { $args['search'] = $search; } if(isset($_REQUEST['penci_bl_status']) && !empty($_REQUEST['penci_bl_status'])) { $args['penci_bl_status'] = $_REQUEST['penci_bl_status']; } if( isset( $_GET['user'] ) ) { $args['author'] = trim( $_GET['user'] ); } //get followed post list data from database $result_data = $this->model->penci_bl_get_follow_author_users_data( $args ); foreach ($result_data['data'] as $key => $value){ // get user email from meta field $user_email = get_post_meta( $value['ID'], $prefix.'author_user_email', true ); // get user is subscribed or not $subscribed = get_post_meta( $value['ID'], $prefix.'follow_status', true ); // get view log link to view log for perticular user $permalink = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $_GET['authorid'], 'logid' => $value['ID'] ), admin_url( 'admin.php' ) ); $logs = ''. esc_html__( 'View Log', 'penci-bookmark-follow' ) .''; $userdata = get_user_by( 'id', $value['post_author'] ); $user_email_html = ''; $user = ''; if( !empty( $userdata ) ) { // to display user display name $user_email = isset( $userdata->user_email ) ? $userdata->user_email : ''; $user_edit_link = add_query_arg( array( 'user_id' => $userdata->ID ), admin_url( 'user-edit.php' ) ); $display_name = $userdata->display_name; if( !empty( $user_email ) ) { $user_email_html = ''.$display_name.'
'.$user_email; $user_link = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $_GET['authorid'], 'user' => $userdata->ID ), admin_url( 'admin.php' ) ); $user = ''.$display_name.''; } } else { $user_email_html = $user_email; $user_link = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $_GET['authorid'], 'user' => 0 ), admin_url( 'admin.php' ) ); $user = ''.esc_html__('guest', 'penci-bookmark-follow' ).''; } // set data $data[$key]['ID'] = isset($value['ID']) ? $value['ID'] : ''; $data[$key]['post_author'] = isset($value['post_author']) ? $value['post_author'] : ''; $data[$key]['post_name'] = isset($value['post_name']) ? $value['post_name'] : ''; $data[$key]['user_email'] = apply_filters( 'penci_bl_follow_authors_user_email_column', $user_email_html, $value['ID'] ); $data[$key]['user'] = $user; $data[$key]['subscribed'] = $subscribed; $data[$key]['logs'] = $logs; } $result_arr['data'] = !empty($data) ? $data : array(); $result_arr['total'] = isset($result_data['total']) ? $result_data['total'] : ''; // Total no of data return $result_arr; } /** * Mange column data * * Default Column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_default( $item, $column_name ){ switch( $column_name ) { case 'post_author' : $user = $item[ $column_name ] != '0' ? esc_html__( 'Registered User', 'penci-bookmark-follow' ) : esc_html__( 'Guest', 'penci-bookmark-follow' ); return $user; case 'subscribed' : if( isset( $_GET['paged'] ) ) { $status_url = add_query_arg( array( 'paged' => $_GET['paged'] ), admin_url( 'admin.php' ) ); } else { $status_url = admin_url( 'admin.php' ); } if( $item[ $column_name ] == '1' ) { $status_url = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $_GET['authorid'],'penci_bl_status' => 'subscribe' ), $status_url ); $status_link = '' . esc_html__( 'Yes', 'penci-bookmark-follow' ) . ''; } else { $status_url = add_query_arg( array( 'page' => 'penci-bf-author', 'authorid' => $_GET['authorid'], 'penci_bl_status' => 'unsubscribe' ), $status_url ); $status_link = '' . esc_html__( 'No', 'penci-bookmark-follow' ) . ''; } return $status_link; default: $default_value = isset( $item[ $column_name ] ) ? $item[ $column_name ] : ''; return apply_filters( 'penci_bl_authors_users_column_value', $default_value, $item, $column_name ); } } /** * Manage User Email Column * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_user_email($item){ $pagestr = $pagenumber = ''; if( isset( $_GET['paged'] ) ) { $pagestr = '&paged=%s'; $pagenumber = $_GET['paged']; } //Build row actions if( $item['subscribed'] == '1' ) { $actions['unsubscribe'] = sprintf(''.esc_html__('Unsubscribe', 'penci-bookmark-follow').'','penci-bf-author','unsubscribe',$item['ID'],$_GET['authorid'], $pagenumber); } else { $actions['subscribe'] = sprintf(''.esc_html__('Subscribe', 'penci-bookmark-follow').'','penci-bf-author','subscribe',$item['ID'],$_GET['authorid'], $pagenumber); } $actions['delete'] = sprintf(''.esc_html__('Delete', 'penci-bookmark-follow').'','penci-bf-author','delete',$item['ID'],$_GET['authorid'], $pagenumber ); //Return the title contents return sprintf('%1$s %2$s', $item['user_email'], $this->row_actions( $actions ) ); } function column_cb($item){ return sprintf( '', $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie") $item['ID'] //The value of the checkbox should be the record's id ); } /** * Display Columns * * Handles which columns to show in table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_columns(){ global $penci_bl_options; $columns = array( 'cb' => '', //Render a checkbox instead of text 'user_email' => esc_html__( 'User Email', 'penci-bookmark-follow' ), 'post_author' => esc_html__( 'User Type', 'penci-bookmark-follow' ), 'user' => esc_html__( 'User', 'penci-bookmark-follow' ), 'subscribed' => esc_html__( 'Subscribed', 'penci-bookmark-follow' ), ); if( isset( $penci_bl_options['enable_log'] ) && $penci_bl_options['enable_log'] == '1' ) { $columns['logs'] = esc_html__( 'View Logs', 'penci-bookmark-follow' ); } return apply_filters( 'penci_bl_authors_users_add_columns', $columns ); } /** * Sortable Columns * * Handles soratable columns of the table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_sortable_columns() { $sortable_columns = array( 'user_email' => array( 'user_email', true ), //true means its already sorted 'post_author' => array( 'post_author', true ), 'subscribed' => array( 'subscribed', true ) ); return apply_filters( 'penci_bl_authors_users_add_sortable_column', $sortable_columns ); } function no_items() { //message to show when no records in database table esc_html_e( 'No Users Found.', 'penci-bookmark-follow' ); } /** * Bulk actions field * * Handles Bulk Action combo box values * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_bulk_actions() { //bulk action combo box parameter //if you want to add some more value to bulk action parameter then push key value set in below array $actions = array( 'subscribe' => esc_html__('Subscribe','penci-bookmark-follow'), 'unsubscribe' => esc_html__('Unsubscribe','penci-bookmark-follow'), 'delete' => esc_html__('Delete','penci-bookmark-follow') ); return $actions; } /** * Add filter for subscribe/unscribe * * Handles to display records for particular subscribe/unscribe * * @package Penci Bookmark Follow * @since 1.0.0 */ function extra_tablenav( $which ) { if( $which == 'top' ) { $html = ''; $all_status = array( 'subscribe' => esc_html__( 'Subscribed', 'penci-bookmark-follow' ), 'unsubscribe' => esc_html__( 'Unsubscribed', 'penci-bookmark-follow' ), ); $html .= '
'; $html .= ''; $html .= ' '; echo ' '; $html .= '
'; echo $html; } } function prepare_items() { // Get how many records per page to show $per_page = $this->per_page; // Get All, Hidden, Sortable columns $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); // Get final column header $this->_column_headers = array($columns, $hidden, $sortable); // Get Data of particular page $data_res = $this->display_follow_author_users(); $data = $data_res['data']; /** * This checks for sorting input and sorts the data in our array accordingly. * * In a real-world situation involving a database, you would probably want * to handle sorting by passing the 'orderby' and 'order' values directly * to a custom query. The returned data will be pre-sorted, and this array * sorting technique would be unnecessary. */ function usort_reorder($a,$b){ $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'post_name'; //If no sort, default to title $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order return ($order==='asc') ? $result : -$result; //Send final sort direction to usort } usort($data, 'usort_reorder'); // Get current page number $current_page = $this->get_pagenum(); // Get total count $total_items = $data_res['total']; // Get page items $this->items = $data; /** * REQUIRED. We also have to register our pagination options & calculations. */ $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page, //WE have to determine how many items to show on a page 'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages ) ); } } //Create an instance of our package class... $FollowedUsersAuthorListTable = new Penci_Bf_Users_List_Authors(); //Fetch, prepare, sort, and filter our data... $FollowedUsersAuthorListTable->prepare_items(); ?>
display_name ) ? $author_data->display_name : ''; if( strlen( $title ) > 50 ) { $title = substr( $title, 0, 50 ); $title = $title.'...'; } //back url to go back on the page $backurl = add_query_arg( array( 'page' => 'penci-bf-author' ), admin_url( 'admin.php' ) ); ?>

views(); if(isset($_GET['message']) && !empty($_GET['message']) ) { //check message if( $_GET['message'] == '3' ) { //check message echo '

'.esc_html__("Record (s) deleted successfully.",'penci-bookmark-follow').'

'; } } ?>
display(); ?>
inc/admin/forms/penci-bf-users-list.php000064400000041525147600022000014035 0ustar00model = $penci_bl_model; //Set parent defaults parent::__construct( array( 'singular' => 'user', //singular name of the listed records 'plural' => 'users', //plural name of the listed records 'ajax' => false //does this table support ajax? ) ); $this->per_page = apply_filters( 'penci_bl_users_list_per_page', 10 ); // Per page } /** * Displaying Followed Post Users * * Does prepare the data for displaying followed post users in the table. * * @package Penci Bookmark Follow * @since 1.0.0 */ function display_follow_post_users() { $prefix = PENCI_BL_META_PREFIX; // Taking parameter $orderby = isset( $_GET['orderby'] ) ? urldecode( $_GET['orderby'] ) : 'date'; $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( trim($_GET['s']) ) : null; $args = array( 'posts_per_page' => $this->per_page, 'orderby' => $orderby, 'order' => $order, 'page' => isset( $_GET['paged'] ) ? $_GET['paged'] : null, 'offset' => ( $this->get_pagenum() - 1 ) * $this->per_page, 'penci_bl_user_list_data' => true, ); $args['postid'] = $_GET['postid']; //in case of search make parameter for retriving search data if( isset($search) && !empty($search) ) { $args['search'] = $search; } if(isset($_REQUEST['penci_bl_status']) && !empty($_REQUEST['penci_bl_status'])) { $args['penci_bl_status'] = $_REQUEST['penci_bl_status']; } if( isset( $_GET['user'] ) ) { $args['author'] = trim( $_GET['user'] ); } //get followed post list data from database $result_data = $this->model->penci_bl_get_follow_post_users_data( $args ); foreach ( $result_data['data'] as $key => $value ){ // get user email from meta field $user_email = get_post_meta( $value['ID'], $prefix.'post_user_email', true ); // get user is subscribed or not $subscribed = get_post_meta( $value['ID'], $prefix.'follow_status', true ); // get view log link to view log for perticular user $permalink = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $_GET['postid'], 'logid' => $value['ID'] ), admin_url( 'admin.php' ) ); $logs = ''. esc_html__( 'View Log', 'penci-bookmark-follow' ) .''; $userdata = get_user_by( 'id', $value['post_author'] ); $user_email_html = ''; $user = ''; if( !empty( $userdata ) ) { // to display user display name $user_email = isset( $userdata->user_email ) ? $userdata->user_email : ''; $user_edit_link = add_query_arg( array( 'user_id' => $userdata->ID ), admin_url( 'user-edit.php' ) ); $display_name = $userdata->display_name; if( !empty( $user_email ) ) { $user_email_html = ''.$user_email.''; $user_link = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $_GET['postid'], 'user' => $userdata->ID ), admin_url( 'admin.php' ) ); $user = ''.$display_name.''; } $user_type = esc_html__( 'Registered User', 'penci-bookmark-follow' ); } else { $user_email_html = $user_email; $user_link = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $_GET['postid'], 'user' => 0 ), admin_url( 'admin.php' ) ); $user = ''.esc_html__('guest', 'penci-bookmark-follow' ).''; $user_type = esc_html__( 'Guest', 'penci-bookmark-follow' ); } // set data $data[$key]['ID'] = isset($value['ID']) ? $value['ID'] : ''; $data[$key]['post_author'] = isset($value['post_author']) ? $value['post_author'] : ''; $data[$key]['post_name'] = isset($value['post_name']) ? $value['post_name'] : ''; $data[$key]['user_email'] = apply_filters( 'penci_bl_follow_post_user_email_column', $user_email_html , $value['ID'] ); $data[$key]['user'] = $user; $data[$key]['subscribed'] = $subscribed; $data[$key]['logs'] = $logs; $data[$key]['user_type'] = $user_type; } $result_arr['data'] = !empty($data) ? $data : array(); $result_arr['total'] = isset($result_data['total']) ? $result_data['total'] : ''; // Total no of data return $result_arr; } /** * Mange column data * * Default Column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_default( $item, $column_name ){ switch( $column_name ) { case 'post_author' : return $item['user_type']; case 'subscribed' : if( isset( $_GET['paged'] ) ) { $status_url = add_query_arg( array( 'paged' => $_GET['paged'] ), admin_url( 'admin.php' ) ); } else { $status_url = admin_url( 'admin.php' ); } if( $item[ $column_name ] == '1' ) { $status_url = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $_GET['postid'], 'penci_bl_status' => 'subscribe' ), $status_url ); $status_link = '' . esc_html__( 'Yes', 'penci-bookmark-follow' ) . ''; } else { $status_url = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $_GET['postid'], 'penci_bl_status' => 'unsubscribe' ), $status_url ); $status_link = '' . esc_html__( 'No', 'penci-bookmark-follow' ) . ''; } return $status_link; default: $default_value = isset( $item[ $column_name ] ) ? $item[ $column_name ] : ''; return apply_filters( 'penci_bl_posts_users_column_value', $default_value, $item, $column_name ); } } /** * Manage User Email Column * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_user_email($item){ $pagestr = $pagenumber = ''; if( isset( $_GET['paged'] ) ) { $pagestr = '&paged=%s'; $pagenumber = $_GET['paged']; } //Build row actions if( $item['subscribed'] == '1' ) { $actions['unsubscribe'] = sprintf(''.esc_html__('Unsubscribe', 'penci-bookmark-follow').'','penci-bf-post','unsubscribe',$item['ID'],$_GET['postid'], $pagenumber ); } else { $actions['subscribe'] = sprintf(''.esc_html__('Subscribe', 'penci-bookmark-follow').'','penci-bf-post','subscribe',$item['ID'],$_GET['postid'], $pagenumber ); } $actions['delete'] = sprintf(''.esc_html__('Delete', 'penci-bookmark-follow').'','penci-bf-post','delete',$item['ID'],$_GET['postid'], $pagenumber ); //Return the title contents return sprintf('%1$s %2$s', $item['user_email'], $this->row_actions( $actions ) ); } function column_cb($item){ return sprintf( '', $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie") $item['ID'] //The value of the checkbox should be the record's id ); } /** * Display Columns * * Handles which columns to show in table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_columns(){ global $penci_bl_options; $columns = array( 'cb' => '', //Render a checkbox instead of text 'user_email' => esc_html__( 'User Email', 'penci-bookmark-follow' ), 'post_author' => esc_html__( 'User Type', 'penci-bookmark-follow' ), 'subscribed' => esc_html__( 'Subscribed', 'penci-bookmark-follow' ), 'user' => esc_html__( 'User', 'penci-bookmark-follow' ), ); if( isset( $penci_bl_options['enable_log'] ) && $penci_bl_options['enable_log'] == '1' ) { $columns['logs'] = esc_html__( 'View Logs', 'penci-bookmark-follow' ); } return apply_filters( 'penci_bl_posts_users_add_columns', $columns ); } /** * Sortable Columns * * Handles soratable columns of the table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_sortable_columns() { $sortable_columns = array( 'user_email' => array( 'user_email', true ), //true means its already sorted 'post_author' => array( 'post_author', true ), 'subscribed' => array( 'subscribed', true ) ); return apply_filters( 'penci_bl_posts_users_add_sortable_column', $sortable_columns ); } function no_items() { //message to show when no records in database table esc_html_e( 'No Users Found.', 'penci-bookmark-follow' ); } /** * Bulk actions field * * Handles Bulk Action combo box values * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_bulk_actions() { //bulk action combo box parameter //if you want to add some more value to bulk action parameter then push key value set in below array $actions = array( 'subscribe' => esc_html__('Subscribe','penci-bookmark-follow'), 'unsubscribe' => esc_html__('Unsubscribe','penci-bookmark-follow'), 'delete' => esc_html__('Delete','penci-bookmark-follow') ); return $actions; } /** * Add filter for subscribe/unscribe * * Handles to display records for particular subscribe/unscribe * * @package Penci Bookmark Follow * @since 1.0.0 */ function extra_tablenav( $which ) { if( $which == 'top' ) { $html = ''; $all_status = array( 'subscribe' => esc_html__( 'Subscribed', 'penci-bookmark-follow' ), 'unsubscribe' => esc_html__( 'Unsubscribed', 'penci-bookmark-follow' ), ); $html .= '
'; $html .= ''; $html .= ' '; $html .= ' '; $html .= '
'; echo $html; } } function prepare_items() { // Get how many records per page to show $per_page = $this->per_page; // Get All, Hidden, Sortable columns $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); // Get final column header $this->_column_headers = array($columns, $hidden, $sortable); // Get Data of particular page $data_res = $this->display_follow_post_users(); $data = $data_res['data']; /** * This checks for sorting input and sorts the data in our array accordingly. * * In a real-world situation involving a database, you would probably want * to handle sorting by passing the 'orderby' and 'order' values directly * to a custom query. The returned data will be pre-sorted, and this array * sorting technique would be unnecessary. */ function usort_reorder($a,$b){ $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'post_name'; //If no sort, default to title $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order return ($order==='asc') ? $result : -$result; //Send final sort direction to usort } usort($data, 'usort_reorder'); // Get current page number $current_page = $this->get_pagenum(); // Get total count $total_items = $data_res['total']; // Get page items $this->items = $data; /** * REQUIRED. We also have to register our pagination options & calculations. */ $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page, //WE have to determine how many items to show on a page 'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages ) ); } } //Create an instance of our package class... $FollowedUsersListTable = new Penci_Bf_Users_List(); //Fetch, prepare, sort, and filter our data... $FollowedUsersListTable->prepare_items(); ?>
post_title ) ? $data->post_title : ''; if( strlen( $title ) > 50 ) { $title = substr( $title, 0, 50 ); $title = $title.'...'; } //back url to go back on the page $backurl = add_query_arg( array( 'page' => 'penci-bf-post' ), admin_url( 'admin.php' ) ); ?>

views(); if(isset($_GET['message']) && !empty($_GET['message']) ) { //check message if( $_GET['message'] == '3' ) { //check message echo '

'.esc_html__("Record (s) deleted successfully.",'penci-bookmark-follow').'

'; } } ?>
display(); ?>
inc/admin/forms/penci-bf-users-logs-list.php000064400000031130147600022000014766 0ustar00model = $penci_bl_model; //Set parent defaults parent::__construct( array( 'singular' => 'userlog', //singular name of the listed records 'plural' => 'userlogs', //plural name of the listed records 'ajax' => false //does this table support ajax? ) ); } /** * Displaying Followed Post User Logs * * Does prepare the data for displaying followed post users in the table. * * @package Penci Bookmark Follow * @since 1.0.0 */ function display_follow_post_user_logs() { $prefix = PENCI_BL_META_PREFIX; //if search is call then pass searching value to function for displaying searching values $args = array(); $args['logid'] = $_GET['logid']; //in case of search make parameter for retriving search data if(isset($_REQUEST['s']) && !empty($_REQUEST['s'])) { $args['search'] = $_REQUEST['s']; } //get followed post list data from database $data = $this->model->penci_bl_get_follow_post_user_logs_data( $args ); foreach ($data as $key => $value){ // get email data from meta field $email_data = get_post_meta( $value['ID'], $prefix.'log_email_data', true ); $mail_part = explode( '%$%$%', $email_data ); // set data $data[$key]['mail_subject'] = isset( $mail_part[0] ) ? $mail_part[0] : ''; $data[$key]['mail_body'] = isset( $mail_part[1] ) ? $mail_part[1] : ''; } return $data; } /** * Mange column data * * Default Column for listing table * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_default( $item, $column_name ){ switch( $column_name ) { case 'mail_subject' : return $item[ $column_name ]; case 'mail_body' : return $item[ $column_name ]; case 'post_date' : $date = date( get_option('date_format'), strtotime( $item[ $column_name ] ) ); return $date; default: return $item[ $column_name ]; } } /** * Manage User Email Column * * @package Penci Bookmark Follow * @since 1.0.0 */ function column_mail_subject($item){ $pagestr = $pagenumber = ''; if( isset( $_GET['paged'] ) ) { $pagestr = '&paged=%s'; $pagenumber = $_GET['paged']; } //Build row action $actions['delete'] = sprintf(''.esc_html__('Delete', 'penci-bookmark-follow').'','penci-bf-post','delete',$item['ID'],$_GET['postid'],$_GET['logid'], $pagenumber ); //Return the title contents return sprintf('%1$s %2$s', $item['mail_subject'], $this->row_actions( $actions ) ); } function column_cb($item){ return sprintf( '', $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie") $item['ID'] //The value of the checkbox should be the record's id ); } /** * Display Columns * * Handles which columns to show in table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_columns(){ $columns = array( 'cb' => '', //Render a checkbox instead of text 'mail_subject' => esc_html__( 'Email Subject', 'penci-bookmark-follow' ), 'mail_body' => esc_html__( 'Email Body', 'penci-bookmark-follow' ), 'post_date' => esc_html__( 'Post Date', 'penci-bookmark-follow' ) ); return $columns; } /** * Sortable Columns * * Handles soratable columns of the table * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_sortable_columns() { $sortable_columns = array( 'post_date' => array( 'post_date', true ) ); return $sortable_columns; } function no_items() { //message to show when no records in database table esc_html_e( 'No User Logs Found.', 'penci-bookmark-follow' ); } /** * Bulk actions field * * Handles Bulk Action combo box values * * @package Penci Bookmark Follow * @since 1.0.0 */ function get_bulk_actions() { //bulk action combo box parameter //if you want to add some more value to bulk action parameter then push key value set in below array $actions = array( 'delete' => esc_html__('Delete','penci-bookmark-follow') ); return $actions; } function prepare_items() { /** * First, lets decide how many records per page to show */ $per_page = '10'; /** * REQUIRED. Now we need to define our column headers. This includes a complete * array of columns to be displayed (slugs & titles), a list of columns * to keep hidden, and a list of columns that are sortable. Each of these * can be defined in another method (as we've done here) before being * used to build the value for our _column_headers property. */ $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); /** * REQUIRED. Finally, we build an array to be used by the class for column * headers. The $this->_column_headers property takes an array which contains * 3 other arrays. One for all columns, one for hidden columns, and one * for sortable columns. */ $this->_column_headers = array($columns, $hidden, $sortable); /** * Instead of querying a database, we're going to fetch the example data * property we created for use in this plugin. This makes this example * package slightly different than one you might build on your own. In * this example, we'll be using array manipulation to sort and paginate * our data. In a real-world implementation, you will probably want to * use sort and pagination data to build a custom query instead, as you'll * be able to use your precisely-queried data immediately. */ $data = $this->display_follow_post_user_logs(); /** * This checks for sorting input and sorts the data in our array accordingly. * * In a real-world situation involving a database, you would probably want * to handle sorting by passing the 'orderby' and 'order' values directly * to a custom query. The returned data will be pre-sorted, and this array * sorting technique would be unnecessary. */ function usort_reorder($a,$b){ $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'post_date'; //If no sort, default to title $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order return ($order==='asc') ? $result : -$result; //Send final sort direction to usort } usort($data, 'usort_reorder'); /** * REQUIRED for pagination. Let's figure out what page the user is currently * looking at. We'll need this later, so you should always include it in * your own package classes. */ $current_page = $this->get_pagenum(); /** * REQUIRED for pagination. Let's check how many items are in our data array. * In real-world use, this would be the total number of items in your database, * without filtering. We'll need this later, so you should always include it * in your own package classes. */ $total_items = count($data); /** * The WP_List_Table class does not handle pagination for us, so we need * to ensure that the data is trimmed to only the current page. We can use * array_slice() to */ $data = array_slice($data,(($current_page-1)*$per_page),$per_page); /** * REQUIRED. Now we can add our *sorted* data to the items property, where * it can be used by the rest of the class. */ $this->items = $data; /** * REQUIRED. We also have to register our pagination options & calculations. */ $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page, //WE have to determine how many items to show on a page 'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages ) ); } } //Create an instance of our package class... $FollowedUserLogsListTable = new Penci_Bf_User_Logs_List(); //Fetch, prepare, sort, and filter our data... $FollowedUserLogsListTable->prepare_items(); $prefix = PENCI_BL_META_PREFIX; ?>
post_author ) ) { $email = $this->model->penci_bl_get_user_email_from_id( $post_data->post_author ); } $title = $data->post_title; if( strlen( $title ) > 50 ) { $title = substr( $title, 0, 50 ); $title = $title.'...'; } //back url to go back on the page $backurl = add_query_arg( array( 'page' => 'penci-bf-post', 'postid' => $_GET['postid'] ), admin_url( 'admin.php' ) ); ?>

views(); if(isset($_GET['message']) && !empty($_GET['message']) ) { //check message if( $_GET['message'] == '3' ) { //check message echo '

'.esc_html__("Record (s) deleted successfully.",'penci-bookmark-follow').'

'; } } ?>
search_box( esc_html__( 'Search', 'penci-bookmark-follow' ), 'penci-bookmark-follow' ); ?> display(); ?>
inc/admin/forms/penci-bf-add-follower.php000064400000031304147600022000014274 0ustar00
true), 'objects'); if (isset($post_types['attachment'])) { // Check attachment post type exists unset($post_types['attachment']); } $followers_msg = ''; //Get message after sent email to followers if ($message->size('penci-bf-sent-mail-message') > 0) { $followers_msg = $message->messages[0]['text']; } ?>



...
...
...
...



'); ?>
...
inc/admin/class-penci-bf-admin.php000064400000155165147600022000012776 0ustar00model = $penci_bl_model; $this->render = $penci_bl_render; $this->scripts = $penci_bl_script; $this->message = $penci_bl_message; $this->public = $penci_bl_public; } /** * Register All need admin menu page * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_add_admin_menu() { global $current_user; // get current user role $user_role = $current_user->roles; // Add menu for author role user for author follow list if ( in_array( 'author', $user_role ) ) { add_menu_page( esc_html__( 'Penci Bookmark & Follow ', 'penci-bookmark-follow' ), esc_html__( 'Penci Bookmark & Follow', 'penci-bookmark-follow' ), 'publish_posts', 'penci-bf-author', array( $this, 'penci_bl_list_authors', ) ); } // follow blog post page add_menu_page( esc_html__( 'Penci Bookmark & Follow', 'penci-bookmark-follow' ), esc_html__( 'Penci Bookmark & Follow', 'penci-bookmark-follow' ), 'manage_options', 'penci-bf-post', array( $this, 'penci_bl_list_users' ), 'dashicons-paperclip' ); add_submenu_page( 'penci-bf-post', esc_html__( 'Penci Bookmark & Follow - Followed Posts', 'penci-bookmark-follow' ), esc_html__( 'Followed Posts', 'penci-bookmark-follow' ), 'manage_options', 'penci-bf-post', array( $this, 'penci_bl_list_users' ) ); // Followed Authors page add_submenu_page( 'penci-bf-post', esc_html__( 'Penci Bookmark & Follow - Followed Authors', 'penci-bookmark-follow' ), esc_html__( 'Followed Authors', 'penci-bookmark-follow' ), 'manage_options', 'penci-bf-author', array( $this, 'penci_bl_list_authors' ) ); // Send Emails To Followers $send_email_page = add_submenu_page( 'penci-bf-post', esc_html__( 'Penci Bookmark & Follow - Send Emails', 'penci-bookmark-follow' ), apply_filters( 'wpwp_fp_admin_send_email_menu_text', esc_html__( 'Send Emails', 'penci-bookmark-follow' ) ), 'manage_options', 'penci-bf-send-email', array( $this, 'penci_bl_send_email_page' ) ); // Add Followers $add_followers_page = add_submenu_page( 'penci-bf-post', esc_html__( 'Penci Bookmark & Follow - Add Followers', 'penci-bookmark-follow' ), esc_html__( 'Add Followers', 'penci-bookmark-follow' ), 'manage_options', 'penci-bf-add-follower', array( $this, 'penci_bl_add_follower_page' ) ); add_action( "admin_head-$send_email_page", array( $this->scripts, 'penci_bl_send_email_page_load_scripts' ) ); add_action( "admin_head-$add_followers_page", array( $this->scripts, 'penci_bl_send_email_page_load_scripts' ) ); } /** * Admin Options Page * * Handles to send emails to followers * * * @package Penci Bookmark Follow * @since 1.0.0 **/ function penci_bl_send_email_page() { //admin options page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-send-email.php' ); } /** * Add follower page * * Handles to add followers from backend * * * @package Penci Bookmark Follow * @since 1.0.0 **/ function penci_bl_add_follower_page() { // Add followers page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-add-follower.php' ); } /** * List Users Page * * List of all following user * display * * @package Penci Bookmark Follow * @since 1.0.0 **/ function penci_bl_list_users() { if ( isset( $_GET['postid'] ) && isset( $_GET['logid'] ) ) { //display following post user logs list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-users-logs-list.php' ); } else if ( isset( $_GET['postid'] ) ) { //display following post users list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-users-list.php' ); } else { //display following posts list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-list.php' ); } } /** * List Terms Page * * List of all following terms * display * * @package Penci Bookmark Follow * @since 1.0.0 **/ function penci_bl_list_terms() { if ( isset( $_GET['termid'] ) && isset( $_GET['taxonomy'] ) && isset( $_GET['logid'] ) ) { //display following term user logs list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-users-logs-list-terms.php' ); } else if ( isset( $_GET['termid'] ) && isset( $_GET['taxonomy'] ) ) { //display following term users list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-users-list-terms.php' ); } else { //display following terms list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-list-terms.php' ); } } /** * List author Page * * List of all following authors * display * * @package Penci Bookmark Follow * @since 1.0.0 **/ function penci_bl_list_authors() { if ( isset( $_GET['authorid'] ) && isset( $_GET['logid'] ) ) { //display following author user logs list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-users-logs-list-authors.php' ); } else if ( isset( $_GET['authorid'] ) ) { //display following author users list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-users-list-authors.php' ); } else { //display following authors list page include_once( PENCI_BL_ADMIN_DIR . '/forms/penci-bf-list-authors.php' ); } } /** * Register Settings * * @package Penci Bookmark Follow * @since 1.0.0 * */ public function penci_bl_admin_register_settings() { register_setting( 'penci_bl_plugin_options', 'penci_bl_options', array( $this, 'penci_bl_validate_options' ) ); } /** * Validate Settings Options * * Handle settings page values * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_validate_options( $input ) { global $penci_bl_options; // sanitize text input (strip html tags, and escape characters) $input['follow_buttons'] = $this->model->penci_bl_escape_slashes_deep( $input['follow_buttons'] ); $input['follow_buttons']['follow'] = isset( $input['follow_buttons']['follow'] ) && ! empty( $input['follow_buttons']['follow'] ) && trim( $input['follow_buttons']['follow'] != '' ) ? $input['follow_buttons']['follow'] : esc_html__( 'Follow', 'penci-bookmark-follow' ); $input['follow_buttons']['following'] = isset( $input['follow_buttons']['following'] ) && ! empty( $input['follow_buttons']['following'] ) && trim( $input['follow_buttons']['following'] != '' ) ? $input['follow_buttons']['following'] : esc_html__( 'Following', 'penci-bookmark-follow' ); $input['follow_buttons']['unfollow'] = isset( $input['follow_buttons']['unfollow'] ) && ! empty( $input['follow_buttons']['unfollow'] ) && trim( $input['follow_buttons']['unfollow'] != '' ) ? $input['follow_buttons']['unfollow'] : esc_html__( 'Unfollow', 'penci-bookmark-follow' ); $input['follow_message'] = $this->model->penci_bl_escape_slashes_deep( $input['follow_message'] ); $input['term_follow_buttons'] = $this->model->penci_bl_escape_slashes_deep( $input['term_follow_buttons'] ); $input['term_follow_buttons']['follow'] = isset( $input['term_follow_buttons']['follow'] ) && ! empty( $input['term_follow_buttons']['follow'] ) && trim( $input['term_follow_buttons']['follow'] != '' ) ? $input['term_follow_buttons']['follow'] : esc_html__( 'Follow {term_name}', 'penci-bookmark-follow' ); $input['term_follow_buttons']['following'] = isset( $input['term_follow_buttons']['following'] ) && ! empty( $input['term_follow_buttons']['following'] ) && trim( $input['term_follow_buttons']['following'] != '' ) ? $input['term_follow_buttons']['following'] : esc_html__( 'Following {term_name}', 'penci-bookmark-follow' ); $input['term_follow_buttons']['unfollow'] = isset( $input['term_follow_buttons']['unfollow'] ) && ! empty( $input['term_follow_buttons']['unfollow'] ) && trim( $input['term_follow_buttons']['unfollow'] != '' ) ? $input['term_follow_buttons']['unfollow'] : esc_html__( 'Unfollow {term_name}', 'penci-bookmark-follow' ); $input['term_follow_message'] = $this->model->penci_bl_escape_slashes_deep( $input['term_follow_message'] ); $input['recipient_per_email'] = $this->model->penci_bl_escape_slashes_deep( $input['recipient_per_email'], true ); $input['from_email'] = $this->model->penci_bl_escape_slashes_deep( $input['from_email'], true ); $input['unsubscribe_message'] = $this->model->penci_bl_escape_slashes_deep( $input['unsubscribe_message'], true ); $input['email_subject'] = $this->model->penci_bl_escape_slashes_deep( $input['email_subject'] ); $input['email_body'] = $this->model->penci_bl_escape_slashes_deep( $input['email_body'], true ); $input['term_email_subject'] = $this->model->penci_bl_escape_slashes_deep( $input['term_email_subject'] ); $input['term_email_body'] = $this->model->penci_bl_escape_slashes_deep( $input['term_email_body'], true ); $input['comment_email_subject'] = $this->model->penci_bl_escape_slashes_deep( $input['comment_email_subject'] ); $input['comment_email_body'] = $this->model->penci_bl_escape_slashes_deep( $input['comment_email_body'], true ); $input['confirm_email_subject'] = $this->model->penci_bl_escape_slashes_deep( $input['confirm_email_subject'] ); $input['confirm_email_body'] = $this->model->penci_bl_escape_slashes_deep( $input['confirm_email_body'], true ); $input['term_confirm_email_subject'] = $this->model->penci_bl_escape_slashes_deep( $input['term_confirm_email_subject'] ); $input['term_confirm_email_body'] = $this->model->penci_bl_escape_slashes_deep( $input['term_confirm_email_body'], true ); $input['unsubscribe_confirm_email_subject'] = $this->model->penci_bl_escape_slashes_deep( $input['unsubscribe_confirm_email_subject'] ); $input['unsubscribe_confirm_email_body'] = $this->model->penci_bl_escape_slashes_deep( $input['unsubscribe_confirm_email_body'], true ); $input['double_opt_in_guest'] = isset( $input['double_opt_in_guest'] ) && ! empty( $input['double_opt_in_guest'] ) ? '1' : ''; $input['custom_css'] = ! empty( $input['custom_css'] ) ? $this->model->penci_bl_escape_slashes_deep( $input['custom_css'] ) : ''; //set session to set tab selected in settings page $selectedtab = isset( $input['selected_tab'] ) ? $input['selected_tab'] : ''; set_transient( get_current_user_id() . 'penci_bl_selected_tab', strtolower( $selectedtab ) ); // apply filters for validate settings $input = apply_filters( 'penci_bl_validate_settings', $input, $penci_bl_options ); //filter to save all settings to database return $input; } /** * Bulk actions * * Handles bulk action functinalities * for follow post * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_process_bulk_actions() { // Code for followed post if ( ( isset( $_GET['action'] ) || isset( $_GET['action2'] ) ) && ( isset( $_GET['page'] ) && $_GET['page'] == 'penci-bf-post' ) && ( isset( $_GET['post'] ) || isset( $_GET['user'] ) || isset( $_GET['userlog'] ) ) ) { // check if we get user OR get userlogs if ( isset( $_GET['post'] ) ) { $action_on_id = $_GET['post']; } else if ( isset( $_GET['user'] ) ) { $action_on_id = $_GET['user']; } else { $action_on_id = $_GET['userlog']; } // check if we dont get array of IDs if ( ! is_array( $action_on_id ) ) { $action_on_id = array( $action_on_id ); } // redirect string for userlist page $newstr = add_query_arg( array( 'userlog' => false, 'post' => false, 'user' => false, 'action' => false, 'action2' => false ) ); //if there is multiple checkboxes are checked then call delete in loop foreach ( $action_on_id as $id ) { //parameters for delete function $args = array( 'id' => $id ); if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'delete' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'delete' ) ) { if ( isset( $_GET['post'] ) ) { $args['parent_id'] = $_GET['post']; //delete record from database $this->model->penci_bl_bulk_follow_post_delete( $args ); } else { //delete record from database $this->model->penci_bl_bulk_delete( $args ); } $newstr = add_query_arg( array( 'message' => '3' ), $newstr ); } else if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'subscribe' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'subscribe' ) ) { //subscribe users $this->model->penci_bl_bulk_subscribe( $args ); $newstr = add_query_arg( array( 'message' => '1' ), $newstr ); } else if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'unsubscribe' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'unsubscribe' ) ) { //unsubscribe users $this->model->penci_bl_bulk_unsubscribe( $args ); $newstr = add_query_arg( array( 'message' => '2' ), $newstr ); } } wp_redirect( $newstr ); exit; } // Code for followed term if ( ( isset( $_GET['action'] ) || isset( $_GET['action2'] ) ) && ( isset( $_GET['page'] ) && $_GET['page'] == 'penci-bf-term' ) && ( isset( $_GET['term'] ) || isset( $_GET['user'] ) || isset( $_GET['userlog'] ) ) ) { // check if we get user OR get userlogs if ( isset( $_GET['term'] ) ) { $action_on_id = $_GET['term']; } else if ( isset( $_GET['user'] ) ) { $action_on_id = $_GET['user']; } else { $action_on_id = $_GET['userlog']; } // check if we dont get array of IDs if ( ! is_array( $action_on_id ) ) { $action_on_id = array( $action_on_id ); } // redirect string for userlist page $newstr = add_query_arg( array( 'userlog' => false, 'term' => false, 'user' => false, 'action' => false, 'action2' => false ) ); //if there is multiple checkboxes are checked then call delete in loop foreach ( $action_on_id as $id ) { //parameters for delete function $args = array( 'id' => $id ); if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'delete' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'delete' ) ) { $this->model->penci_bl_bulk_delete( $args ); $newstr = add_query_arg( array( 'message' => '3' ), $newstr ); } else if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'subscribe' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'subscribe' ) ) { //subscribe users $this->model->penci_bl_bulk_subscribe( $args ); $newstr = add_query_arg( array( 'message' => '1' ), $newstr ); } else if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'unsubscribe' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'unsubscribe' ) ) { //unsubscribe users $this->model->penci_bl_bulk_unsubscribe( $args ); $newstr = add_query_arg( array( 'message' => '2' ), $newstr ); } } wp_redirect( $newstr ); exit; } // Code for followed author if ( ( isset( $_GET['action'] ) || isset( $_GET['action2'] ) ) && ( isset( $_GET['page'] ) && $_GET['page'] == 'penci-bf-author' ) && ( isset( $_GET['author'] ) || isset( $_GET['user'] ) || isset( $_GET['userlog'] ) ) ) { // check if we get user OR get userlogs if ( isset( $_GET['author'] ) ) { $action_on_id = $_GET['author']; } else if ( isset( $_GET['user'] ) ) { $action_on_id = $_GET['user']; } else { $action_on_id = $_GET['userlog']; } // check if we dont get array of IDs if ( ! is_array( $action_on_id ) ) { $action_on_id = array( $action_on_id ); } // redirect string for userlist page $newstr = add_query_arg( array( 'userlog' => false, 'author' => false, 'user' => false, 'action' => false, 'action2' => false ) ); //if there is multiple checkboxes are checked then call delete in loop foreach ( $action_on_id as $id ) { //parameters for delete function $args = array( 'id' => $id ); if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'delete' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'delete' ) ) { if ( isset( $_GET['author'] ) ) { $args['authorid'] = $_GET['author']; //delete record from database $this->model->penci_bl_bulk_follow_author_delete( $args ); } else { //delete record from database $this->model->penci_bl_bulk_delete( $args ); } $newstr = add_query_arg( array( 'message' => '3' ), $newstr ); } else if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'subscribe' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'subscribe' ) ) { //subscribe users $this->model->penci_bl_bulk_subscribe( $args ); $newstr = add_query_arg( array( 'message' => '1' ), $newstr ); } else if ( ( isset( $_GET['action'] ) && $_GET['action'] == 'unsubscribe' ) || ( isset( $_GET['action2'] ) && $_GET['action2'] == 'unsubscribe' ) ) { //unsubscribe users $this->model->penci_bl_bulk_unsubscribe( $args ); $newstr = add_query_arg( array( 'message' => '2' ), $newstr ); } } wp_redirect( $newstr ); exit; } } /** * Save Post * * Handle to check post after save post * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_save_post( $post_id, $post ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; /** * For Elementor plugin compatibility. * * Added checkbox "Notify followers for this update" in frontend editor */ if ( defined( 'ELEMENTOR_VERSION' ) && isset( $_POST['actions'] ) ) { static $avoid_duplicate_emails = 1; // As elementor call ajax multiple times, so prevent more then 1 email notifications if ( $avoid_duplicate_emails > 1 ) { return; } $avoid_duplicate_emails ++; $elementor_data = json_decode( stripslashes( $_POST['actions'] ), true ); $post_notificaiton = isset( $elementor_data['save_builder']['data']['settings'][ $prefix . 'email_notification' ] ) && $elementor_data['save_builder']['data']['settings'][ $prefix . 'email_notification' ] ? $elementor_data['save_builder']['data']['settings'][ $prefix . 'email_notification' ] : null; if ( $post_notificaiton == "yes" ) { $_POST[ $prefix . 'email_notification' ] = 1; } } $post_type_object = get_post_type_object( $post->post_type ); //If post type is followlog then return auto posting if ( $post->post_type == PENCI_BL_LOGS_POST_TYPE ) { return $post_id; } //Check to enable frontend submissioon $check_support_fes = $this->penci_bl_check_support_fes( $post_id, $post ); if ( ! $check_support_fes ) { //If enabled then not to check backend code if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) // Check Autosave || ( $post_type_object->cap && ! is_null( $post_type_object->cap->edit_post ) && ! current_user_can( $post_type_object->cap->edit_post, $post_id ) ) // Check permission || ( $post->post_status != 'publish' ) ) { return $post_id; } } do_action( 'penci_bl_before_send_email_on_save_post', $this ); // Get post published meta $post_published = get_post_meta( $post_id, $prefix . 'post_published', true ); if ( ( empty( $post_published ) ) || ( isset( $_POST[ $prefix . 'email_notification' ] ) && $_POST[ $prefix . 'email_notification' ] == '1' ) ) { // check send email notification is enabled for $post_id if ( ! $this->model->penci_bl_check_send_email_notifications( $post_id ) ) { return false; } // apply filters for verify send email after post create/update $has_send_email = apply_filters( 'penci_bl_verify_send_email', true, $post_id, $penci_bl_options, $_POST ); if ( $has_send_email ) { // Verified for send email // Check first time publish // Check disable email notification is checked if ( empty( $post_published ) ) { // if data changed then send email and create term log $success_mail = $this->model->penci_bl_term_create_logs( $post_id ); $success_author_mail = $this->model->penci_bl_author_create_logs( $post_id ); if ( $success_mail || $success_author_mail ) { //redirect to custom url after saving post add_filter( 'redirect_post_location', array( $this, 'penci_bl_redirect_save_post' ) ); update_post_meta( $post_id, $prefix . 'post_published', '1' ); } } // Check email notification from publish meta box if ( isset( $_POST[ $prefix . 'email_notification' ] ) && $_POST[ $prefix . 'email_notification' ] == '1' ) { // if data changed then send email and create log $success_mail = $this->model->penci_bl_create_logs( $post_id ); if ( $success_mail ) { //redirect to custom url after saving post add_filter( 'redirect_post_location', array( $this, 'penci_bl_redirect_save_post' ) ); } } } } } /** * If elementor plugin is activated, then unset email_notification saved meta. * Elementor by default save this meta and we don't want to save. * * @package Penci Bookmark Follow * @since 1.9.9 */ public function penci_bl_save_post_for_elementor( $post_id, $post ) { // Check if elementor is activated if ( defined( 'ELEMENTOR_VERSION' ) ) { $elementor_settings = get_post_meta( $post_id, '_elementor_page_settings', true ); $prefix = PENCI_BL_META_PREFIX; if ( isset( $elementor_settings[ $prefix . 'email_notification' ] ) ) { unset( $elementor_settings[ $prefix . 'email_notification' ] ); update_post_meta( $post_id, '_elementor_page_settings', $elementor_settings ); } } } /** * Check To Enable Frontend Submission * * Handle to check frontend submission * * @package Penci Bookmark Follow * @since 1.6.0 */ public function penci_bl_check_support_fes( $post_id, $post ) { if ( class_exists( 'EDD_Front_End_Submissions' ) ) { //if edd frontend submission plugin is activated //Do code for edd frontend submission plugin $action = isset( $_POST['action'] ) ? $_POST['action'] : false; $approve_download = isset( $_REQUEST['approve_download'] ) ? $_REQUEST['approve_download'] : false; if ( ( $action == 'fes_submit_post' || ! empty( $approve_download ) ) && ( $post->post_status == 'publish' ) ) { return true; } } return apply_filters( 'penci_bl_check_support_fes', false ); } /** * Add perameter in url after save post * * Handle to add perameter in url after save post * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_redirect_save_post( $loc ) { return add_query_arg( 'penci-bf-successmail', '1', $loc ); } /** * Display Success Message * * Handle to display success message for followers email * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_admin_notices() { if ( ! isset( $_GET['penci-bf-successmail'] ) ) { return false; } if ( isset( $_GET['penci-bf-successmail'] ) && ! empty( $_GET['penci-bf-successmail'] ) ) { echo '

' . esc_html__( 'Email successfully sent to all followers.', 'penci-bookmark-follow' ) . '

'; } } /** * Get all terms by taxonomy * * Handle to get all terms by taxonomy * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_terms() { $html = ''; if ( isset( $_POST['posttype'] ) && ! empty( $_POST['posttype'] ) && isset( $_POST['taxonomy'] ) && ! empty( $_POST['taxonomy'] ) ) { $posttype = $_POST['posttype']; $taxonomy = $_POST['taxonomy']; $catargs = array( 'type' => $posttype, 'taxonomy' => $taxonomy, 'order' => 'DESC', 'hide_empty' => '0', ); $categories = get_categories( $catargs ); $html .= ''; foreach ( $categories as $cat ) { $html .= ''; } } echo $html; exit; } /** * Get all post name for send email * * Handle to get all post name * * @package Penci Bookmark Follow * @since 1.5.0 */ public function penci_bl_post_name() { $args = array(); $html = ''; if ( isset( $_POST['posttype'] ) && ! empty( $_POST['posttype'] ) ) { $posttype = $_POST['posttype']; $args['post_type'] = $posttype; $data = $this->model->penci_bl_get_follow_post_data( $args ); foreach ( $data as $key => $value ) { $html .= ''; } } echo $html; exit; } /** * Delete all follow post when delete main post / page * * Handle to delete all follow post when delete main post / page * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_delete_main_post( $pid ) { $args = array( 'parent_id' => array( $pid ) ); $this->model->penci_bl_bulk_follow_post_delete( $args ); return true; } /** * Add Enable Email Notification Meta in publish meta box * * Handle to add meta in publish box * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_publish_meta() { global $post, $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; if ( isset( $post->post_status ) && $post->post_status == 'publish' && $this->model->penci_bl_check_post_update_notification() ) { //Post Update notify field $update_notify_field = apply_filters( 'penci_bl_post_update_email_notify_field', array( 'title' => esc_html__( 'Notify followers for this update:', 'penci-bookmark-follow' ), 'default' => isset( $penci_bl_options['enable_notify_followers'] ) ? true : false, ), $post ); echo '
'; do_action( 'penci_bl_after_notify_followers', $post ); } } /** * Add Enable Email Notification Meta in publish meta box * * Handle to add meta in publish box * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_notification_meta_box( $post_type, $post ) { $prefix = PENCI_BL_META_PREFIX; if ( function_exists( 'get_current_screen' ) ) { $current_screen = get_current_screen(); if ( isset( $current_screen->is_block_editor ) && $current_screen->is_block_editor == '1' && isset( $post->post_status ) && $post->post_status == 'publish' && $this->model->penci_bl_check_post_update_notification() ) { $pages = get_post_types( array( 'public' => true ), 'names' ); foreach ( $pages as $page ) { //don't add metabox to media post type if ( $page == 'attachment' ) { continue; } //add metabox add_meta_box( 'penci_bl_notification_meta', esc_html__( 'Penci Bookmark & Follow - Notification' ), array( $this, 'penci_bl_publish_meta' ), $page, 'side', 'high' ); } } } } /** * Change template design for default email template * * Handles to change template design for default email template * * @param email * @param email get follower email * * @package Penci Bookmark Follow * @since 1.2.0 * * Added @since 1.7.6 */ public function penci_bl_email_template_default( $html, $message, $unsubscribe = false, $email = '', $unsubscribedata = array() ) { ob_start(); do_action( 'penci_bl_default_email_template', $message, $unsubscribe, $email, $unsubscribedata ); $html .= ob_get_clean(); return $html; } /** * Change template design for plain email template * * Handles to change template design for plain email template * * @param email * @param email get follower email * * @package Penci Bookmark Follow * @since 1.2.0 * * Added @since 1.7.6 */ public function penci_bl_email_template_plain( $html, $message, $unsubscribe = false, $email = '', $unsubscribedata = array() ) { global $penci_bl_options; // site name with url $site_name = get_bloginfo( 'name' ); // Check Append Unsubscribe URL is enable & unsubscribe page is exist & unsubscribe message is not empty if ( $unsubscribe && isset( $penci_bl_options['enable_unsubscribe_url'] ) && $penci_bl_options['enable_unsubscribe_url'] == '1' && isset( $penci_bl_options['unsubscribe_page'] ) && ! empty( $penci_bl_options['unsubscribe_page'] ) && isset( $penci_bl_options['unsubscribe_message'] ) && ! empty( $penci_bl_options['unsubscribe_message'] ) ) { $unsubscribe_message = $penci_bl_options['unsubscribe_message']; // Unsubscribe Message $is_individual_unsubscribe = ! empty( $penci_bl_options['is_individual_unsubscribe'] ) ? $penci_bl_options['is_individual_unsubscribe'] : 0; // Get option whether to send unsubcscribe mail for single post, term, author or multiple // Check disable unsubscribe confirmation option is checked if ( isset( $penci_bl_options['unsubscribe_confirmation'] ) && ! empty( $penci_bl_options['unsubscribe_confirmation'] ) && $penci_bl_options['recipient_per_email'] == 1 ) { $url = get_permalink( $penci_bl_options['unsubscribe_page'] ); // Generate query param $url = add_query_arg( array( 'penci_bl_action' => base64_encode( 'unsubscribe' ), 'penci_bl_email' => base64_encode( rawurlencode( $email ) ) ), $url ); // add query param to unsubscription url for get what to unsubscibe and for what id if ( ! empty( $unsubscribedata ) && ! empty( $is_individual_unsubscribe ) && $is_individual_unsubscribe == 1 ) { $url = add_query_arg( array( 'type' => base64_encode( $unsubscribedata['type'] ), 'id' => $unsubscribedata['id'] ), $url ); } } else { $url = get_permalink( $penci_bl_options['unsubscribe_page'] ); } $unsubscribe_url = '' . esc_html__( 'Unsubscribe', 'penci-bookmark-follow' ) . ''; $unsubscribe_message = str_replace( '{unsubscribe_url}', $unsubscribe_url, $unsubscribe_message ); $unsubscribe_message = "\n\r" . "\n\r" . $unsubscribe_message; $message .= nl2br( $unsubscribe_message ); } $html .= $message; return $html; } /** * Search for Authors and return json * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_search_authors() { header( 'Content-Type: application/json; charset=utf-8' ); $term = urldecode( stripslashes( strip_tags( $_GET['term'] ) ) ); if ( empty( $term ) ) { die(); } $authors_query = new WP_User_Query( array( 'fields' => 'all', 'orderby' => 'display_name', 'search' => '*' . $term . '*', 'search_columns' => array( 'ID', 'user_login', 'user_email', 'user_nicename' ) ) ); $authors = $authors_query->get_results(); if ( $authors ) { foreach ( $authors as $author ) { $found_authors[ $author->ID ] = $author->display_name . ' (#' . $author->ID . ' – ' . sanitize_email( $author->user_email ) . ')'; } } echo json_encode( $found_authors ); die(); } public function penci_bl_load_more_notification() { $postType = $_POST['posttype']; $paged = $_POST['page']; global $penci_bl_options; // echo "
";
		// print_r($postType);die();
		//$paged  = $_POST['page'];
		$args     = array(
			'post_type'      => $postType,
			'status'         => 'published',
			'paged'          => $paged,
			'posts_per_page' => 10,
			'post__not_in'   => $penci_bl_options[ 'notification_item_' . $postType ]
		);
		$wp_query = null;
		$wp_query = new WP_Query;
		$wp_query->query( $args );


		if ( $wp_query->have_posts() ) {

			while ( $wp_query->have_posts() ) {

				$wp_query->the_post();

				$checked   = ( in_array( $wp_query->post->ID, $penci_bl_options[ 'notification_item_' . $postType . '' ] ) ) ? 'checked="checked"' : '';
				$posttitle = ! empty( $wp_query->post->post_title ) ? $wp_query->post->post_title : esc_html__( '(no title)', 'penci-bookmark-follow' );
				if ( strlen( $posttitle ) > 50 ) {
					$posttitle = substr( $posttitle, 0, 50 );
					$posttitle = $posttitle . '...';
				} else {
					$posttitle = $posttitle;
				}


				echo '
  • '; } } wp_reset_query(); die(); } /** * AJAX Call * * Handles to ajax call to post load more show * * @package Penci Bookmark Follow * @since 1.2.0 */ public function penci_bl_load_more() { $postType = $_REQUEST['postType']; $paged = $_POST['page']; global $penci_bl_options; $args = array( 'post_type' => $postType, 'status' => 'published', 'paged' => $paged, 'posts_per_page' => 10, 'post__not_in' => $penci_bl_options[ 'prevent_item_' . $postType ] ); $wp_query = null; $wp_query = new WP_Query; $wp_query->query( $args ); if ( $wp_query->have_posts() ) { while ( $wp_query->have_posts() ) { $wp_query->the_post(); $checked = ""; //( in_array( $wp_query->post->ID, $penci_bl_options['prevent_item_'.$postType] ) ) ? 'checked="checked"' : ''; $posttitle = ! empty( $wp_query->post->post_title ) ? $wp_query->post->post_title : esc_html__( '(no title)', 'penci-bookmark-follow' ); if ( strlen( $posttitle ) > 50 ) { $posttitle = substr( $posttitle, 0, 50 ); $posttitle = $posttitle . '...'; } else { $posttitle = $posttitle; } echo '
  • '; } } wp_reset_query(); wp_die(); } /** * AJAX Call * * Handles to ajax call to store social count to the database * * @package Penci Bookmark Follow * @since 1.2.0 */ public function penci_bl_send_test_email() { global $penci_bl_options, $current_user; $email_template = isset( $_POST['template'] ) && ! empty( $_POST['template'] ) ? $_POST['template'] : 'default'; $email = isset( $current_user->user_email ) ? $current_user->user_email : get_option( 'admin_email' ); //get user email template value from settings page $subject = isset( $penci_bl_options['email_subject'] ) ? $penci_bl_options['email_subject'] : ''; //get user email template value from settings page $message = isset( $penci_bl_options['email_body'] ) ? $penci_bl_options['email_body'] : ''; // replace email shortcodes with content $subject = $this->model->penci_bl_replace_shortcodes( '1', $subject ); // replace email shortcodes with content $message = $this->model->penci_bl_replace_shortcodes( '1', $message ); $this->model->penci_bl_send_email( $email, $subject, $message, '', $email_template ); echo 'success'; exit; } /** * call function to send an email * * @package Penci Bookmark Follow * @since 1.5.0 */ public function penci_bl_admin_send_email() { $prefix = PENCI_BL_META_PREFIX; if ( isset( $_POST['penci_bl_send_email_submit'] ) && ! empty( $_POST['followed_type'] ) ) {// check if not empty followed_type $followed_type = $_POST['followed_type']; $followed_type_post_name = isset( $_POST['followed_type_post_name'] ) ? $_POST['followed_type_post_name'] : ''; $followed_type_terms = isset( $_POST['followed_type_terms'] ) ? $_POST['followed_type_terms'] : ''; $penci_bl_term_id = isset( $_POST['penci_bl_term_id'] ) ? $_POST['penci_bl_term_id'] : ''; $followed_type_author = isset( $_POST['followed_type_author'] ) ? $_POST['followed_type_author'] : ''; $email_subject = isset( $_POST['followed_email_subject'] ) ? $_POST['followed_email_subject'] : ''; $email_body = isset( $_POST['followed_email_body'] ) ? $_POST['followed_email_body'] : ''; $email_subject = $this->model->penci_bl_escape_slashes_deep( $email_subject ); $email_body = $this->model->penci_bl_escape_slashes_deep( $email_body, true, true );// limited html allowd $args = array(); $followers_count = ''; if ( $followed_type == "followed_post" ) {//check followed type is post $args['postid'] = $followed_type_post_name; $args['penci_bl_status'] = 'subscribe'; $data = $this->model->penci_bl_get_follow_post_users_data( $args ); $followers_count = count( $data ); foreach ( $data as $key => $value ) { $user_email = get_post_meta( $value['ID'], $prefix . 'post_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $user_email = $this->model->penci_bl_get_user_email_from_id( $value['post_author'] ); } $sentemail = $this->model->penci_bl_send_email( $user_email, $email_subject, $email_body ); } } elseif ( $followed_type == "followed_authors" ) {//check followed type is authors $args['authorid'] = $followed_type_author; $args['penci_bl_status'] = 'subscribe'; $data = $this->model->penci_bl_get_follow_author_users_data( $args ); $followers_count = count( $data ); foreach ( $data as $key => $value ) { $user_email = get_post_meta( $value['ID'], $prefix . 'author_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $user_email = $this->model->penci_bl_get_user_email_from_id( $value['post_author'] ); } $sentemail = $this->model->penci_bl_send_email( $user_email, $email_subject, $email_body ); } } // add action after send instant email notfication since 1.8.6 do_action( 'penci_bl_after_send_instant_mail_notification', $data ); if ( ! empty( $sentemail ) ) { //set session to set message for sent email set_transient( get_current_user_id() . '_penci_bl_sent_mail_message', sprintf( esc_html__( 'Mail sent successfully to %s followers.', 'penci-bookmark-follow' ), $followers_count ) ); wp_redirect( add_query_arg( array( 'penci-bf-sent-notification' => '1' ) ) ); exit; } } } /** * function to change wp query when there is post author is guest * * @package Penci Bookmark Follow * @since 1.6.1 */ public function penci_bl_follow_user_list_posts_where( $where ) { global $wpdb; if ( ( ( ! empty( $_GET['page'] ) && $_GET['page'] == 'penci-bf-post' && isset( $_GET['postid'] ) ) || ( ! empty( $_GET['page'] ) && $_GET['page'] == 'penci-bf-term' && isset( $_GET['termid'] ) && isset( $_GET['taxonomy'] ) ) || ( ! empty( $_GET['page'] ) && $_GET['page'] == 'penci-bf-author' && isset( $_GET['authorid'] ) ) ) && isset( $_GET['user'] ) && $_GET['user'] == 0 ) { $where .= ' AND ' . $wpdb->posts . '.post_author=' . $_GET['user']; } return $where; } /** * Validate current author. * * Current author should only able to see his list. If try to access other author list * then redirect to author list page * * @package Penci Bookmark Follow * @since 1.7.6 */ public function penci_bl_author_list_validate_author() { global $current_user; // Get current user roles $user_role = $current_user->roles; if ( isset( $_GET['authorid'] ) ) { if ( in_array( 'author', $user_role ) && $_GET['authorid'] != get_current_user_id() ) { $redirect_url = remove_query_arg( 'authorid' ); wp_redirect( $redirect_url ); exit; } } } /** * Get all post name * * Handle to get all post name * * @package Penci Bookmark Follow * @since 1.5.0 */ public function penci_bl_get_posts() { $args = array(); $html = ''; if ( isset( $_POST['posttype'] ) && ! empty( $_POST['posttype'] ) ) { $posttype = $_POST['posttype']; $data = new WP_Query( array( 'post_type' => $_POST['posttype'], 'posts_per_page' => - 1 ) ); $html .= ''; foreach ( $data->posts as $post ) { $html .= ''; } } echo $html; exit; } /** * Get all user name * * Handle to get all user name * * @package Penci Bookmark Follow * @since 1.5.0 */ public function penci_bl_get_users() { if ( isset( $_POST['post_id'] ) ) { $args = array( 'posts_per_page' => - 1, 'postid' => $_POST['post_id'], 'penci_bl_user_list_data' => true, ); $result_data = $this->model->penci_bl_get_follow_post_users_data( $args ); } if ( isset( $_POST['author_id'] ) ) { $args = array( 'posts_per_page' => - 1, 'authorid' => $_POST['author_id'], 'penci_bl_users_list_authors_data' => true, ); $result_data = $this->model->penci_bl_get_follow_author_users_data( $args ); } foreach ( $result_data['data'] as $data ) { $users[] = $data['post_author']; } $args = array( 'fields' => 'all_with_meta', ); if ( isset( $users ) && $users ) { $args['exclude'] = $users; } $user_list = get_users( $args ); $html = ''; foreach ( $user_list as $user ) { $html .= ''; } echo $html; exit; } /** * Save follow data * * Handle to save follow data * * @package Penci Bookmark Follow * @since 1.5.0 */ public function penci_bl_save() { if ( isset( $_POST['action'] ) && $_POST['action'] == 'penci_bl_save' ) { if ( isset( $_POST['postid'] ) ) { $this->public->penci_bl_follow_post(); } else if ( isset( $_POST['authorid'] ) ) { $this->public->penci_bl_follow_author(); } } exit; } /** * Export Posts Followers * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_export_all_posts( $args = array() ) { if ( isset( $_GET['export_posts_followers'] ) ) { global $penci_bl_model; $this->model = $penci_bl_model; $prefix = PENCI_BL_META_PREFIX; // Taking parameter $orderby = isset( $_GET['orderby'] ) ? urldecode( $_GET['orderby'] ) : 'date'; $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( trim( $_GET['s'] ) ) : null; //Check if passed post id if ( ! empty( $_GET['postid'] ) ) { $followpostslist = array( get_post( $_GET['postid'], 'ARRAY_A' ) ); } else { $args = array( 'orderby' => $orderby, 'order' => $order, 'posts_per_page' => - 1 ); //in case of search make parameter for retriving search data if ( isset( $search ) && ! empty( $search ) ) { $args['search'] = $search; } if ( isset( $_GET['penci_bl_post_type'] ) && ! empty( $_GET['penci_bl_post_type'] ) ) { $args['post_type'] = $_GET['penci_bl_post_type']; } $followpostslist = $this->model->penci_bl_get_follow_post_data( $args ); } if ( ! empty( $followpostslist ) ) { header( 'Content-type: text/csv' ); header( 'Content-Disposition: attachment; filename="followed_posts.csv"' ); header( 'Pragma: no-cache' ); header( 'Expires: 0' ); $file = fopen( 'php://output', 'w' ); fputcsv( $file, array( 'Post Name', 'User Email', 'User Type', 'Subscribed', 'User', 'Post Type' ) ); foreach ( $followpostslist as $key => $value ) { //Arguments for get followers $users_args = array( 'postid' => $value['ID'] ); //Passed other args if ( isset( $_REQUEST['penci_bl_status'] ) && ! empty( $_REQUEST['penci_bl_status'] ) ) { $users_args['penci_bl_status'] = $_REQUEST['penci_bl_status']; } $result_data = $this->model->penci_bl_get_follow_post_users_data( $users_args ); foreach ( $result_data as $user_key => $user_value ) { // get user email from meta field $user_email = get_post_meta( $user_value['ID'], $prefix . 'post_user_email', true ); // get user is subscribed or not $status = get_post_meta( $user_value['ID'], $prefix . 'follow_status', true ); $userdata = get_user_by( 'id', $user_value['post_author'] ); $user_email_html = ''; $user = ''; if ( ! empty( $userdata ) ) { // to display user display name $user_email = isset( $userdata->user_email ) ? $userdata->user_email : ''; $display_name = $userdata->display_name; if ( ! empty( $user_email ) ) { $user = $display_name; } $user_type = esc_html__( 'Registered User', 'penci-bookmark-follow' ); } else { $user = esc_html__( 'guest', 'penci-bookmark-follow' ); $user_type = esc_html__( 'Guest', 'penci-bookmark-follow' ); } $subscribed = $status == '1' ? esc_html__( 'Yes', 'penci-bookmark-follow' ) : esc_html__( 'No', 'penci-bookmark-follow' ); fputcsv( $file, array( $value['post_title'], $user_email, $user_type, $subscribed, $user, $value['post_type'] ) ); } } exit(); } } } /** * Export Authors Followers * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_export_all_authors( $args = array() ) { if ( isset( $_GET['export_authors_followers'] ) ) { global $penci_bl_model; $this->model = $penci_bl_model; $prefix = PENCI_BL_META_PREFIX; // Taking parameter $orderby = isset( $_GET['orderby'] ) ? urldecode( $_GET['orderby'] ) : 'date'; $order = isset( $_GET['order'] ) ? $_GET['order'] : 'DESC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( trim( $_GET['s'] ) ) : null; $args = array( 'orderby' => $orderby, 'order' => $order, 'posts_per_page' => - 1 ); //in case of search make parameter for retriving search data if ( isset( $search ) && ! empty( $search ) ) { $args['search'] = $search; } //Check if followers page if ( ! empty( $_GET['authorid'] ) ) { $args['post_parent'] = $_GET['authorid']; } //Get follow data $followauthorslist = $this->model->penci_bl_get_follow_author_data( $args ); if ( ! empty( $followauthorslist ) ) { header( 'Content-type: text/csv' ); header( 'Content-Disposition: attachment; filename="followed_authors.csv"' ); header( 'Pragma: no-cache' ); header( 'Expires: 0' ); $file = fopen( 'php://output', 'w' ); fputcsv( $file, array( 'Author Name', 'User Email', 'User Type', 'User', 'Subscribed' ) ); foreach ( $followauthorslist as $key => $value ) { //Get arguments for followers $users_args = array( 'authorid' => $value['post_parent'] ); $result_data = $this->model->penci_bl_get_follow_author_users_data( $users_args ); foreach ( $result_data as $user_key => $user_value ) { // get user email from meta field $user_email = get_post_meta( $user_value['ID'], $prefix . 'post_user_email', true ); // get user is subscribed or not $status = get_post_meta( $user_value['ID'], $prefix . 'follow_status', true ); $userdata = get_user_by( 'id', $user_value['post_author'] ); $authordata = get_user_by( 'id', $user_value['post_parent'] ); $user = ''; if ( ! empty( $userdata ) ) { // to display user display name $user_email = isset( $userdata->user_email ) ? $userdata->user_email : ''; $display_name = $userdata->display_name; if ( ! empty( $user_email ) ) { $user = $display_name; } $user_type = esc_html__( 'Registered User', 'penci-bookmark-follow' ); } else { $user = esc_html__( 'guest', 'penci-bookmark-follow' ); $user_type = esc_html__( 'Guest', 'penci-bookmark-follow' ); } $subscribed = $status == '1' ? esc_html__( 'Yes', 'penci-bookmark-follow' ) : esc_html__( 'No', 'penci-bookmark-follow' ); fputcsv( $file, array( $authordata->display_name, $user_email, $user_type, $user, $subscribed ) ); } } exit(); } } } /** * Delete from following list when delete Author. * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_delete_following_authors( $user_id = '' ) { if ( ! empty( $user_id ) ) { // check if user id is not empty $args = array( 'authorid' => array( $user_id ) ); //delete record from database $this->model->penci_bl_bulk_follow_author_delete( $args ); } } /** * Adding Hooks * * @package Penci Bookmark Follow * @since 1.0.0 */ public function add_hooks() { //add admin menu pages add_action( 'admin_menu', array( $this, 'penci_bl_add_admin_menu' ) ); //register settings in init add_action( 'admin_init', array( $this, 'penci_bl_admin_register_settings' ) ); //save post action add_action( 'save_post', array( $this, 'penci_bl_save_post' ), 10, 2 ); // For elementor, keep execution last as we need to clear saved meta add_action( 'save_post', array( $this, 'penci_bl_save_post_for_elementor' ), 9999, 2 ); //process bulk subscribe in admin init add_action( 'admin_init', array( $this, 'penci_bl_process_bulk_actions' ) ); //show admin notices add_action( 'admin_notices', array( $this, 'penci_bl_admin_notices' ) ); //AJAX call for post name add_action( 'wp_ajax_penci_bl_post_name', array( $this, 'penci_bl_post_name' ) ); add_action( 'wp_ajax_nopriv_penci_bl_post_name', array( $this, 'penci_bl_post_name' ) ); //AJAX call for follow category add_action( 'wp_ajax_penci_bl_terms', array( $this, 'penci_bl_terms' ) ); add_action( 'wp_ajax_nopriv_penci_bl_terms', array( $this, 'penci_bl_terms' ) ); //AJAX call for custom term name add_action( 'wp_ajax_penci_bl_custom_terms', array( $this, 'penci_bl_custom_terms' ) ); add_action( 'wp_ajax_nopriv_penci_bl_custom_terms', array( $this, 'penci_bl_custom_terms' ) ); // AJAX call to get all posts add_action( 'wp_ajax_penci_bl_get_posts', array( $this, 'penci_bl_get_posts' ) ); add_action( 'wp_ajax_nopriv_penci_bl_get_posts', array( $this, 'penci_bl_get_posts' ) ); // AJAX call to get all users add_action( 'wp_ajax_penci_bl_get_users', array( $this, 'penci_bl_get_users' ) ); add_action( 'wp_ajax_nopriv_penci_bl_get_users', array( $this, 'penci_bl_get_users' ) ); // AJAX call to save follow data add_action( 'wp_ajax_penci_bl_save', array( $this, 'penci_bl_save' ) ); add_action( 'wp_ajax_nopriv_penci_bl_save', array( $this, 'penci_bl_save' ) ); //AJAX call to get all terms add_action( 'wp_ajax_penci_bl_get_terms', array( $this, 'penci_bl_terms' ) ); add_action( 'wp_ajax_nopriv_penci_bl_get_terms', array( $this, 'penci_bl_terms' ) ); //delete all follow post when delete main post / page add_action( 'delete_post', array( $this, 'penci_bl_delete_main_post' ) ); //add meta in publish box add_action( 'post_submitbox_misc_actions', array( $this, 'penci_bl_publish_meta' ) ); // Add meta in publish box add_action( 'add_meta_boxes', array( $this, 'penci_bl_notification_meta_box' ), 10, 2 ); // add filter to change template design for default email template add_filter( 'penci_bl_email_template_default', array( $this, 'penci_bl_email_template_default' ), 10, 5 ); // add filter to change template design for plain email template add_filter( 'penci_bl_email_template_plain', array( $this, 'penci_bl_email_template_plain' ), 10, 5 ); //ajax call to send test email add_action( 'wp_ajax_penci_bl_test_email', array( $this, 'penci_bl_send_test_email' ) ); add_action( 'wp_ajax_nopriv_penci_bl_test_email', array( $this, 'penci_bl_send_test_email' ) ); //ajax call to search Authors add_action( 'wp_ajax_penci_bl_search_authors', array( $this, 'penci_bl_search_authors' ) ); add_action( 'wp_ajax_nopriv_penci_bl_search_authors', array( $this, 'penci_bl_search_authors' ) ); // ajax call to post load more add_action( 'wp_ajax_penci_bl_load_more', array( $this, 'penci_bl_load_more' ) ); add_action( 'wp_ajax_nopriv_penci_bl_load_more', array( $this, 'penci_bl_load_more' ) ); // ajax call to post load more add_action( 'wp_ajax_penci_bl_load_more_notification', array( $this, 'penci_bl_load_more_notification' ) ); add_action( 'wp_ajax_nopriv_penci_bl_load_more_notification', array( $this, 'penci_bl_load_more_notification' ) ); //send email add_action( 'init', array( $this, 'penci_bl_admin_send_email' ) ); // add filter to change query when to get guest user list add_filter( 'posts_where', array( $this, 'penci_bl_follow_user_list_posts_where' ), 10 ); // add action to redirect to author to his page, if trying to access other author page add_action( 'admin_init', array( $this, 'penci_bl_author_list_validate_author' ) ); // Add action to export followers posts/terms/authors add_action( 'admin_init', array( $this, 'penci_bl_export_all_posts' ) ); add_action( 'admin_init', array( $this, 'penci_bl_export_all_authors' ) ); // Delete following log item when delete user add_action( 'delete_user', array( $this, 'penci_bl_delete_following_authors' ) ); } }inc/css/chosen/chosen.css000064400000031207147600022000011347 0ustar00/*! Chosen, a Select Box Enhancer for jQuery and Prototype by Patrick Filler for Harvest, http://getharvest.com Version 1.1.0 Full source at https://github.com/harvesthq/chosen Copyright (c) 2011 Harvest http://getharvest.com MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md This file is generated by `grunt build`, do not edit it by hand. */ /* @group Base */ .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, 0.15); } .chosen-container.chosen-with-drop .chosen-drop { left: 0; } .chosen-container a { cursor: pointer; } /* @end */ /* @group Single Chosen */ .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%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-clip: padding-box; box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 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('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('chosen-sprite.png') no-repeat 0px 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: white url('chosen-sprite.png') no-repeat 100% -20px; background: url('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; } /* @end */ /* @group Results */ .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: bold; cursor: default; } .chosen-container .chosen-results li.group-option { padding-left: 15px; } .chosen-container .chosen-results li em { font-style: normal; text-decoration: underline; } /* @end */ /* @group Multi Chosen */ .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%, #eeeeee), color-stop(15%, #ffffff)); background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%); background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%); background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%); background-image: linear-gradient(#eeeeee 1%, #ffffff 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: 15px; 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%, #eeeeee)); background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-clip: padding-box; box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 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('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%, #eeeeee)); background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 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; } /* @end */ /* @group Active */ .chosen-container-active .chosen-single { border: 1px solid #5897fb; box-shadow: 0 0 5px rgba(0, 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%, #eeeeee), color-stop(80%, #ffffff)); background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%); background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%); background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%); background-image: linear-gradient(#eeeeee 20%, #ffffff 80%); box-shadow: 0 1px 0 #fff inset; } .chosen-container-active.chosen-with-drop .chosen-single div { border-left: none; background: transparent; } .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, 0.3); } .chosen-container-active .chosen-choices li.search-field input[type="text"] { color: #111 !important; } /* @end */ /* @group Disabled Support */ .chosen-disabled { opacity: 0.5 !important; cursor: default; } .chosen-disabled .chosen-single { cursor: default; } .chosen-disabled .chosen-choices .search-choice .search-choice-close { cursor: default; } /* @end */ /* @group Right to Left */ .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-container-single-nosearch .chosen-search, .chosen-rtl .chosen-drop { 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: white url('chosen-sprite.png') no-repeat -30px -20px; background: url('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; } /* @end */ /* @group Retina compatibility */ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) { .chosen-rtl .chosen-search input[type="text"], .chosen-container-single .chosen-single abbr, .chosen-container-single .chosen-single div b, .chosen-container-single .chosen-search input[type="text"], .chosen-container-multi .chosen-choices .search-choice .search-choice-close, .chosen-container .chosen-results-scroll-down span, .chosen-container .chosen-results-scroll-up span { background-image: url('chosen-sprite@2x.png') !important; background-size: 52px 37px !important; background-repeat: no-repeat !important; } } /* @end */inc/css/chosen/chosen-sprite.png000064400000000000147600022000012632 0ustar00inc/css/chosen/chosen-custom.css000064400000000613147600022000012654 0ustar00/* * Custom Changes For chosen CSS Styles * */ .chosen-container, .chosen-container-single .chosen-single{ min-width: 200px !important; } .chosen-container{ margin-right: 10px; } .chosen-drop { min-width: 210px !important; } .chosen-search input, .chosen-results { min-width: 200px !important; } .chosen-container-multi .chosen-choices .search-field input { height: 20px !important; }inc/css/chosen/chosen-sprite@2x.png000064400000000000147600022000013204 0ustar00inc/css/penci-bf-general-admin.css000064400000001440147600022000012771 0ustar00 /* Widget page CSS */ .wpwfp-desc{padding-left: 0 !important;} .toplevel_page_penci-bf-post{position: relative;} .penci-bf-menu-bubble{position: absolute;top: 9px;left: 133px;} #adminmenu .toplevel_page_penci-bf-post div.wp-menu-name{padding: 8px 10px 8px 0;} @media only screen and (max-width: 960px){ .auto-fold #adminmenu .toplevel_page_penci-bf-post{height: auto !important;} .toplevel_page_penci-bf-post .wp-submenu-head{word-wrap: break-word;white-space: unset;padding-right: 20px !important;} .toplevel_page_penci-bf-post .penci-bf-menu-bubble {position: absolute;top: 9px;right: 10px;left: auto;} } @media only screen and (max-width: 782px){ .penci-bf-menu-bubble {position: absolute;top: 15px;left: unset;right: 13px;} .toplevel_page_penci-bf-post .penci-bf-menu-bubble{top: 14px;} }inc/css/penci-bf-public.css000064400000047514147600022000011560 0ustar00.penci_bl_followers_message .penci-bf-tooltip-inner { display: inline-block; margin-left: 4px; } .penci-bf-display-none { display: none; } .message_stack_success, .message_stack_error { padding: 6px 20px; background-color: #ffa8a8 !important; font-size: 16px; font-weight: normal; margin-bottom: 10px; } .message_stack_success { background-color: #d3e69f !important; } @media only screen and (max-width: 380px) { #penci_bl_unsubscribe_email, #penci_bl_unsubscribe_submit { width: 100%; } } .penci-bf-follow-btn-wrapper button:hover, .penci-bf-follow-btn-wrapper button { padding: 0; background: transparent; line-height: inherit; text-transform: none; font-weight: inherit; font-size: inherit; color: var(--pcheading-cl); font-family: inherit; } .penci-bf-unsubscribe-email-error { display: none; } .penci-bf-btn { font-weight: bold !important; } /************************************** Pagination CSS Start *****************************************/ .penci-bf-paging { margin-top: 30px; text-align: center; } .penci-bf-paging .penci-bf-tablenav-pages { display: block; } .penci-bf-paging .penci-bf-tablenav-pages a, .penci-bf-tablenav-pages span.current, .penci-bf-tablenav-pages span.disabled { display: block; padding: 11px 10px; max-width: 400px; margin: 0 auto; border: 1px solid var(--pcborder-cl); line-height: 1.4; text-align: center; transition: all .25s; -webkit-transition: all .25s; background: #fff; } .penci-bf-paging .penci-bf-tablenav-pages a:hover { color: #fff; background: var(--pcaccent-cl); border-color: var(--pcaccent-cl); } .penci-bf-paging .penci-bf-tablenav-pages a.loading-posts i { animation-name: pencirotate; -o-animation-name: pencirotate; -ms-animation-name: pencirotate; -webkit-animation-name: pencirotate; -moz-animation-name: pencirotate; animation-duration: 0.8s; -o-animation-duration: 0.8s; -ms-animation-duration: 0.8s; -webkit-animation-duration: 0.8s; -moz-animation-duration: 0.8s; animation-iteration-count: infinite; -o-animation-iteration-count: infinite; -ms-animation-iteration-count: infinite; -webkit-animation-iteration-count: infinite; -moz-animation-iteration-count: infinite; animation-timing-function: linear; -o-animation-timing-function: linear; -ms-animation-timing-function: linear; -webkit-animation-timing-function: linear; -moz-animation-timing-function: linear; } .penci-bf-paging .penci-bf-tablenav-pages a.loading-posts span.ajaxdot:after { content: "..."; font-size: inherit; color: inherit; font-family: inherit; font-weight: inherit; } /************************************** Pagination CSS End *****************************************/ table.penci-bf-follow-post-table, table.penci-bf-follow-term-table, table.penci-bf-follow-author-table { width: 100%; } tr.penci-bf-follow-post-row-head, tr.penci-bf-follow-post-row-foot, tr.penci-bf-follow-term-row-head, tr.penci-bf-follow-term-row-foot, tr.penci-bf-follow-author-row-head, tr.penci-bf-follow-author-row-foot { background-color: var(--pcbg-cl); } @media only screen and (max-width: 767px ) { tr.penci-bf-follow-post-row-head, tr.penci-bf-follow-post-row-foot, tr.penci-bf-follow-term-row-head, tr.penci-bf-follow-term-row-foot, tr.penci-bf-follow-author-row-head, tr.penci-bf-follow-author-row-foot { font-size: 12px; } } tr.penci-bf-follow-author-row-body td { padding: 8px 10px; } tr.penci-bf-follow-author-row-body td img { vertical-align: middle; } th.penci-bf-cb-posts input[type="checkbox"], th.penci-bf-cb-terms input[type="checkbox"], th.penci-bf-cb-author input[type="checkbox"] { margin: 8px 0 0 9px; } tr th.penci-bf-cb-authors input[type="checkbox"], tr.penci-bf-follow-post-row-body td input[type="checkbox"], tr.penci-bf-follow-term-row-body td input[type="checkbox"], tr.penci-bf-follow-author-row-body td input[type="checkbox"] { margin-left: 9px !important; } .penci-bf-follow-post-table th, .penci-bf-follow-term-table th, .penci-bf-follow-author-table th { padding: 8px 0; } .penci-bf-follows .penci-bf-follow-author-table .penci-bf-picture img { border-radius: 50%; } .penci-bf-follow-post-table td, .penci-bf-follow-term-table td, .penci-bf-follow-post-table th, .penci-bf-follow-term-table th, .penci-bf-follow-post-table th, .penci-bf-follow-author-table th { vertical-align: middle; } .penci-bf-bulk-action-wrapper { margin: 10px 0 30px; display: flex; flex-wrap: wrap; justify-content: space-between; } .penci-bf-bulk-action-wrapper .penci-bf-bulk-action { max-width: 220px; } .penci-bf-bulk-action-wrapper .penci-bf-btn { padding: 2px 15px; } .penci-bf-bulk-action-loader { margin-left: 5px; margin-top: 5px; } .penci-bf-no-record-message { margin-top: 25px; margin-bottom: 40px; clear: both; border: 1px solid var(--pcborder-cl); padding: 12px 20px; font-size: 15px; } .penci-bf-unsubscribe-table td { border: none; } tr.penci-bf-follow-author-row-body td, tr.penci-bf-follow-term-row-body td, tr.penci-bf-follow-post-row-body td { vertical-align: middle; } .wps_fmbp_common_vertical_align { vertical-align: top; } .penci_bl_add_follower_error_second { padding: 0 10px; } .followed_guest_user { width: 23%; } .penci_bl_common_display_none_class { display: none; } .penci-bf-follow-post-wrapper { display: none; } .penci-bf-follow-term-wrapper, .penci-bf-follow-post-wrapper { position: absolute; top: 10px; right: 10px; z-index: 99; } .penci-bf-follow-term-wrapper { z-index: 999; } body.rtl .penci-bf-follow-term-wrapper, body.rtl .penci-bf-follow-post-wrapper { right: auto; left: 10px; } .penci-bf-follow-term-wrapper .pencibf-following-text, .penci-bf-follow-post-wrapper .pencibf-following-text { font-size: 0; } .pcsb-meta .penci-bf-follow-post-wrapper .pencibf-following-text { font-size: inherit; } .penci-bf-follow-term-wrapper .pencibf-following-text:before, .penci-bf-follow-post-wrapper .pencibf-following-text:before { content: '\f02e'; font-family: 'FontAwesome'; font-size: 16px; z-index: 10; width: 32px; height: 32px; line-height: 32px; border: 1px solid #fff; color: #fff; text-align: center; border-radius: 50%; display: inline-block; transition: background 0.3s, border 0.3s, opacity 0.3s; background: rgba(0, 0, 0, 0.2); vertical-align: top; animation: unset; } .penci-bf-follow-term-wrapper .pencibf-following-text:hover:before, .penci-bf-follow-post-wrapper .pencibf-following-text:hover:before, .penci-bf-follow-term-wrapper .penci-bf-following-button .pencibf-following-text:before, .penci-bf-follow-post-wrapper .penci-bf-following-button .pencibf-following-text:before { background-color: var(--pcaccent-cl); border-color: var(--pcaccent-cl); color: #fff; cursor: pointer; } .penci-bf-follow-term-wrapper .pencibf-following-text:hover:before, .penci-bf-follow-post-wrapper .pencibf-following-text:hover:before { opacity: 0.8; } .penci-bf-follow-term-wrapper.loading .pencibf-following-text:before, .penci-bf-follow-author-wrapper.loading .pencibf-following-text:before, .post-box-meta-single .penci-bf-follow-post-wrapper.loading .pencibf-following-text:before, .penci-bf-follow-post-wrapper.loading .pencibf-following-text:before { font-family: inherit !important; line-height: 0; display: inline-block; content: " " !important; animation: lds-dual-ring 0.4s linear infinite; vertical-align: top; width: 32px; height: 32px; opacity: 1; border: 1px solid #999; border-top-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); border-top-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); border-left-color: #fff; border-top-color: #fff; border-radius: 50%; background: transparent; } .item-related .penci-bf-follow-post-wrapper { top: 10px; right: 20px; } body.rtl .item-related .penci-bf-follow-post-wrapper { right: auto; left: 20px; } .penci-bf-follow-term-wrapper.pcbf-size-small, .penci-bf-follow-post-wrapper.pcbf-size-small { top: 5px; right: 5px; } .penci-bf-follow-post-wrapper.pcbf-size-small.has-review + .penci-rv-sm-show { top: auto; bottom: 5px; } .penci-bf-follow-term-wrapper.pcbf-size-small .pencibf-following-text:before, .penci-bf-follow-post-wrapper.pcbf-size-small .pencibf-following-text:before { width: 26px; height: 26px; line-height: 26px; font-size: 14px; } .penci-bf-follow-term-wrapper.pcbf-size-small.loading .pencibf-following-text:before, .penci-bf-follow-post-wrapper.pcbf-size-small.loading .pencibf-following-text:before { width: 26px; height: 26px; } .post-box-meta-single .penci-bf-follow-post-wrapper.loading .pencibf-following-text:before { width: 10px; height: 10px; margin: -3px 5px 0 0; vertical-align: middle; } .penci-bf-follow-post-wrapper.has-review + .penci-rv-sm-show { top: auto; bottom: 15px; } .grid-overlay-meta .penci-bf-follow-post-wrapper.has-review + .penci-rv-sm-show { bottom: 45px; } .penci-bf-follow-post-wrapper.pcbf-size-small.has-review + .penci-rv-sm-show { bottom: 5px; right: 5px; top: auto; } body.rtl .penci-mega-thumbnail .penci-bf-follow-post-wrapper.pcbf-size-small.has-review + .penci-rv-sm-show { right: auto; left: 7px; } body.rtl .penci-mega-post .penci-bf-follow-post-wrapper { right: auto; left: 7px; } .post-entry .penci-bf-follow-post-table td, .post-entry .penci-bf-follow-post-table th, .post-entry .penci-bf-follow-post-table .penci-bf-follow-btn-wrapper button { padding-left: 0; padding-right: 0; min-width: unset; } .post-entry .penci-bf-follow-author-table thead th, .post-entry .penci-bf-follow-author-table tfoot th, .post-entry .penci-bf-follow-author-table tbody td, .post-entry .penci-bf-follow-post-table thead th, .post-entry .penci-bf-follow-post-table tfoot th, .post-entry .penci-bf-follow-post-table tbody td { padding-left: 20px; padding-right: 20px; } .archive-box .pencibf-unfollowing-text, .archive-box .pencibf-following-text { font-size: 12px; vertical-align: middle; } .penci-owl-featured-area .item { position: relative; } .post-box-meta-single .penci-bf-follow-post-wrapper { position: static; } .post-box-meta-single .penci-bf-follow-post-wrapper .pencibf-following-text:before { content: '\f02e'; font-family: 'FontAwesome'; display: inline-block; margin: 0 5px 0 0; padding: 0; border: 0; font-size: inherit; line-height: inherit; width: unset; height: unset; background: transparent; color: inherit !important; vertical-align: middle; } .post-box-meta-single .penci-bf-follow-post-wrapper .pencibf-following-text:hover:before, .post-box-meta-single .penci-bf-follow-post-wrapper .penci-bf-following-button .pencibf-following-text:before { background: transparent; color: inherit; } body.rtl .penci-bf-follow-author-wrapper .penci-bf-following-button .pencibf-following-text:before, body.rtl .post-box-meta-single .pencibf-following-text:before { margin: 0 0 0 5px; vertical-align: baseline; } body.rtl .penci-bf-follow-author-wrapper .penci-bf-following-button .pencibf-following-text:before { float: right; } .penci-bf-follow-author-wrapper .penci-bf-following-button .pencibf-following-text:before, .post-box-meta-single .penci-bf-following-button .pencibf-following-text:before, .post-box-meta-single .pencibf-following .pencibf-following-text:before { content: '\f00c'; font-family: 'FontAwesome'; } .penci-bf-follow-author-wrapper .penci-bf-following-button .pencibf-following-text:before { margin: 0 5px 0 0; } .penci-bf-follow-post-row-body .penci-bf-follow-post-wrapper.loading .pencibf-following-text:before, .penci-pf-post-imported button.loading:before, .penci-pf-author-imported button.loading:before, .penci-bf-follow-author-wrapper.loading .pencibf-following-text:before { width: 8px; height: 8px; margin-right: 5px; vertical-align: middle; } body.rtl .penci-bf-follow-post-row-body .penci-bf-follow-post-wrapper.loading .pencibf-following-text:before, body.rtl .penci-pf-post-imported button.loading:before, body.rtl .penci-pf-author-imported button.loading:before, body.rtl .penci-bf-follow-author-wrapper.loading .pencibf-following-text:before { margin-right: 0; margin-left: 5px; } body.rtl .post-box-meta-single .penci-bf-follow-post-wrapper.loading .pencibf-following-text:before { margin: -3px 0 0 5px; } .penci-bf-follow-author-wrapper button, .penci-bf-follow-author-wrapper button:hover { display: inline-block; padding: 5px 10px; border: 1px solid var(--pcaccent-cl); color: var(--pcaccent-cl); font-size: 12px; line-height: 1; transition: all 0.3s; font-family: var(--pchead-font); font-weight: var(--pchead-wei); } .penci-bf-follow-author-wrapper .penci-bf-following-button, .penci-bf-follow-author-wrapper button:hover { background: var(--pcaccent-cl); color: #fff; } .penci-pf-post-thumbnail img, .post-entry .penci-pf-post-thumbnail img { max-width: 75px; height: auto; } .penci-pf-saved-confirm { padding: 30px; border: 1px solid var(--pcborder-cl); margin: 0 0 30px; text-align: center; background: #f1f1f1; } .penci-pf-saved-confirm .cancel { background: #333; color: #fff; } #penci-header-bookmark { margin-left: 5px; } body.rtl #penci-header-bookmark { margin-left: 0; margin-right: 5px; float: left; } .penci-bf-unsubscribe-table, .penci-bf-unsubscribe-table tr, .penci-bf-unsubscribe-table td { border: 0 !important; } .penci-bf-unsubscribe-form { max-width: 650px; margin-left: auto; margin-right: auto; } .penci-bf-unsubscribe-table { display: flex; flex-wrap: wrap; flex-direction: row; justify-content: space-between; } .penci-bf-email-field { width: 75%; padding-right: 15px; } body.rtl .penci-bf-email-field { padding-right: 0; padding-left: 15px; } .penci-bf-submit-field { width: 25%; } .penci-bf-email-field input[type="text"], .penci-bf-submit-field .penci-bf-btn { padding: 0 20px; font-size: 16px; line-height: 46px; } .penci-bf-submit-field .penci-bf-btn { display: block; width: 100%; line-height: 48px; } .penci-bf-manage-follow-terms .pcsl-inner .pcsl-iteminer, .penci-bf-manage-follow-posts .pcsl-inner .pcsl-iteminer { align-items: center; } .penci-bf-manage-follow-terms .pcsl-inner .pcsl-content, .penci-bf-manage-follow-posts .pcsl-inner .pcsl-content { padding: 10px 10px 10px var(--pcsl-between); } .penci-bf-manage-follow-terms .pcsl-inner .pcsl-thumb { width: 49%; } .penci-bf-manage-follow-terms .pcsl-inner .pcsl-content { width: 51%; } body.rtl .penci-bf-manage-follow-posts .pcsl-inner .pcsl-content { padding: 10px var(--pcsl-between) 10px 10px; } .penci-bf-manage-follow-terms .pcsl-itemin, .penci-bf-manage-follow-posts .pcsl-itemin { border: 1px solid var(--pcborder-cl); } @media only screen and (max-width: 767px) { .penci-bf-email-field, .penci-bf-submit-field { width: 100%; padding: 0; } .penci-bf-submit-field { margin-top: 20px; } } .penci-bf-manage-follow-authors { margin-top: 40px; } html body .jq-toast-wrap { width: 370px; } html .jq-toast-single .pencpf-popup-mess { overflow: hidden; font-size: 13px; } html .jq-toast-single .pencpf-popup-mess a { font-weight: inherit; font-size: inherit; border: 0; padding: 0; } .jq-toast-wrap .pencpf-popup-mess-wrapper { display: flex; flex-wrap: wrap; flex-direction: row; margin: -20px; background: var(--pcbg-cl); } .jq-toast-wrap .pencpf-popup-mess-wrapper .pencpf-popup-thumb { width: 100px; height: 100px; border: 0; background-repeat: no-repeat; background-position: center center; background-size: cover; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; } .jq-toast-wrap .pencpf-popup-mess-wrapper .pencpf-popup-ct-area { width: calc(100% - 100px); padding: 10px 15px; color: var(--pctext-cl); display: flex; flex-wrap: wrap; align-content: center; } body.rtl .jq-toast-wrap .pencpf-popup-mess-wrapper .pencpf-popup-ct-area { text-align: right; } .jq-toast-wrap .pencpf-popup-mess-wrapper .pencpf-popup-ct-area .pencpf-popup-mess-title { color: var(--pcaccent-cl); font-family: var(--pchead-font); font-weight: var(--pchead-wei); font-size: 16px; display: inline-block; overflow: hidden; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; margin-bottom: 6px; } html .jq-toast-wrap span.close-jq-toast-single { font-size: 22px; top: 8px; opacity: 0.6; } .post-author .penci-bf-follow-author-wrapper { margin-bottom: 15px; margin-top: -5px; } .penci-bf-follow-author-table .penci-bf-picture { width: 15%; } .penci-bf-follow-author-table .penci-bf-col-2 { width: 25%; } .penci-bf-follow-author-table .penci-bf-col-action { width: 40%; } .penci-bf-follow-term-table .penci-bf-follow-term-wrapper { position: static; } @media only screen and (max-width: 767px) { .penci-bf-follow-author-table-container { overflow-x: auto; } .penci-bf-follow-author-table-container table { min-width: 490px; } .penci-bf-follow-author-table .penci-bf-picture { width: 10%; } .penci-bf-follow-author-table .penci-bf-col-2 { width: 25%; } .penci-bf-follow-author-table .penci-bf-col-action { width: 55%; } .penci-bf-follow-author-table .penci-bf-col-date { min-width: 120px; } .post-entry .penci-bf-follow-author-table thead th, .post-entry .penci-bf-follow-author-table tfoot th, .post-entry .penci-bf-follow-author-table tbody td, .post-entry .penci-bf-follow-post-table thead th, .post-entry .penci-bf-follow-post-table tfoot th, .post-entry .penci-bf-follow-post-table tbody td { padding-left: 5px; padding-right: 5px; } } .penci-bf-term-page { clear: both; margin-top: 15px; } .post-entry .penci-bf-follow-term-table td, .post-entry .penci-bf-follow-term-table th { padding-left: 20px; padding-right: 20px; } body.rtl .penci-bf-follow-post-wrapper.pcbf-size-small { right: auto; left: 5px; } body.rtl .penci-bf-follow-post-wrapper.pcbf-size-small.has-review + .penci-rv-sm-show { right: auto; left: 5px; } body.rtl .close-jq-toast-single { left: 7px; right: auto; } .archive-box .penci-bf-follow-term-wrapper { position: static; margin: 15px 0 -10px; } .archive-box .penci-bf-follow-term-wrapper .pencibf-following-text:before { width: auto; height: auto; border: 0; background: transparent; color: inherit; font-size: inherit; line-height: inherit; margin-right: 5px; vertical-align: middle; } .archive-box .penci-bf-follow-term-wrapper.loading .pencibf-following-text:before { width: 13px; height: 13px; border: 1px solid #999; border-top-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); border-top-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); border-left-color: #fff; border-top-color: #fff; } .archive-box .penci-bf-follow-term-wrapper button span{ display: inline-block; padding: 5px 11px; border: 1px solid var(--pcaccent-cl); color: var(--pcaccent-cl); font-size: 13px; line-height: 1; transition: all 0.3s; font-family: var(--pchead-font); font-weight: var(--pchead-wei); text-transform: none; } .archive-box .penci-bf-follow-term-wrapper .penci-bf-following-button span, .archive-box .penci-bf-follow-term-wrapper button:hover span{ color: #fff; background: var(--pcaccent-cl); } .archive-box .penci-bf-follow-term-wrapper .penci-bf-following-button .pencibf-following-text:before { content: '\f00c'; }inc/css/penci-bf-admin.css000064400000023115147600022000011361 0ustar00.fldset { border: 1px solid rgb(221, 221, 221); padding-bottom: 10px; margin-top: 10px; } .lgnd { margin-left: 5px; padding: 0pt 5px; color: rgb(36, 129, 198); } .penci-bf-save-btn { float: right; } .penci_bl_page_link { float: right; padding-top: 20px; } .penci_bl_clear_both { clear: both; } .penci_bl_top_down { height: 10px; } .penci_bl_view { float:left; width:100px; font-weight: bold; } .penci_bl_right{ float: right; } .pencibf-logo{ float: left; margin: 0px 10px 0 0; } .penci_bl_indvisual li a, .penci_bl_indvisual li label { margin-left:5px } .penci_bl_indvisual li label { vertical-align:top } .penci_bl_indivisual_entries_data { margin:auto; display:none; position:fixed; top:10%; left:25%; width:600px; height:450px; border:2px solid #E4E4E4; padding:0px 30px; background-color:white; z-index:9999; overflow:auto } .penci_bl_indivisual_entries_data ul li { float: left; margin-right: 20px; width: 46%; } .penci_bl_indivisual_submit { float:right; margin-top:10px; min-height:50px } .penci_bl_indivisual_title { float:left; width:50%; min-height:50px; margin-bottom: 10px; } .penci_bl_indivisual_header { margin-top:10px } .penci_bl_overlay { display:none; position:fixed; top:0%; left:0%; width:100%; height:100%; background-color:black; z-index:1001; -moz-opacity:0.7; opacity:.70; filter:alpha(opacity=70) } .penci-bf-reset-wrapper { margin: 5px 0 15px; } .penci-bf-checkbox-label { margin-left: 5px; } #export_posts_followers, #export_terms_followers, #export_authors_followers { margin-bottom: 7px; } /** Settings Page Tabs Start **/ .penci-bf-selected-tab { display: block !important; } .penci-bf-content{ padding: 11px; } .penci-bf-tab-content, .penci-bf-social-none { display:none; } .penci-bf-content-section .nav-tab-wrapper a { outline: 0 !important; } .penci-bf-content-section span.description{ line-height:22px; } .penci-bf-h2 { width: 98%; } /** Settings Page Tabs End **/ .penci-bf-success-msg { background-color: #FFFFE0; border: 1px solid #E6DB55; margin: 10px; moz-border-radius: 3px; webkit-border-radius: 3px; border-radius: 3px; } .penci-bf-success-msg p { margin: 0.5em 0; padding: 2px 10px; } /********** CSS for Shortcode Popup Starts ***********/ .penci-bf-popup-content { margin: 0 auto; min-height: 370px; display: none; position: absolute;/* fixed*/ border: 1px solid #555555; top: 1%; text-align: left; left: 0%; right: 0%; max-width: 870px; background: none repeat scroll 0 0 #FFFFFF; z-index:10002; overflow: auto; font-size: 13px; box-shadow: 0 4px 30px #000000; color: #000000; /*height: 460px;*/ } .penci-bf-popup-content .description { margin-left: 0px !important } .penci-bf-popup-overlay { display: none; background-color: #000000; height: 100%; left: 0; opacity: 0.75; position: fixed; top: 0; width: 100%; z-index: 9999; } .penci-bf-header-title { float: left; padding: 6px 10px 0; } .penci-bf-popup-close { float: right; padding: 6px 10px 0; text-align: right; } .penci-bf-header { background-color: #222222; color: #CFCFCF; min-height: 29px; position: relative; width: auto; } .penci-bf-popup { padding: 10px 15px; } .penci-bf-popup table.form-table { margin-top : 0 !important; width: 100%; } #penci_bl_shortcode_error, .wpwfp-select-error { color: red; } #penci_bl_insert_container { margin: 15px; } #penci_bl_shortcode_error, #penci_bl_insert_container, .penci-bf-shortcodes-options { display: block; } /***************** CSS for Shortcode Popup Ends******************/ .penci-bf-display-none { display: none; } .penci-bf-post-select-wrap, .penci-bf-taxonomy-select-wrap { float: left; } #penci_bl_term_taxonomy { float: left; } .penci-bf-follow-loader { display: none; float: left; margin-top: 5px; margin-left: 5px; } .penci-bf-form select { width: 150px; } /***************** Customize Chosen CSS Start *******************/ .chzn-select { width: 200px; } .tablenav .actions { overflow: visible; } .tablenav .button { margin-left: 3px !important; } .alignleft.actions .chzn-container-single { display: inline-block; vertical-align: middle; } .chzn-search input { width: 100% !important; } /***************** Customize Chosen CSS End ********************/ #penci_bl_enable_email_notify { margin-left: 5px; } .penci_bl_preview_follow_email { display: none; } .penci-bf-preview-follow-email, .penci-bf-send-test-email { outline: 0 !important; } .penci-bf-loader { display: none; margin-left: 5px; } .penci-bf-preview-popup { display: none; } .penci-bf-send-email-msg { display: none; margin-left: 5px; } .penci-bf-email-success, .penci-bf-success-message { color: #00A200; } .penci-bf-email-error { color: #CC0000; } .penci-bf-tab-content .mceLayout .mceIframeContainer{ background-color:#FFFFFF !important; } .penci-bf-tab-content .mceLayout .mceIframeContainer iframe, .penci-bf-tab-content .wp-editor-container textarea.wp-editor-area{ height:200px !important; } .penci_bl_author_name{ width:200px; } .penci_bl_email_error, .penci_bl_add_follower_error{ color:red; } #penci_bl_notification_meta h2.hndle.ui-sortable-handle span { font-size: 12px; } #penci_bl_notification_meta .inside .misc-pub-section { padding: 0 5px; } /***************** Extensions CSS Start ********************/ .penci-bf-extensions-main {display: block;width: 100%;text-align: left;} .penci-bf-extension-main-title {margin-top: 15px;} .penci-bf-extension-main-title h2 {display: inline-block;vertical-align: top;margin: 2px 10px 11px 10px;} .penci-bf-available-extensions-inner-box {background: #fff;vertical-align: top;display: inline-block;border: 1px solid #e2e2e2;padding: 15px;text-align: left;} .penci-bf-available-extensions-inner-box h3 {line-height: 1.6;} .penci-bf-available-extensions-inner-box.penci-bf-schedule-emails {width: 46%;margin-right: 50px;max-width: 370px;} .penci-bf-available-extensions-inner-box.penci-bf-sms-notifications{width: 46%;max-width: 370px;} .penci-bf-available-extensions-inner-box img.penci-bf-extensions-thumbnail {margin: 0 auto;width: 100%;display: block;margin-bottom: 15px;transition: all 0.5s;-webkit-transition: all 0.5s;-moz-transition: all 0.5s;-o-transition: all 0.5s;} #toplevel_page_penci-bf-post .wp-menu-name {white-space: unset;padding-right: 10px !important;} /* Media Query */ @media screen and (max-width: 1400px){ .penci-bf-available-extensions-inner-box.penci-bf-schedule-emails,.penci-bf-available-extensions-inner-box.penci-bf-sms-notifications{width: 42%;max-width: 370px;} .penci-bf-available-extensions-inner-box .penci-bf-action-links .button {height: 29px;line-height: 24px;} .penci-bf-available-extensions-inner-box h3{min-height: 55px;} } @media screen and (max-width: 992px){ .penci-bf-extensions-main{text-align: center;} .penci-bf-available-extensions-inner-box.penci-bf-schedule-emails,.penci-bf-available-extensions-inner-box.penci-bf-sms-notifications{width: 41%;} } @media screen and (max-width: 782px){ .penci-bf-available-extensions-inner-box .penci-bf-action-links .button {height: 29px;line-height: 14px;} } @media screen and (max-width: 767px){ .penci-bf-available-extensions-inner-box.penci-bf-schedule-emails {width: 100%;max-width: 400px;margin:0 auto 20px;display: block;} .penci-bf-available-extensions-inner-box.penci-bf-sms-notifications {width: 100%;max-width: 400px;margin:0 auto;display: block;} .penci-bf-available-extensions-inner-box h3 {min-height: auto;} /* inline css start 18-05-2019 */ .penci_bl_indivisual_entries_data ul li { width: 100%; } .penci_bl_indivisual_entries_data { left: 50%; width: 215px; transform: translateX(-50%); } /* inline css end 18-05-2019 */ } @media screen and (max-width: 500px){ .penci-bf-available-extensions-inner-box.penci-bf-schedule-emails {width: auto;max-width: 400px;margin:0 auto 20px;display: block;} .penci-bf-available-extensions-inner-box.penci-bf-sms-notifications {width: auto;max-width: 400px;margin:0 auto;display: block;} .penci-bf-extension-main-title h2{display: inherit;} } /***************** Extensions CSS End ********************/ .wps-metabox-wrapper label { cursor: auto !important; } /* inline css start 18-05-2019 */ .wps_fmbp_common_vertical_align{ vertical-align: top; } .penci_bl_add_follower_error_second{ padding:0 10px; } .followed_guest_user{ width: 23%; } .penci_bl_common_display_none_class{ display: none; } .custom_css_class{ width:100%;min-height:100px; } .upload_files_class{ margin-bottom: 10px } /* inline css end 18-05-2019 */ /* Css 12/07/2019 */ .penci-bf-load_more-container{ float:left; width:100%; text-align:center; } .penci-bf-load_more-container .penci-bf-load_more, .penci-bf-load_more-container .penci-bf-load-more-notification{ margin:20px 40%; border: 1px solid #0085ba; padding: 7px 11px; float: left; border-radius: 5px; text-decoration: none } .penci-bf-load_more-spinner, .penci-bf-load-more-notification-spinner{ margin: 0; margin-left: 3px; width: 0px; } /* for meta-box-sortables WP Version 5.5.1 */ #wpbody-content .content.penci-bf-content-section .penci-bf-content .meta-box-sortables .handlediv, #wpbody-content #penci-bf-general.post-box-container .meta-box-sortables .handlediv{ float: right; } #wpbody-content .content.penci-bf-content-section .penci-bf-content .meta-box-sortables .postbox .hndle, #wpbody-content .content.penci-bf-content-section .penci-bf-content .meta-box-sortables .stuffbox .hndle, #wpbody-content #penci-bf-general.post-box-container .meta-box-sortables .postbox .hndle, #wpbody-content #penci-bf-general.post-box-container .meta-box-sortables .stuffbox .hndle{ border-bottom: 1px solid #ccd0d4; } inc/images/prettyPhoto/dark_rounded/loader.gif000064400000004761147600022000015520 0ustar00GIF89aô222ÿÿÿXXX555JJJpppCCC‹‹‹]]]€€€PPPwwwccc;;;ŸŸŸ’’’jjjªªª!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù ,® Ž$AeZ ù<ä ’„ÃŒQ46„<‹A” ߈áHa¡¡:’êID0ÄF„Ãa\xGƒ3€×!Ä ßO:-‡‚Rj—TJ‚ƒ* ƒ t †ˆŠŒŽ„—~—" ds]š  š)t–¥-"–i;H>³n§Qg]_* ‹ ®R±3 ÁGI? ÎË´¨v$ý›j3!!ù ,° Ž$À0eZy¤0¨£q £ãŒP¤Ð£W  )"; qXˆ^ÏD50‡† Ո̢%‹`‹£ÔrÏJ{ 1‡ºÍ$ʈ…‡!!ù ,´ Ž$@eš6$‚Æ Ž`Œ 3*Å=‹  …ßÈ Pˆ\"FÁ©’í²`PÐ-­ƒÓÐd5VÁ"2Ÿ|?n"!( ¸Š‘€è•)e€„4xyc?   ‡‰3‹…™™ ”#wyJ l% o€^[b_0 V T[0mœ $ƒ4 >„'VZ ¨cη3ƒÆ$Xš¼%!!ù ,­ Ž$`eš¤¢¨:D3 ÂH0¶,'j0¾Qƒs‰ ‚L(2HM¨Òj#Ðȉ…BŒ \Oéi`u§†=YŒù€EVL=I  ƒ…>‡‰‹•• suI WJm| \"_…b0 B¦ cV"d]*K1" H|@B?ÀI4…È#  S$¿-|¶|!!ù ,¯ Ž$Ð4eš¤a¨:D Äh¶Œ³·œI Á/€K¤$W-á 0(`3œÍÑFãÙÀ=±pf@ïýtéøQ£ìÉ  {f~*€‚„yS*mg) ”enu E^Z^ g@ kw(b& -w#"º xW"¼t #Ç#”%U$Ë`¶t±o!!ù ,´ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–<Îp6%tP5Ù¡êS|ÉîØH(²FÕ¯›c¸Œ€`05xz*|~€v‰G„0t#  F hŽ0  #C d 1  I¢#(i - “ À uEL q ³Ì" h%±$Â$<Š·q!!ù ,­ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–Îp6%tPÝñt¸ª¯é„5Å©3ÔÈn»G$ò€´ @aˆÏëwy{hoFS>k#  F Y" Š% E  Cb AI4$ (z¤:2• mI L½l#Æ# ¦F­#É#š>²F!!ù ,² Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨©ŠVñtKG‚ˆ22ôëŽ7‚D"¯ªé$)‘„±é•Qø¼Šqp8 y l |~€‚„6zw2j# F Œ" ’% VŸC œ ]¥6a$¡ Q ª:2 \  EF I—&Ãx ¯"Í“¬F4$Ð]#¸x!!ù ,³ Ž$Ð4eZiä ’J16„<‹ŽˆB” Š?$r½œTêHzDP'"lä(†1±5–y½Ãá8tg†œ—p,’qÛ”Múÿ*   q ‚„†ˆŠŒ€”"}•# b?y{ {)Šs -s­:–9>e ¤E,C\3 ‡^·3[ ¬ž¾¸°S·Ä|˜»²?!;inc/images/prettyPhoto/dark_rounded/contentPattern.png000064400000000202147600022000017263 0ustar00‰PNG  IHDR‰ tEXtSoftwareAdobe ImageReadyqÉe<$IDATxÚbd``ØÏ@EÀÄ@e0jਣŽ8jàP1 À:ßçˆoÁ2IEND®B`‚inc/images/prettyPhoto/dark_rounded/sprite.png000064400000007754147600022000015604 0ustar00‰PNG  IHDR‚wÏ\˜WtEXtSoftwareAdobe ImageReadyqÉe<ŽIDATxÚì]mlÇ›Ã@ æÓ|‚!&‰Ãw€F|Æ|—(•’ ñ©J¥T%ªbªþH¤$jRa!Ѥù‘*´E cPˆIµ¢€ 0N¬0 !¦ï3ž¹Œ'³w»{»w·wóJ£ÛÛ}gvÞgÞ¯›+xøð!³d)¶}ûvÇ‹“'OžB˨̣2Ê„€Ú(>ï¤ã!v”îînvÿþýÂï¿ÿ¾Ê?üPðàÁƒ.Q­…êüê4P9¸mÛ¶Ó555y3K èaM(£40¯Ð ”ae‰IÀF`€øyùL………¼ \¡²›ê×RÝKy¡ ¨¤×iàVa°00±X,>PQÐÕÕÅ€Oý™p¬j Ô'pL ó(**šM—Þ¹{÷@@ƒñ ƳøÞ·o߸ðå€E $Dvûömý™âjQ<>Iøq BÚàT·dÀ€[s 1Í@<+g (ÊæàÞ½{ìÎ;ê3I­ Ö׺B;Ì¥ã×ûõë×Lü.ç*Ô©±怣#‹ôCA°ð  ¤&ÏD³›=úè£Ì)Z4h¯£ÞC¼~Ù§OŸ9¯Ç?¼ÛRÎ: 8f ëß¿?W¿ø¢™ÄÏ«êú»ï¾ã÷aæaÐQPƒàPÀ|Àõ¤“§ÎX•·ðGÔÁùGy„=÷Üsüþ£G²[·nõÒ Á‚ xÝÇóç‚?ª÷ õåêÛé\6 Ëx¹ƒÓÙÙɵxñbþ ^¸p555±¹sçòë×®]ãŒÁÅõ7n°9sæ°1cÆp!œ={–ß3dÈ®ÆÇŽËž|òIŽ¶¶6vþüy‚òòr"Üá øæ›o¸pMÅ=Œ’p@8|øp.ðO>ù„û h œÃs|ûí·¼®Œ&Àú?…Pút.›†yxX/!tĈlÓ¦M\ˆ&x¼ø⋬££ƒ-[¶ŒUTTÄU3„lÙ²…ƒ¤¥¥…ƒdíÚµlÍš5¬µµ•`Æ ¼.0uêTVVÖƒÏ+VpMœ8‘Mš4‰·mò_Tï_õä9h_¸p!©Ô¨#CL©Åç¼\w§cP¥7Ì4 îõë×ÙK/½Ä…Y[[ËÌgwccc/GS ³ý™gžá3xÇŽìæÍ›|Öá|uu5ì„ =ùª={öp³ðù石ñãÇÇMB]]f/À‡™­÷UÍy˜žI‚‚Çý‹-Š›0 ©I$&ч鹄 rÐtÚD¨’’6pà@vðàA.”aÆñ{!\él©{=zôh~ •Ž™Žs/^äç` Už~úiöÞ{ï±ææfvæÌvêÔ)>cAK–,a3gÎä@à®^½š0jПI f‡ICßAÐVª&PF<Ë‹<‚nSHÚOé+à;„*€–‘×Ô{p¬Þ#mñ§Ÿ~Êï…I™2e Kqq1khhàu øË—/óÙ „º:he’=ꩦÇ0cnÇ W}„+^²†˜‘vj~Ì´¼m 8c¸ŽþꫯøùÒÒR^·½½K\Kàøĉl×®]lóæÍüüСCã¦áܹsÜÁ;~ü8¿ßÔg‘"Ž;•Ný¯¬¬äZLF)8Æ9§ÐYh––\B<<ÙÊEôS½$ ØÔY³f±iÓ¦qác&¯^½šíÛ·­\¹2Ê5ŠÛúúúz6þ|6cÆ  8‡Ë—/çƵuëÖ±yóæñìúÀ;vŒ ÷¡ðÆÇ?¡ÎáK˜Ì‚œñú3IŒ9’àÀìÒ¥KÜ?Ÿ“GV¿!(¡Ž´Ðßs¥t¼Rμd$ãxÌð/¾ø‚;€2ÀÁê PÁ€û%$ˆ ˜$0¾™QC-¡~6ͨUQ÷œ¡1 Q MÔH°‰t€@ã¯}¤ejó!j@ ßLïÒƒõ—N2bÀs`6~žI¬Y8N@z7—ß<ö‚C= â4x›ÞÛGU+ À uûL¨#ÌÁ?‰ÏÖ¼[˜"Á@þB3͆“4‘^ª&Á ßRBÀv©šK (f¢†ñÞ¸QÉ«Å«tÞ.^µ”ŸTh‡À’‚¥Þ>BEEÅC“£•h]‚ºàC§ÆÆFW+\2Õ®%ŸA]î­:`‰êåõg¢Ý¼‚:ˆò®¾ÌK©¦AWïó*èt·kÉê@¯_¿>þǦ™ˆc¬-”çä±Wa¨íÖ:ëç,Ôr¶íÝ»— Ö-¡.îñ£žÕvƒ0!–RtU5ì *t^´‚ªÞõv%§óº9±”T•ëE¨‚`¼Új“ª× n" K4‚L]NdªçG&!J¤·!Ï©`°8| b@ý¨g§vu›€a}„àˆ¿k@b'Q¢Æëìö’PÊD»–’$”RÕ ~ïÏT»– ácP¦Á‹š6µ«›ƒdÇA†¡y„ Â/¯ÉDíê>A¢Ö&•ŠÔ™é¯;…Éê¹ÕzLü¼&»,ùÝÄë‰ÂÈTÍ‹“‰HÖ›C! bŠ×…xøLôbÈMÈ)ïwÒ,Nçý¶kÉÁGp¯»‰÷ýdƒ¤Õ æ½ëw;Ðb;Oy„t·k)Aø˜Hm;Õ1…m~×#¤³]K>‚iÝÌÆ0Aéh×’2•šµ)á,‚]¼jÉ.^µdvíâUë,þd@½."õë,ÊE³z~ÂÔF©mK@J­¦¢Ü Ö”r¶!@AW¿^_û]Dª ÐÏ¢Y»x5Ó`J¢·úµ ¯¦£ÝtR ¿6‚ÊRWTF±ž­Š”É‹°³(¶À´Tꨜ÷Ó~,Ñ`:ÍP“0ü ´h6ÙâÕ÷^e=›‚w"ü?ÁQFPÁ±­¡ò5lUû¾g`d2­¿&ö;3-^uë?䈰Ih€<’ONëÙÐd™Ð;=kU0^_§š+ÈcgoŽÐ³à¶)À ŽÄ|%Ó€?({Ÿ>O¸N(ÙÅ«i§—©¼Ae2 g¯ŠBÁû ÂË®ÂÇd¦!ÙOÏü„¡A.š ½F¥ŠJÿ4´5Dh‡¡Tþâ¨LáœÈ ˜®½xÕÍ9?íf ªÓIh«š€ðš#œÒ¸a/"uZ4ë¶Ýˆ.d}Yh‚¢ ´6«Lf¢ÐÉÞ&[²¦ %(õœ©vÓè®I³&0i†5†9F è«~œâu§ãT¯ªÙL7Q‰ †ˆ-^}UØëLÓÑ—ŸúAÍ0¿‹WUHå;]€°I„ˆÙB“VØô“ÆÃÇÒÒÒñôñëÉϧORÙOåÃÖÖÖ/ý´ßÑÀ(ô1&„Ïq+•çµ ?¥’ê¼MBkð‚PøFŒŠ¢ÐÇB1cua5iqm«¨ëE˜@Д ßRÌ/ÿ˳4aá°+ •ŸuÝÒ 0Á»%¾–BBkµò½‚"UÝêP¿Úoc]Á»R´å‡¯¥€ ¸v‚ËB`(t8F©?Ûoµî…mTŠ6½òµ”!ûÄÿ?°Cý@8)ŽñR¤ž·‰ÂÙ{ˆ¢ÌZ¦ÔuCjÝv…mÔ³_Äœ´¢È<ö«Î¾C©Cýýxïwˆ&JJ}òµ>¤ò‘rî1!(>uÝ’ÎWR½hÃ/ߨQþG¹»PdöÞÖ„VnÁÛ^²€|uÞžùFîG¡1!´ÒØ¿³5°TpX|#Fø‘ê€lïcL›Á%0 ‹o„¿T‘í}´oçÆ(ôÑ!|ªËr?}«³@Ÿ°qÅ×YÜ¿¯kjjΫ볞Õ4ðêeZ¹õ¼-l$[ÓO+añá5;ö,ȶ5šEߘ\€×À ¨~Ž¶‡Àð•™vˆ¬³sñÃN*£íPÙ¨)Ï Â°6=ÏÃGD'Éÿo‡,?€÷¯S™E ø·®Ï#8Ð_©üžÐa‡)?p˜õ$zþk‡'?Ð"4ÀßBh§’õü—ñm‡ï–²°ÿµa¥{uíbµMöQAÿ'³%á£% Kù@ÿ`d;9×jUIEND®B`‚inc/images/prettyPhoto/dark_rounded/default_thumbnail.gif000064400000000343147600022000017731 0ustar00GIF89a2!Äÿÿÿiii{{{ 000áááZZZóóó333!!!œœœÉÉÉðððÀÀÀöööHHH™™™ÕÕÕrrr!ù,2!` Ždižhª®lë¾p,Ïtmßx®ï|ïÿ9ÅHbKʳx¢¨)5àX`KÚmb€øŠÂÔÊÄ|Þ –2¦0æ£iäŠÏ?û% I€„…†‡ˆ‰Š‹Œˆ!;inc/images/prettyPhoto/dark_rounded/btnNext.png000064400000002603147600022000015704 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<%IDATxÚ̘ÉKdIÆ£´ÜWƒ *h©šV\pQQ<8 ‡éƒw/ãe=Ø‚ÐGÏóˆ sp\fă :½(n‡pWÄ}«ª‰/¨(²_W•e_ª’÷*_f¾üE|™¯ln·›l6“âàç|ýÈ}JùšFnûWåŠuÚívæAIð\ïÞ3È®7ÞFÊáË'—Ëõ ׆¯RQ"""Š^__ÅX LÑÑÑC‘‘‘bø÷A£$&&’Óé¬cÈ_ùÚª*ƒzÐŽ ð——R`<,Tà?ícˆøÍòX³(®ð0¼èÛÛ[ŒcÄÇLJ5¸Ý”4< `õ®zÕÀo«Ðàí ¹‡+¸éÆO´XÂ#gT@r²éú*C?5ÀQ¡«ÂÊÓœ¹ž¤%ÉÈ\,b´¦¦FàVVVDÆf1•xHÐð4ª5<ðüééI®TÜC)jèççgióz†Û°.¬ÆÅ̃qþˆðCµ®ÁîЈ,m…AÁîïï)==ªªªüæææ›YÝãX‡—›2‡A222D=———RqŸ——GÇÇÇtrrBeee2^“'æ988 üü|yŽ1x~ãúj~Q' ýââBÞ‡g¾äýÑô˜¹EÁâÅXÀM©ãåú25”fv5†Y©¨¨ˆZZZ¨··—îîî¤_CCƒ@TWWG¹¹¹bŒœœ:<<¤ÂÂBêéé‘>iiiÔÖÖ& HII‘¾ÔÚÚJÅÅÅ2ëôµ»G ¥x¨2°J0V]]M³³³ßõUÃÁP¨j8S^VcTVVÒêêªÜcûƒ²Pö÷÷ibbB€’““)55•¦¦¦¨¿¿Ÿ:;;)33“ÎÎÎhmmMv‹ëëk*))¡®®.é‡÷`ÂÓÊ£«ÉÖ…˜ÞR«ç~uu%±ÚÜÜ,mÚÏœØô| d6??/ùóY < À¾¾>ª¯¯‰Âsss"@OOO‹1àTõ„„Q< %ܧ5)øÍzœDL/©W|ÀBÊšÍ1jˆÉÉIQOww·×Xð6 æöö¶ó`m€>??÷Î…æD\ëÚ´¯¿-3BÏÒÖ ç q b333þ÷Aãô¨@–‹‹‹”••õݳÓÓSZ^^¦õõuÚÝÝ $TH{ooOŒÒÑÑ!Ê33ý{öéÍ@Ð Œ¬ à………À“z ­™[·mKJJ¢ÍÍMIfæÖ„ùÖÖÖJr*//···‹t³ $,‡Ãá=)ÛôÈj•ý,°¹eù;°øFÁ€ïqdt̶‘(Ú0 ±µµ%Ï–––$0~ccƒ èèèH”€ñh Ú†ø-å‰ÿäe[S<,ÛÔÔ$Œ~úÕ¥‡^«x2+€ð gþ6 y0÷‡ñúe¨óhìëÁÈ_ˆÙ<ÛŒmlll„ï7_f‚æ-`ýHÑ“îCø¹ùfL»Ùj0جž¡Í‚˜ X=‚+`ƒMh!ûà>àÔÿ…ú¯/ð`«Ðaÿ•522âü‡÷»ßü/_ßÒþbX%m‚‡«—­Ÿ–w ýÍ›~?'ŠÏ ñUåj@?%­ñ«àáìe3‘}óÇàÀÀ#ùZÆÛDƒ|`÷ûÉs˜ùó¹Í‰?ñÇ Ww<üC þ/Àó«!ø:lAÃIEND®B`‚inc/images/prettyPhoto/dark_rounded/btnPrevious.png000064400000002642147600022000016605 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<DIDATxÚÔXIK,W>=8ˆˆŠ¢ ¸DN(N· Yd“ \‰ W‚ÊÃEPÅHpØÜ" q$(MŒQÔ84*N8ÏCç~'}škçök“À£ßKݪºuê|ç;í² ]Ñ—0×ñš><>>ZïïïmÖ§§'ëóó³×_^^þP‡_Õñgu퇦¦¦%uî4é°ôõõ9é#†Xº»»#–œN'_ÀX­V‹c[]úæöööë–––?=Á[FGGý4À^\\ÐÕÕƒ0»Ý.y8A±ì^£œðŠˆwÍÍÍ?Âo¢Ïú1>==¥ËËK> ÀÀ@Õ¿ÙSG›ÍÆ÷°À•>UóVÅv…Ž9Aþ:Kt~~N777¯ØÕàL玵Šýü   /3¸_3}}}ÍÀ®IÂÃÃ)88˜AK~ã—#j¢££¿PS‚Âîé)¼Œ°’‚IØ8BôÂ5¹'k GÖbý8âÜÄ Þ ÀÈS<§3é¹€‹ŠŠøÞÄÄë–µx?ìQ:>WlÛÞÞ¾`7yMU=Šå¹½½=έJKKc£Ôêê*åYYYüRa€Ö××)33“uÀaxú###issÓ͈g.«ö$é©Øˆˆ [ONNX¿‰Hu-E­Enÿf ¶²³³Àòò2ÅÅÅQMM õ÷÷³1ÕÕÕtxxÈ/IIIá{äp8¨²²’Â\Xž››£ŠŠ š¥ùùyÖQWWÇïZ\\dƒ=E7^?°8AÀ333îê­?Ça®œû ‚ÓŠÏ&Ä›½½½ÔÖÖÆó‚‚nÉÉIêééáûÄÄDvdccƒ:;;ÙIÃÃÃÌØöö6åææÒññ1§Bll,-,,ð\ 4Ù ëC¤¤¤ä`IGÓZWšä 8í¾Š <žœœÌs(—üŠ‰‰¡¤¤$*..æóÝÝ]w˜¦§§SCCŸäÔÔ3\__O ”‘‘ÁëEaaaÆ÷‚1=ŸuW[[Kª*ÓÙÙÙ?›ª¹ËÉ Z’Þ[huuuññèèˆ åóòòr pˆ¢aee…û’×ä6GzÀ`è3Ù m;}îÔd—öF±ølY­­­î0F( ›###ÔÝÝÍsä —ª @¨¢`wmmŸÃ½­­-*,,äT@hƒeo-H/`&c°ˆ¸²²2c1Ôº‘¯}ZßéHÛj.á†vvvhzzšrrr8¿°‰€ „KKK)??Ÿòòò8r Õ²´´ÄÀ›à=ï gà°ÍpWëZFĵÂ,EEE¹·}b®ª:ò ¬¡Š§¦¦rûB¨£ú#wÑÞà4èÜßßç°Çz„-ôzSïölMß º”ÍsÈãWò½Æ‚ 1N6P.a †]-Áèù…ê –q„£°ŽC¤Hå6 tÞ¥÷e“ zªªªxœ »8 ’CEæg*%Í›/aèé-Õûªì²Þ"(loÑ«·O_Œc'`Ñ¥ÈQ€Gc°“Ÿ  ÉfÃWu–¯0J¾W{‡a_ƒ†\˜þmI¯ ¿¨óÕààà: rÚ¯AˇŽä¥´E_á.E pGGÇO.Àè©N¿­—¾-_xïû]¤ÄFHk ?Êß»ªÎÿç§Þû1( ÛücP…ºM·¨ëV׶u}XÝ›;88˜p­'awxü%À'r!¾1,–IEND®B`‚inc/images/prettyPhoto/dark_square/loader.gif000064400000004761147600022000015360 0ustar00GIF89aô222ÿÿÿXXX555JJJpppCCC‹‹‹]]]€€€PPPwwwccc;;;ŸŸŸ’’’jjjªªª!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù ,® Ž$AeZ ù<ä ’„ÃŒQ46„<‹A” ߈áHa¡¡:’êID0ÄF„Ãa\xGƒ3€×!Ä ßO:-‡‚Rj—TJ‚ƒ* ƒ t †ˆŠŒŽ„—~—" ds]š  š)t–¥-"–i;H>³n§Qg]_* ‹ ®R±3 ÁGI? ÎË´¨v$ý›j3!!ù ,° Ž$À0eZy¤0¨£q £ãŒP¤Ð£W  )"; qXˆ^ÏD50‡† Ո̢%‹`‹£ÔrÏJ{ 1‡ºÍ$ʈ…‡!!ù ,´ Ž$@eš6$‚Æ Ž`Œ 3*Å=‹  …ßÈ Pˆ\"FÁ©’í²`PÐ-­ƒÓÐd5VÁ"2Ÿ|?n"!( ¸Š‘€è•)e€„4xyc?   ‡‰3‹…™™ ”#wyJ l% o€^[b_0 V T[0mœ $ƒ4 >„'VZ ¨cη3ƒÆ$Xš¼%!!ù ,­ Ž$`eš¤¢¨:D3 ÂH0¶,'j0¾Qƒs‰ ‚L(2HM¨Òj#Ðȉ…BŒ \Oéi`u§†=YŒù€EVL=I  ƒ…>‡‰‹•• suI WJm| \"_…b0 B¦ cV"d]*K1" H|@B?ÀI4…È#  S$¿-|¶|!!ù ,¯ Ž$Ð4eš¤a¨:D Äh¶Œ³·œI Á/€K¤$W-á 0(`3œÍÑFãÙÀ=±pf@ïýtéøQ£ìÉ  {f~*€‚„yS*mg) ”enu E^Z^ g@ kw(b& -w#"º xW"¼t #Ç#”%U$Ë`¶t±o!!ù ,´ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–<Îp6%tP5Ù¡êS|ÉîØH(²FÕ¯›c¸Œ€`05xz*|~€v‰G„0t#  F hŽ0  #C d 1  I¢#(i - “ À uEL q ³Ì" h%±$Â$<Š·q!!ù ,­ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–Îp6%tPÝñt¸ª¯é„5Å©3ÔÈn»G$ò€´ @aˆÏëwy{hoFS>k#  F Y" Š% E  Cb AI4$ (z¤:2• mI L½l#Æ# ¦F­#É#š>²F!!ù ,² Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨©ŠVñtKG‚ˆ22ôëŽ7‚D"¯ªé$)‘„±é•Qø¼Šqp8 y l |~€‚„6zw2j# F Œ" ’% VŸC œ ]¥6a$¡ Q ª:2 \  EF I—&Ãx ¯"Í“¬F4$Ð]#¸x!!ù ,³ Ž$Ð4eZiä ’J16„<‹ŽˆB” Š?$r½œTêHzDP'"lä(†1±5–y½Ãá8tg†œ—p,’qÛ”Múÿ*   q ‚„†ˆŠŒ€”"}•# b?y{ {)Šs -s­:–9>e ¤E,C\3 ‡^·3[ ¬ž¾¸°S·Ä|˜»²?!;inc/images/prettyPhoto/dark_square/contentPattern.png000064400000000171147600022000017130 0ustar00‰PNG  IHDR 2ϽtEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbd``ØÏ@`b Œ*¤ŽB€@—Ó$GµhIEND®B`‚inc/images/prettyPhoto/dark_square/sprite.png000064400000006663147600022000015442 0ustar00‰PNG  IHDRLw©*¦EtEXtSoftwareAdobe ImageReadyqÉe< UIDATxÚì]ilÉ.Ü`îà `@F¬Í}E2§Á€× ° Ž‘Ð"ø„”h#B£ä–vI¤ýEX o$òƒ?"-!ˆË ®åPVdÁæò22`qØ`npÞWTMŠ¦º§«§gzFé’JÓ]ýê½z_½÷êuÕxœÕÚÚÊÂâ¾änÙ²… 6ÌîùªeTK¨Ž¦Zà“ÜNâ³%JÂ(Pß½{Ç^½z•ýúõëÔ·oßf½yóæ… «'šÿÍ)ª7nÜøºZyeUVVrÀž?kìСÃ`úXA >§Îƒ!HÖL+(`1ŠP±v©Svv6¯YYY¨·©þè«7mÚtã SoºtéÆ¥tù}ÎS0ÈÍÍ1Ì4°Ô‹/8Pø´ê„kÕ AO Pû¦¶mÛN¨ªªúrýúõG$ÏXÔi+1ç`µiÓ†Q'–“““±`Ásž„YÕLÉ7§´´”õìÙDpÃ?’Yè,;Iä3©ÂÍàv/_¾d---ܲT$HNà ~·×¬Y³N:tè±j6+à†ÜOss3z%ƒ¢ Ö°T(>óÐc—tîܙӨ}ˆ×¯´j !<'r›j€³ˆÁüaæíÛ·ç3‰{”víÚñvÕMàè‡YÆàPA%¡ *xƒøNki§ÊÛ ø£‚hÐÞ±cG6cÆ ÞÿĉÜUUKXS¦Lá´GåzÁÒÀè>ߺuëw°2¬†&³&ÍÍÍ\¡éÓ§óO(zíÚ5VWWÇ&MšÄŸß¿ŸƒÀódz‰'²üü|>ØK—.ñ>ݺuãîÓ¿6|øpbCC»zõ*«°°ƒ-c V¼»wïrt‰>rÒdALB€9~ü8{úôilÁCôxð৕® ~4þ¾Lºd ãùµZ ¸W¯^låÊ•\Y( K–,a>deee¬¨¨(æ<ÀZ³f ³¾¾žƒ¹páB¶`ÁF9PË–-ã´jäÈ‘lðà÷ó8wî\ô!CØСC¹l]š£®vrET­–@ÌÔ©SùdJË’`F¦ÒÛÄg‰´°Ñ.WÂx. ÚG±åË—s¥«««Y×®]¹µÔÖÖÆ|_æ?àë?~<·ˆíÛ·³¦¦&>‹h///ç¼Ï‹wíÚÅÝñÌ™3làÀ1W<|ø0WÖ€I‚¥XǪæŒ:$hý§M› ,i™0€.Æ0ZV ™«³bWÀ°wïÞ¬S§NìàÁƒ|ð=zôà}‚ šjA<éׯ¿†+ÁrÐvýúuÞW„•³mÛ¶±[·n±‹/² .p @™9s&;v,ŸL̽{÷“U«N¸+€A(ÁØQ`ý,Õ²Ô‰ ƒr­@¸)Ò¿e,Ã=”—Å€äÀå3µ®Õ>2VœÍG?ŒñkÀ€ün¤&£ª;J ²ê$ÁêÓ§êÀìÆ<~"#Ô`A²öo;‡%`j«3¯È<såÊÈešpìØ1žN@Yt Áé@€ˆ GE,•ÁÝð >räçpàšàżPv\Ý¢¤‚ær1¸0tqMöÜ­@âú=ulbeÒïQ18™¸Â|aq2–¡À”Æ3™¸‚nŒk Üš™ìÊø¢ö³º´jð¸ð)u‚ü9sæðñI°¬›xz<Ç„Kw$9·érž”v‘ñ- r³ ``ëÒ%PÈ®XÝHí£ëPœøY­_(È«je@à¹,´á9è%XŠu}»nݺŸÔé©&h†æ¹]-Óµ4( ëTY šS± Љ×^¾úƒír…[ôñüé/ߪ•Éí/:‰=³³øW6l¸ùÑ~VCÂþ@B¾‡ LÛ³³2T,&nu h©ÿ?‰Ïzuñ#ØÓ[„îyêÑ[Ô4¹« |Û¢¶¼ÎÀ=+©ÓwxC§úuBí· aq_²CBÀ’Zx £wÀV]ÀtÚS7欥¶¶ÖÕNdPr“naêq”HhýZå‚0U˜Ü±nïª3¯œÚÏTËM0u@K—.ÝãZ7³¸ÆÞ»l“צƒVåjöÏm¯­m©üBM¶:K(»wïæ¸- E/n¡ÊõÃuSôUó7MËÊÃÄÊT·²Ê•üíÚ­nœÀTS7±.U(`Kt.f$pnVÖ¤X˜j¨]ÑÑy´NYiáV²M-Õ_ÌöS°·°“kF`1Œ¿K"tJM­Å$q B®o‰k¢VæµPrJ+ürI÷Ðɵºa¼k?Ó£ÄÕ¦I¤“\kÌrJuR™¼æZgÚ.ß±K'âѹµ0ëtüL“ꤦnò§ô"Q·¶sÍxãIeöQ¦&¯nfSÍ—œ^ݤ"²¿¥Úµ{•ëËËw¼|ÇM¾ä%Ó÷CáTYÙy˜Ó^“Û‰¯aåa©–ëë~˜Ó~•›4Âë~X*åúöòm:»ÉH8S!7aÀ(ùjÊøƒ/—;ÈM0 ܾFà±Ë#¹¾½KÆdx‚$ô­‚M#¼}yø¢KTu‡/‰¾’ùò.é— %šVÄ@÷ª”òc6Ý+†é6‹×ÃUQ/‡/©>ɶº˜úNç4xÝ+”‡ ©ë‹…Ù¹‡nðºA{Ý“RöLåÊ—þ@v+œv>öÃT¼Ì´Ó!ˆÛøØ1["Û,‰æZ™òûá!ˆ×´"žKÆ;²÷’žøyø’R Ó-ËÂÉýtÏý>qÓ–È‚“Ы‘îõ#Ù‡v‡/nåq ’mâmU[ï—[%×õ$c‹º¸¸¸Õ¯j²U¬Ê•ï’nWakZ“ª-ê\k,ñû¸Ì4†éò;·q,¥yX¼½&“Ã/ ë²û*TZí‡9íWÙíEyéðÄ÷͈CT|¯JW‚’ëkZ–°° K,†ìرc },¦ZNu‚h>Ou?Õ=«V­ú nÿ¾RÒùÍ7-,Œ”Â_Ü~MõÏT?¥Ú[ÔOEÛׂƨ$‹o &,J}¦´×Q-´ÐþƒêÚh4ú³Æ‘HDÇWÇÛˆo:XØb‹RõTK5´Ÿ Z·e±,&x×'À7pÀÊ•û(¢¸µ¡/7à­¥¼K…,/|LâFÖM¡X*]æ+ô x«´ù ?&d” ™¦|Ó>­ðãwe2û·i,€×X½jh"V¸VTÅ ˜B릨´ ?&dÔ™¦|l¿º¸ Ð"6ôû xï·I5"¬ˆG¾¶G,í²  1MZ±Ç€·•¯,5B†W¾Á&2í*‹rº¬JfånŠ _¦ÉÁŒø¦EЧãg,×RýÕ‰¸Õ(®Ñ¶VЕdñ 4Ó7ÝŒsûÅÛÍ›7'…o¸[nï„€…E)¹òô…ò£®ôQ$V1ù:Ô vj)87¡Áí¾U²ø¦……‰-ž ö~Ÿ ŠuµP´U£’,¾®’ Ô'JûCª=,´—©î‹F£MnG"_o#¾é`aE¥0ðj í'‚Öm)Ò€Åï¦ø˜šy7C!Š+Í6ô…¼ m’ÙfZ³G¾Á}%·° Å*E¯ÿÿ^ÐäðVi¿$~OÐ_€öÓò3ÉÂâ?~¼5óþG™ƒ…5(+Ø šùÂtë|ƒïÅÕÖ?i]•tݲØÿ~ϵ!“,¬N¹Ï åÙÐ×ð®³I5òXyùX­XÚeé*bš´¢Ö€·•¯,+„ ¯|ƒLdÚ',Êér°2+w¹µ£ãË49˜ß´úbo{¿OU'VÌq¶}^6ù’Å7ÐL?ü-êp·",,ÃW¹»`Üÿ±ÏmqÃß„_ºX¾ã0(‰òþBu;Õ6÷Ø/Dn´1IJ iÅ?]kksŸ‘1 @ýI÷ë0j¹úpÍ]T :6„Êý* 7ý7Õo¨ö s_°ÙwMÄ·¶!`î ¾›Šïr½ s.ØMø‚ê8ñÒ&®å¯T7°÷Çca¦ïðì(ÕßRý1„É°zaQO‚¼Rª9TŸÚÜg`ˆOÕTŸ'IÞqîÓ¾deÊoÞdjZB`Vþ+ÀAÉëî ‡IEND®B`‚inc/images/prettyPhoto/dark_square/default_thumbnail.gif000064400000000343147600022000017571 0ustar00GIF89a2!Äÿÿÿiii{{{ 000áááZZZóóó333!!!œœœÉÉÉðððÀÀÀöööHHH™™™ÕÕÕrrr!ù,2!` Ždižhª®lë¾p,Ïtmßx®ï|ïÿ9ÅHbKʳx¢¨)5àX`KÚmb€øŠÂÔÊÄ|Þ –2¦0æ£iäŠÏ?û% I€„…†‡ˆ‰Š‹Œˆ!;inc/images/prettyPhoto/dark_square/btnNext.png000064400000002603147600022000015544 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<%IDATxÚ̘ÉKdIÆ£´ÜWƒ *h©šV\pQQ<8 ‡éƒw/ãe=Ø‚ÐGÏóˆ sp\fă :½(n‡pWÄ}«ª‰/¨(²_W•e_ª’÷*_f¾üE|™¯ln·›l6“âàç|ýÈ}JùšFnûWåŠuÚívæAIð\ïÞ3È®7ÞFÊáË'—Ëõ ׆¯RQ"""Š^__ÅX LÑÑÑC‘‘‘bø÷A£$&&’Óé¬cÈ_ùÚª*ƒzÐŽ ð——R`<,Tà?ícˆøÍòX³(®ð0¼èÛÛ[ŒcÄÇLJ5¸Ý”4< `õ®zÕÀo«Ðàí ¹‡+¸éÆO´XÂ#gT@r²éú*C?5ÀQ¡«ÂÊÓœ¹ž¤%ÉÈ\,b´¦¦FàVVVDÆf1•xHÐð4ª5<ðüééI®TÜC)jèççgióz†Û°.¬ÆÅ̃qþˆðCµ®ÁîЈ,m…AÁîïï)==ªªªüæææ›YÝãX‡—›2‡A222D=———RqŸ——GÇÇÇtrrBeee2^“'æ988 üü|yŽ1x~ãúj~Q' ýââBÞ‡g¾äýÑô˜¹EÁâÅXÀM©ãåú25”fv5†Y©¨¨ˆZZZ¨··—îîî¤_CCƒ@TWWG¹¹¹bŒœœ:<<¤ÂÂBêéé‘>iiiÔÖÖ& HII‘¾ÔÚÚJÅÅÅ2ëôµ»G ¥x¨2°J0V]]M³³³ßõUÃÁP¨j8S^VcTVVÒêêªÜcûƒ²Pö÷÷ibbB€’““)55•¦¦¦¨¿¿Ÿ:;;)33“ÎÎÎhmmMv‹ëëk*))¡®®.é‡÷`ÂÓÊ£«ÉÖ…˜ÞR«ç~uu%±ÚÜÜ,mÚÏœØô| d6??/ùóY < À¾¾>ª¯¯‰Âsss"@OOO‹1àTõ„„Q< %ܧ5)øÍzœDL/©W|ÀBÊšÍ1jˆÉÉIQOww·×Xð6 æöö¶ó`m€>??÷Î…æD\ëÚ´¯¿-3BÏÒÖ ç q b333þ÷Aãô¨@–‹‹‹”••õݳÓÓSZ^^¦õõuÚÝÝ $TH{ooOŒÒÑÑ!Ê33ý{öéÍ@Ð Œ¬ à………À“z ­™[·mKJJ¢ÍÍMIfæÖ„ùÖÖÖJr*//···‹t³ $,‡Ãá=)ÛôÈj•ý,°¹eù;°øFÁ€ïqdt̶‘(Ú0 ±µµ%Ï–––$0~ccƒ èèèH”€ñh Ú†ø-å‰ÿäe[S<,ÛÔÔ$Œ~úÕ¥‡^«x2+€ð gþ6 y0÷‡ñúe¨óhìëÁÈ_ˆÙ<ÛŒmlll„ï7_f‚æ-`ýHÑ“îCø¹ùfL»Ùj0جž¡Í‚˜ X=‚+`ƒMh!ûà>àÔÿ…ú¯/ð`«Ðaÿ•522âü‡÷»ßü/_ßÒþbX%m‚‡«—­Ÿ–w ýÍ›~?'ŠÏ ñUåj@?%­ñ«àáìe3‘}óÇàÀÀ#ùZÆÛDƒ|`÷ûÉs˜ùó¹Í‰?ñÇ Ww<üC þ/Àó«!ø:lAÃIEND®B`‚inc/images/prettyPhoto/dark_square/btnPrevious.png000064400000002642147600022000016445 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<DIDATxÚÔXIK,W>=8ˆˆŠ¢ ¸DN(N· Yd“ \‰ W‚ÊÃEPÅHpØÜ" q$(MŒQÔ84*N8ÏCç~'}škçök“À£ßKݪºuê|ç;í² ]Ñ—0×ñš><>>ZïïïmÖ§§'ëóó³×_^^þP‡_Õñgu퇦¦¦%uî4é°ôõõ9é#†Xº»»#–œN'_ÀX­V‹c[]úæöööë–––?=Á[FGGý4À^\\ÐÕÕƒ0»Ý.y8A±ì^£œðŠˆwÍÍÍ?Âo¢Ïú1>==¥ËËK> ÀÀ@Õ¿ÙSG›ÍÆ÷°À•>UóVÅv…Ž9Aþ:Kt~~N777¯ØÕàL玵Šýü   /3¸_3}}}ÍÀ®IÂÃÃ)88˜AK~ã—#j¢££¿PS‚Âîé)¼Œ°’‚IØ8BôÂ5¹'k GÖbý8âÜÄ Þ ÀÈS<§3é¹€‹ŠŠøÞÄÄë–µx?ìQ:>WlÛÞÞ¾`7yMU=Šå¹½½=έJKKc£Ôêê*åYYYüRa€Ö××)33“uÀaxú###issÓ͈g.«ö$é©Øˆˆ [ONNX¿‰Hu-E­Enÿf ¶²³³Àòò2ÅÅÅQMM õ÷÷³1ÕÕÕtxxÈ/IIIá{äp8¨²²’Â\Xž››£ŠŠ š¥ùùyÖQWWÇïZ\\dƒ=E7^?°8AÀ333îê­?Ça®œû ‚ÓŠÏ&Ä›½½½ÔÖÖÆó‚‚nÉÉIêééáûÄÄDvdccƒ:;;ÙIÃÃÃÌØöö6åææÒññ1§Bll,-,,ð\ 4Ù ëC¤¤¤ä`IGÓZWšä 8í¾Š <žœœÌs(—üŠ‰‰¡¤¤$*..æóÝÝ]w˜¦§§SCCŸäÔÔ3\__O ”‘‘ÁëEaaaÆ÷‚1=ŸuW[[Kª*ÓÙÙÙ?›ª¹ËÉ Z’Þ[huuuññèèˆ åóòòr pˆ¢aee…û’×ä6GzÀ`è3Ù m;}îÔd—öF±ølY­­­î0F( ›###ÔÝÝÍsä —ª @¨¢`wmmŸÃ½­­-*,,äT@hƒeo-H/`&c°ˆ¸²²2c1Ôº‘¯}ZßéHÛj.á†vvvhzzšrrr8¿°‰€ „KKK)??Ÿòòò8r Õ²´´ÄÀ›à=ï gà°ÍpWëZFĵÂ,EEE¹·}b®ª:ò ¬¡Š§¦¦rûB¨£ú#wÑÞà4èÜßßç°Çz„-ôzSïölMß º”ÍsÈãWò½Æ‚ 1N6P.a †]-Áèù…ê –q„£°ŽC¤Hå6 tÞ¥÷e“ zªªªxœ »8 ’CEæg*%Í›/aèé-Õûªì²Þ"(loÑ«·O_Œc'`Ñ¥ÈQ€Gc°“Ÿ  ÉfÃWu–¯0J¾W{‡a_ƒ†\˜þmI¯ ¿¨óÕààà: rÚ¯AˇŽä¥´E_á.E pGGÇO.Àè©N¿­—¾-_xïû]¤ÄFHk ?Êß»ªÎÿç§Þû1( ÛücP…ºM·¨ëV׶u}XÝ›;88˜p­'awxü%À'r!¾1,–IEND®B`‚inc/images/prettyPhoto/default/default_thumb.png000064400000003001147600022000016061 0ustar00‰PNG  IHDR2!oÓtEXtSoftwareAdobe ImageReadyqÉe<"iTXtXML:com.adobe.xmp JûLuIDATxÚì—ÉŠ"A†Û²ÜÆ]qÅD<ø"}ñäCŠ *ŠîÛ¸Í7•C¨ô˜e;xð?HUdDÆ_‘©át:}¼”—„úšÑzÓz×Ö›–,æóùl6Ûl6Ûí–W‹ÅbµZ].—ÓéÔ½§ítcÛívF#$¬ Ãz½FÑÃá‰Dê¡Å.ú8-‹V« …ü~ÿIÃßM5ŒF£^¯‹ÅÇJ"Ól6£Ñ(q:«‚¥ÏçSUµD"a³Ù䢵\.e9Á£^¯û5|ýU"f •J)ŠòÜhM§Sê韜DØP›L&˜x<‰vz”Ä~¿Ç䎊>—‹ÅJ¥r­ʘ`x¿å$ ÜPì×UÌÑ+—Ë«V«K(c‚áý^¤“Èî»ÝŽZ¾¨t—VK¥R.—+ ÙlöO¡¨*&,‘úgÕl0!#7} Ìd2^¯*Ÿ;ó Rs¿/iZès¾hè7ûd2™ÌçóñxœŽ u!D“‹Þöý'Ñl6SIüÞ$´Z­X½8¹L$ñI÷ö­Á` ʼn`B·K§Óçr·Û !jèÚ¤V«Ùíö@ @fŸ-ÒÁ ‡LC&ϧœpSŸùÃH‡Ã"O¤e2™‚Á ‘gÂ|¡ ×v»ÍXÄä¹´~·`EIi4”óyÌ.âÔétXE)Gzh‰€1LpÖï÷Å`ù¡Õ•Œ¹ØÐÌdC¥ÿ!eN›€¥öSƒ8§€‘htx– ÕC·Sœá’òâ|ÁOŒH!B±ªƒÓ£—fRƒ{‹.¶w@EƒT¯úæ»<$n¢Gv~ÿO|Óz~ 0ð"ð°glÿIEND®B`‚inc/images/prettyPhoto/default/loader.gif000064400000014273147600022000014502 0ustar00GIF89a¥dfd´¶´ŒŽŒÜÞÜ|z|ÌÊ̤¢¤ôòôtrtÄÂÄœšœìê섆„ÔÖÔ¬®¬lnl¼¾¼”–”äæä„‚„ÔÒÔ¬ª¬üþüljl¼º¼”’”äâä|~|ÌÎ̤¦¤ôöôtvtÄÆÄœžœìî쌊ŒÜÚÜ´²´!ÿ NETSCAPE2.0!ù ,ó@Ç"<€„‹pÉZˆ…É0µ<‡ës¸¬ .) ˜Í:…%âñ•@˃H´¸ 5#|± V [~t x~NŠ  M[}˜ pD¬}[¥³$—‹g¹ ‹¿•$ #”•·O $#n¡¢O  \KVu!Zg$C ƒ–D$ ‰D VàPGŽ†Aøª” D*8 H¸âB¢Ä J”¨˜@B.VH@(á †, !ù ,î@Ç"<B“‚ ŸC ‘Ã@<®— €pˆŸ%bŒÈ.O×ëÁŸ *õzHÙ¼'BRRE]#ƒ…"]• „QD_ ’ _‚˜Dœ # O˜™j  ##¸D²¹DÄ!—DÂʈ£¯Q  ! Pš‚$å’Þã„š åC$! Ì„û"„:”h° Ë} pÐð D… J”€€b } Qb 9€ƒò…‰@‚ GÙ !ù ,…ljl´¶´”’”ÜÞÜ|~|ÌÊ̤¦¤ôòôtvtÄÂÄœžœìê쌊ŒÔÖÔ¬®¬trt¼¾¼œšœäæ䄆„ÔÒÔüþülnl¼º¼”–”äâä„‚„ÌÎ̬ª¬ôöô|z|ÄÆĤ¢¤ìî쌎ŒÜÚÜ´²´òÀN§"<@Bù„Њ´Ca(‹ð|†D(Iã!xh-p /‚Y("."­j4 `S Q " SRPOT •#‘‘Cœ$""PB™Rœœ aS¤a!²ƒD !º¹n¼  ÃÌ»  £ƒ¯ #Ò“š£Ø!mš¸Û‡ DÃ##øDꑸ0ÂܦmŒˆ7e .@ø`§À ¹‘2‰ PÜÐ`8Rš2lø rÓù†!ù ,í@Ç"

    5 ¥P¸jeH4’Hâ†F"0¥’c=<¼$"BRFDR‘m’"$ sƒƒmC !¦P¬l‹!  ¼¬ŸS¹ ¼ ·‘Ç "ÍÆÏQ!"™«·ª%“™OÙ}#káµ^m% #O% D‘% „JhX BBòÐF† ða" ßlAâƒTÁ!U½> l9ÁˆNõ‚!ù ,ð@Ç"ô, NÓ‹–¨å@jP(ÊB"ÒD‡Å©j-@ CšñX²h8 L Ð4"BRF {%^p€nR_ ˜C %$" „`nP"£©o†" ¨DœQ!¹ŽÇ"Á!ÄÆÎQ –…O†nO×ÞS }±½½B%!~# ê¿%##_óÐKC‚Œè&å@‡  @@`ƒÅ +ñRE âD 7ðKf >|a€ƒ¦’A!ù ,ò@Ç"ô4ƒ†r°(-PËq@ªR(œ§ u‘Ô¶P%HC¢Q#Ѹ¢…¤QNœ…Ò…\rÀGDz\DQjB"’Qi]"ž}jiO%% ž"NŠ~DF~C–ŠR«‹½P»G…•‹i°!N–~! £« !$x¢j ” ”¶$]6`Р  È©R€>˜À€âˆ ¥óP`‰6Pd €:tR !2Cõ!ù ,…ljl´¶´”’”ÜÞÜ|~|ÌÊ̤¦¤ôòôtvtÄÂÄœžœìê쌊ŒÔÖÔ¬®¬trt¼¾¼œšœäæ䄆„ÔÒÔüþülnl¼º¼”–”äâä„‚„ÌÎ̬ª¬ôöô|z|ÄÆĤ¢¤ìî쌎ŒÜÚÜ´²´êÀN§"ìB’Ì “ ‹•hå¸H*£ÆÈ}R«ÖQ–BÉ ‰ÂÃ"´XÙƒe³1ø¼PZ 56hz|RB ^g{]w IPPD##˜˜D  ª|g]Qª ­†°»ª¯†g $$ hhQ {O{$ÔدB $C D­ç #]Ÿ T"DPðÁÕ|h˜ B@C"tDd… 4Ä¢6f6p 1 U!ù ,…ljl´¶´”’”ÜÞÜ|~|ÌÊ̤¦¤ôòôtvtÄÂÄœžœìê쌊ŒÔÖÔ¬®¬trt¼¾¼œšœäæ䄆„ÔÒÔüþülnl¼º¼”–”äâä„‚„ÌÎ̬ª¬ôöô|z|ÄÆĤ¢¤ìî쌎ŒÜÚÜ´²´öÀN§"B Éb*+PâḔH2ƒÌaHtNCÈäu0I¸Þ©ú() a…’qʡàA¡,*[Q†B#x\x€Š rwO ]D§x ¯‘¨“¨€ ¶¯#†»Q ‡Æ! vQw#gœN€$œ”B$Cæ ´xx$$Ðr` pØ0© &0! èD„‚‰"ˆA‡݆ 9@ÁA@hPR!ù ,÷@Ç""ÑBt(-P¢ç˜\,$’EZ<ºH«D£,†DK墋²†t.B-“\QR_ …Q|i  !RB\ OR“ ¥ Š”h»$·ŠQ Å ‰Âh" C¬­ m N‚ !ã‰v C ¸%%ˆˆÀ7"C-p(¨à >0Œ` C! èP¡ÂC4Ö((¨˜!BˆŒJ ÷î…'T€ÐÀZš !ù ,û@Ç"<=‡¤èÈ´8=…Í¢(ª.D‡'QX¹:HäA´Xh¦OO÷rAL© ‰D³tlDÁèÜš5Y}‰B$ iŠ$"’B[iC $ ¡£CO  Z¯Z˜²$‰Ã}Ç#—}¯%Lº  #o®G˜   ¯® {# YºD0`€€ˆ„(° ÉJÀPɆ (0СB)hÕÀ@!:tt@¶Q˜¨À±D‚þú;inc/images/prettyPhoto/default/sprite.png000064400000015032147600022000014553 0ustar00‰PNG  IHDR‚“B‰ÁÃtEXtSoftwareAdobe ImageReadyqÉe<fiTXtXML:com.adobe.xmp ï‚GIJIDATxÚì] pEºî“„Wc ˜ð0 ÈŠ`IÖ2ìz7—E‰€ ¤K|k|â–R‚¯·|\ETJ©Â‹ på†,°^$ÆÄHx$щDH$Ùÿ¦ÏÌ™™3'ÉÌ93鯪ë$3Ósúïùûÿÿþ§¿Óž¢¢"f„šššîQQQcÂÃçz<ž:t5}^ÑÔÔTJÿJŸ{¨äÞxãùÌ!(((0%÷+Ó 7Ü`K›©=–Þߣ§gÏžéÔ©Ó’°°°û¢££;]vÙe,22R*ÔAìüù󬱱‘ÕÖÖBYPª^.//küøñõ¡¨………-–©oß¾õ®V„}ûö5;0bÄÏž={ÆR笻òÊ+£¯¸â F£Ejˆº18Î?щÕÕÕ¬²²²äܹsw&''—˜iÀ×_Ý*†nJζ©K—.>2Q9RdЕÊoPæ0Þ(², Û/uŽc”h5„×ÃùˆˆËzõê•H£nÏîÝ»SBÄ´™Lõõõ)Êþ²z”Ú€îü. ùxÏ®]»žìÙ³ç+111R'*(®¿üòËaj{”••m"_ü§Ñ£GïDÓÉ¡Ñ8™Ê*×Ó¡pºfŸ\Ö›ñÛJ%hk™Èeþ©sçλÍÖß»w¯¡VK@)t>\ >×¢êâêófdBùñÇÙ“O>ÉÞ|óMI³Š '“UòØbhz4†ÌS¸ÑÕo½õûõ×_Ù3Ï<#=tÙ¤³×^{:uŠeeeéÖ•ƒ¤!kÖ¬é«1j'c4Àobäj•ýû÷³—^zÉç8ê .î¡z 320ó Ö§Ÿ~šeggKAœ?èÈd(îYôä4Ç–!‚FÎ/Füøã³÷Þ{ѵìùçŸg™™™ì“O>‘êPìÄî¿ÿ~Ýú8Žû“¯JÿÅ!Þq„#s¨YïàÁƒlýúõìСCÒhÑêârÇ5*îëW&ål ..Ž]¼x‘mÛ¶‘ïg_°””ì!“¡<H0ÈKLŸ>]{íµfå±±Ê<ÂåxÀF8„~àØ»ï¾+ý¿lÙ2Æ£á|‘¿4¬ô- <{hRÄ'}Ñ+ë~ÿý÷ì£>’FùMé{øìB y6ÐGmÌȤu/$›€ 6°Ï?ÿœM›6M7…¬!“¦<ˆWXÐ%K–°þýûK §Ty¬Î#\zÔh¿‘ƒó Ç'8iii~•€?Dùå4ÒCæ°#Qíƒñ@† ÖÌhùjÙ¤zÔÓS32ö}/¬bŒdÒ•GÙÜ{àÀÒý•in#ylÉ,RÃO_¸pÁ¯EL€ÀZ ¼üòË’« (Ú°.î____¥q¼‚ŽGÃçr`„`;vL•GŽѵTwB}ܬLZ@ xûí·³‘#GJ÷ǃ5+“–¹yÃôK¯îÙ³gÑ©ßÍŸ?ÿ¨JÀÆŸþ9WoÚ†‡Žá ¡u êâªÀªÉŒLJÅ5j[¸p¡¤¥(Fõtd2”2@ÈÄ­•Iy¬DµWÈ´—QÃöB8=Ì›7O꬇~XŠ ¸Äl¹~L+¬ Ð|Y¸fŠ‘‘±ß]^^®Ûé0—pKê㨃º¸‡ªãÍÈ ÁƒLÚ¸qã >üðÃyä7_@¶QtKSwèСºL\°`A, ¦óݸq#|4¾_µlÙ²§†ÝIßÿ»ÈÈÈaò´ìŸ4z¿!?úקžzj«|¿zªÛÿ®—DzZ&ê»&ê;½ïXÁâµ¾m y=Â<*¯aºîÙ´i“tbüøñ‘è¸÷ßÿ)š<=pàÀð–¼Âý駟àC«>ü4­ü›,¤®€Èâ“&M “c̽"åÎ SøßÙÃt^¤zr=£æX&õ[ƒÜozÕ’Ç_\`‘"L£ò1!BñhLí}÷Ý·<++ëùÎwizØM2ÿ‰.ÌýÑaäCKaê–/_¾ßŸ–+ÌÉÉ‘‚­ÔÔÔ‹üõ¸"ÃÖ$wT£|ÙŽ±D¦ÜÜÜßߨxȺòØjê¸7Í ÓÌAfÖ#kqEÔñ))) )Ø™B>60r 0¯|é7¦‘H¼`:EåEêÿMõ_4¯6£6¡Me‚;RÞÜÀ5µ),²XCY,¹nš9ÈÔzdí…I‹;vlÌm·Ývklll*;qTh4u£è$°Suuu_Ñ4m뫯¾ú?ôY++Àù kº–2´Z&îŽTýådEÀ ®’"\&ûµE W˜8nÞ.ªJƒ)Ò@áX™¬æ5xM¼³<êé’"ÃÖ áÌø{§Éd»É´‰ijŠàE[ËïTEcŒ5›>jÂú«¯¾r4š‚C™aC»AeCÛíì`C;6F&ÚFE° íØA°¡ÍËäB6´¯"Œ9Ò˾æškÂñ¿¥ÌaP¸Ðñä‹l%hk™ÈeþÞ•ŠÀWÈlß¾ý4¼ôñÖL ±4..®SÇŽ7dggÇK8«d:vìX¬z¹›+,B0ÙÐV!˜lhG*B°ÙÐV¹„`±¡›G`*æ°&L`œLŠÕ½¹¹¹ÍÎáí¢k@yŽÌašŽ =ŸÙ÷"ÊP&àÙgŸe‚ÁåË—Kt3¬*..f ßR¾ÆeJJJ²S&k;ÌsŒ#0s(Øbüq³s999lРAÒ5(²¡­‚64¨g Ó`¿q =tèP)§À…ŠL–+‚Yæ0ðè£Jëì̯Áð6´enÁŒLÊÆàI*?ùOÜ„LÖ+‚’9¬ÇÙ{ñÅ%Ö3Vö€ñôí·ßJt7,è@vnÑ¢EÍæàj>Ÿ‚9ì ™ôòZù„‘É–Yƒ—9¬U@iÀz;ônD✠‚ëôî¡b[nüɤ7¨Á"Õ·Y&[ò†Ó pôp{÷ÝwKŸPtÄ]wÝåeCkqù”¬Á†¶ ²¡µˆ®Z„`Êd¹"(™ÃF˹a ”#çí·ß–¨Zþê걡­‚™”àœ-w*2Y®Jæ°V™sÀo%pÜsÏ=’%Ћ¼ý°¡-³fdÂÏ•––J %dÑvå1üð‡–•’LÖOµ+õïß¿ÛŠ+ ‡ª©Üè$%Èäš:€9üÃ?¬¦8to‚§… S eA.– þ^ï˜vÉ ‹ÐxøðáÚ#GŽ, è9—bp%Y ŒÎ!E{üøñÊ-[¶ü…]âøÙ™“7”I(¥âLyyywÜq‡;f `ôbÆ•™™ù¿$èKx¸˜´˜jÒƒsxƪU«À¿¾h³\¶È亅)2³·>===kÿþý)..†5̬ýLIIIõ¡C‡¦-X° éüðƒ °T&ê³&7-Lñ¨þ†«èœ••u;M Û‚9\gd lX¼j‰L¹¹¹^™ð*Þ 1‚G§ãlaCÛ´ŠÙV6´k(oÇ· mçrvfÚuÜGRË™ÃAà>¶X&RÍƺEt)oEEE#¸¢¢¢kttôŸÉ|NåJ_ÐÃhäF’>÷\¸paÓÍ7ßü7dÙÚ:''§ÉÉØô`jO”7[æ­‚òÒ”7¡þ|f; ¼ ˜L{÷î•þà€ÒûÕÖ0ƒ0:á*ÊÊÊjÉ2nêv¿ë¸Ì¢[)oº7RÞ´ä(_|ñÅLÁ«Iš™kdÍ`-x°È¥U‰©S§Jçù\«ÙNß|óÍùªªªëÇwP¸†Î#0zV&q`¹ºÖ;z(Çܹsun(oº#z˜R °o¡Ö óçÏ÷r”3 7ÓÃ\©þèaxÈ`5aý¶©Sn Ö^Ñ‚ú¦T%ÜHs¥"ÑÃðpñ&‹V±@y‹J€€Ù'žxBºçÚ=Ì­³]zØKÔ(o-P3ô0"W,§¼!.ÀN°þøn£‡¹RŒèa؟شD%å €âG@ùàƒ¼‘ö@s¥"Ñð£ù¬Y³Ø#<"í• %à”7Œt(Ã!C$ øjªáFz˜á—òe˜2e ËËËÓÝ;qê›2pt+=Ì•ˆ¬Â:òóûÕ? Ň F·¼Àà8ÓÊ‡Ï ’OäÖ.^¼ø éå·ºô0u¶P‹â¶uëVÍk‚LyAÝT¼} ­„’[)o(‚"ðn–YZZ:ƒf ’E|½¢¿‚†Øðºtçη͙33…PÙûQÀŸkÐøßq”7¶W~ÌQ”76P7PÞ,T…BˆÍ2ÛCÁßÃ(((¸Ìh»?¾5ž“¶ûаnà> ´"¸û(ІyÁ}ŠàæíþÌ*‚à> x-‚à> ˜ÞîfšÇ±hEO‚¸ÝŸµ6ÇN/>yfbk¼´´4ï.nj`÷7ìì²nÝ:ͺí€ûˆD[<¬ñïÁB‹Ú‡þ>M¥œÊ1£þ÷»Ý~‹T•³õ*¦°ÔÔÔv³5žQT’©`‰VLÊ&·ë:¹QºqA‹ÇC6,bMOO÷í)÷rÑÉ£¨D;¤½Ñr{5•5BÉ}TC½ ¯œÕP/gS_ƒû*¸G™{©Ä;H ”Ê€vñQ%÷Q £Û¹FÅ}t‹"ôvp»}!ЭñZ±¸“û¨9Å3fLÌo¼1‹‚ä!wÅØÝ( ÌOUTTÈÌÌ\ŸŸÊl»Ms[S\Ê}ôñµ3f̈ËÎÎþÏ~ýú%C |/¾í˜5kV_3í–šá>¶¶´îãâÅ‹§GFFv …¶  .œnöúp)k@VQh—™F¾ ÚªU«|n0{ölé54~#⧟~ª6Uí†ûwCH½{›n!÷qË–-,11QÚßE R² çÕ³  =qiÀt¥öÐ Ž ÄÏqî£G¡ªªªÙôÐh#M\‡ë•ç@‰ÜGç<ºÜGláÇ•A/³ˆó¸N}Np¿Ûýà3âakqõŽ î£Ã,‚ÙíþôöxÔ:Ûý ª‚û( )‚à> ž7zÿ™8q¢à>šé´Kù–;ÕÇëêê6…Z[£¢¢´VýÕgEú† š˜4i’à> Eh¦‚ûØŽA—ò–““#qSSSMo'‚Bç°ÄÌßÀ•G¹ú\žP2DAAAwA‚mÇŠPXXè;@&ÁŽ¨©©yxß¾}“`B(î$X,6K( lû† Á \RA‚ðZA‚0M‚m‰2¸•ëJE`*¬ÑF0¢•ÿco%A‚íÒ¥Ël&ö} mEðG‚åe„ ^F4/ØêÇê‰ @¢þ6ð|c5p´yƒy¬ØÔ Š`´( у òÉ(§–`Bã:­úbPgÀ ¨¹ JÒ«š ­Gˆu) Ö]ŠàkÄv6ÄÄ P% Ö*ˆ @ J¬ðûHH7ƒß¬_¿Þ{[à=½hq#±¨Áˆ €ÿ8wîÜff^9cPÆ X¯F{"Á:zÖ`D‚ðpÕA¡zJ´',õã¹Pj¹ý:ÓŠÀ H°ZdX5V‹üÚ^I°åååÅ¡Ôž“'O¤F$X5VyLüÚ^I°K—.ýˆ¬BMˆX§´'Eð’`KKKàÓõ,xŽFÿ+ Äå$XyV¯^}<--íñ£GþfI§ƒÑ(|/¾í@{´<†V=±h Õ·°K¿´ê4@A }–ª lË]°›Ú-H°-¦ÃgÖæ3r»}­œ Á¶Ø5ø"§ü /”ಛf‚Û¶ŠÀî*½Ø¥À5 ÁS.[‚F½¾$ØÖ+‚#á£999†RSSÅ ížPÒJàA¬#Š ðÿˆæY@X/þ%À•*+±Eò”†IEND®B`‚inc/images/prettyPhoto/default/sprite_y.png000064400000002212147600022000015077 0ustar00‰PNG  IHDR=‚õþÀItEXtSoftwareAdobe ImageReadyqÉe<fiTXtXML:com.adobe.xmp “KJºIDATxÚìϱ €0 Á˜ÊËÁ°°\:# š(DÊ}aYvuQUm,"þõ½÷»-Vf^“óó™ïh ½V¯ÄŒ ì]¼IEND®B`‚inc/images/prettyPhoto/default/sprite_x.png000064400000002111147600022000015074 0ustar00‰PNG  IHDR‚//ÍtEXtSoftwareAdobe ImageReadyqÉe<fiTXtXML:com.adobe.xmp ÁË›ŸyIDATxÚìÜA ÁT þ­ô¨†] ™{§’¬ð½B@[ݽ̀B@! „€B@! „€B@! „€B@! „€B@<B¼ª!„€ƒ#ÀÔ[“• LUrIEND®B`‚inc/images/prettyPhoto/default/sprite_next.png000064400000002516147600022000015614 0ustar00‰PNG  IHDR?Å~ŸtEXtSoftwareAdobe ImageReadyqÉe<fiTXtXML:com.adobe.xmp F=¸~IDATxÚì—1kÂ@†ß$Š¢!U0S3ºF„B– õ_ˆÿ@—N²¥ÐB6ÿ€ÿ¡{B²dÈÒ=­  u0öîÐÖQ­w“¼9.ËsßwïÇÝI»Ý"£D?›Íæ0$z"z ºçÀÛ–Ž&ÏD¯œT$ZR’!Í̧?x—TÞ/"`Ç@S”iÀ;Ñ@Ü€4ò?—Ú¶V«…r¹ Ó4/‚Ñ8À']lV«–Ë%së¥qðv<ü ü tè%U$ðcjš7zì½}qâ’èÇÌàdqÕÐ'(IEND®B`‚inc/images/prettyPhoto/default/sprite_prev.png000064400000002540147600022000015607 0ustar00‰PNG  IHDRÝeætEXtSoftwareAdobe ImageReadyqÉe<fiTXtXML:com.adobe.xmp HÔ>IDATxÚì—¿jÂPÆ¿¤A Q„„<‚Ppr‘"ø ÎÁQ_ P·J1CÀ—pt*þ ‚cÉ DªC¦ú'HLo-ÓÔ{¡Ð„ —ß=çÜsÃAV!xžGƒæ͉ž‰^Â…T*ît:ѶvOôÄ æÝؘgª¢ÇðƒgT·,aKþ̶m‡Ÿ5uP¿ßÇ`0€ªªèt:( tœ™¦‰ÑhI’°Ùl0é8ëv»°, Ùl<ÏC–eÔëõëçÌ0 ,—K\.œÏg;­V+öÆv6N1›ÍÉd¢ãó}ívŠ¢\¿9ŽC.—ƒ(ŠQF—*Y£Rú•J¥R ®ëB8Žƒ^¯‡õzM§Ï4MC­VÃñxD±XÄn·ƒ®ëØn·tšºÑh \.G?s7™Lè5u³ÙD:Æb±À~¿GµZ½7ñð\­VÈçó8N¢âXLê/Øÿˆùm¼³„ÍYÁ§Ü+X'žÔ1âèõûó;jj–? .‰ËwyÝIEND®B`‚inc/images/prettyPhoto/facebook/loader.gif000064400000004761147600022000014630 0ustar00GIF89aôÿÿÿqqqãããûûûíííÒÒÒñññ¿¿¿àààÇÇÇèèèÎÎÎÛÛÛ÷÷÷²²²»»»××תªª!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù ,® Ž$AeZ ù<ä ’„ÃŒQ46„<‹A” ߈áHa¡¡:’êID0ÄF„Ãa\xGƒ3€×!Ä ßO:-‡‚Rj—TJ‚ƒ* ƒ t †ˆŠŒŽ„—~—" ds]š  š)t–¥-"–i;H>³n§Qg]_* ‹ ®R±3 ÁGI? ÎË´¨v$ý›j3!!ù ,° Ž$À0eZy¤0¨£q £ãŒP¤Ð£W  )"; qXˆ^ÏD50‡† Ո̢%‹`‹£ÔrÏJ{ 1‡ºÍ$ʈ…‡!!ù ,´ Ž$@eš6$‚Æ Ž`Œ 3*Å=‹  …ßÈ Pˆ\"FÁ©’í²`PÐ-­ƒÓÐd5VÁ"2Ÿ|?n"!( ¸Š‘€è•)e€„4xyc?   ‡‰3‹…™™ ”#wyJ l% o€^[b_0 V T[0mœ $ƒ4 >„'VZ ¨cη3ƒÆ$Xš¼%!!ù ,­ Ž$`eš¤¢¨:D3 ÂH0¶,'j0¾Qƒs‰ ‚L(2HM¨Òj#Ðȉ…BŒ \Oéi`u§†=YŒù€EVL=I  ƒ…>‡‰‹•• suI WJm| \"_…b0 B¦ cV"d]*K1" H|@B?ÀI4…È#  S$¿-|¶|!!ù ,¯ Ž$Ð4eš¤a¨:D Äh¶Œ³·œI Á/€K¤$W-á 0(`3œÍÑFãÙÀ=±pf@ïýtéøQ£ìÉ  {f~*€‚„yS*mg) ”enu E^Z^ g@ kw(b& -w#"º xW"¼t #Ç#”%U$Ë`¶t±o!!ù ,´ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–<Îp6%tP5Ù¡êS|ÉîØH(²FÕ¯›c¸Œ€`05xz*|~€v‰G„0t#  F hŽ0  #C d 1  I¢#(i - “ À uEL q ³Ì" h%±$Â$<Š·q!!ù ,­ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–Îp6%tPÝñt¸ª¯é„5Å©3ÔÈn»G$ò€´ @aˆÏëwy{hoFS>k#  F Y" Š% E  Cb AI4$ (z¤:2• mI L½l#Æ# ¦F­#É#š>²F!!ù ,² Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨©ŠVñtKG‚ˆ22ôëŽ7‚D"¯ªé$)‘„±é•Qø¼Šqp8 y l |~€‚„6zw2j# F Œ" ’% VŸC œ ]¥6a$¡ Q ª:2 \  EF I—&Ãx ¯"Í“¬F4$Ð]#¸x!!ù ,³ Ž$Ð4eZiä ’J16„<‹ŽˆB” Š?$r½œTêHzDP'"lä(†1±5–y½Ãá8tg†œ—p,’qÛ”Múÿ*   q ‚„†ˆŠŒ€”"}•# b?y{ {)Šs -s­:–9>e ¤E,C\3 ‡^·3[ ¬ž¾¸°S·Ä|˜»²?!;inc/images/prettyPhoto/facebook/sprite.png000064400000010203147600022000014673 0ustar00‰PNG  IHDR‚“B‰ÁÃtEXtSoftwareAdobe ImageReadyqÉe<%IDATxÚì]}LWÀƒZ¥ ¢‹—¸¬–X©¢…Z…¦º"ëGÁÔ†Zm㶉øU?Rk›ö~°&šØÄnúñG»”v«"•bPiÚºZ[Je+*J©¥({Îè8̼¹3o>ç—\Þ¼73÷îý͹眹s' ««ËE ¸ñÏ–-[\¹¹¹¸e4”H(PXYå”+PNAùê»IÍë E¸¶grDÐ_C9døƒšØä>ÇéHD"” Ô¼Î#Â(ê~„š×yDˆ0 î~Ô¼Î#B`®õë×Ç}ÿý÷Ù³gÏþ“xhhhСC‡2Š‹‹Ÿ  ¦ô"ôˆÖ®]·téÒÇâââb7lØ0 ;^¸óæÍ<þøãcÓÒÒÝ´iÓ(jJÿ B<û쳉±±±1¸””4º´´4cРAÁøý­·Þ³råÊtˆ6\Á€ììì$jJ?%BNNÎþ²²²¯ùïH†]»vÍؾ}ûøU«V¥»Ýîn Q__eõêÕû¨)ý#°¶ûŠwBg”””ÌLMMM”:¹¡¡¡iÑ¢Eùp̉Ý×sssó¨‰n]sæÌùbÿþýGÄûjkkëžyæ™Ë€àOD@´µµÝ<{ölƒøžDSSÓµ£G¶Pö"¼ýöÛ Ë–-›‰Ž¡ãÆyàÀŒ°°° jF?&Bdddp^^^8†³CøÛ… .UVVžâINN CÃh‚à‡D(**š¹bÅŠÙAAA|t°xñâÝÓ¦Mû0š@2ìÝ»7ƒšÒO‰ÁµO‚%K–~ùå—MðSWZZZ1l-ðÚ¨) 7FŠwdffzV®\yáÅ_L~å•WJ‹‹‹ï‰æÎûž}û‚ÚÛÛ; ²8@Méy„5°ªsÝ”GpàÐpÕ€º¯Só:ßP÷)j^çá$”o\·çú œ«xÊqj^ç Æqôny<žŸà{»ëî„’ ¥J9”Jš¼ê@gg1hh ˆ„ÛèN(9²ÇT5¼Éäí)(þ&”Ô1gÏžešÃh•\‚F‹À7¾ð¤\g‰ïRúäÀX$·×A؈¸Í_•Â«Ox¥J5ºð<µm¶\‚ „ ™™yç;nK]‰¸••uç7~[mgå ÏËo‹#èhø«­   »cYÇâ9Z̳P®CÁGgQh†ÕAHqj¬‚м‹åòõËý.N>AhrÕXaaǨ«¥L½¸£•ÁiTX¾1Å ©ã´t†T'òI,ƒÿMH"€ÎᣠªÅ<ËÉw¸1ÈGÐœèò–¨Q{u«I(Y!— PòÕ*h=ß*¹‰ðQ¯¡A™–’+”¶õ C{=ô ¿Ô&w¼ÉûÞBZJ*é5¯L¹x].lT:ŽÕ"ˆuªOm²‹ !|d‰×½…‘¾/rC„’>”C0 ÀwˆT¼î-ÄÃOo7†XBNþ|9Ë"÷»V¹%^g‰÷µdõèH² :æ¼Ýëgmh<öÌ™3ªòfË%x ½™m¹c¤Â6­óÌ”Kñ¤‘åj4"d†\‚ ¬JÍRJØfD É«š¼Jviò*9‹=Tí$R­Î"?iVœŸ’¡Gj› C½Ìª/µc¥RÎdtôÄæWíí`­“H…¨eÒ,M^5`hêowÅûô˜¼j†\' 77w|ÄC‰†¥×_<ãñî„rJ+”:(§á¼‹š¬¹RŠYî. 7®vªšœ\¹É«þœ—€ŽœAà’¸;¬$.ƒôÔsPäàmlBËœE=}':.•³a.‰UîÔúáP®q¢LµEÐêýûB„Þ>y:ê¯ðV Ê¥ÿ2¸R=”ƒ ç'æ„M^5Sác”]ƬUÈÕ=‡“¥>z›Dªfh02ÜT†:€sÝ~Ùjˆ âp]¬dÙJ±¬E ¿°ƒ½9fRûõž¼Êò›¹6!A‚I$à²8ÙÒDKã=‰TnÒ,«\'NdåLôh ^é‚ÑRÃD Üx«ª‰;E/ól•\Ãñ&[)Ë0žÓ¥'ij~ÄÏ(mû2yU˜Íd¹w $ƒÃ&¯NwÙãŨý8]zúz]aZ'¯ -‚7“/·ßî>—'ˆò¥Ž§žzêÁ={ö<·}T)ŠÓénÔ Ô˜j'‘j!”%{dÞ¡‘C¼Öq÷îÝÓ'L˜ðÐÀ#Üü---müÖ­[›«ªª~˜?þA Õr:•Ýã,*5.M^õÉ S{^QQQjccãòŒŒŒÇ<ˆ'A÷ ÀßpƒÇjP-ŒÓ&¯š¼w ÊdýüóÏ/DGGGA{(Y‘€p@zzzœóÀ¿Ô¸hœni-fã­ÞE|NM¸ˆ$:t¨&_À¦’ x£êCZ‚×߀™hâÑh†çª&P·x"‚ñˆVsð”)SF1 Þü®@¬C­ŽDã®&:€á>ÌgPÖ¥æ·`,ÃmÌcú3’‹(X½2t:ð–'¾ _áó­šwX)Ûôa=CD—ïsºÛ„«‹5¬ìÈuÄ}ð‘Ε.ót¿ëöäYÊýÜ9àüÊ ¨3˜‘–É6 Lþ&ˆ0O —P¬KEÒÉÍ ã¸+R!!!,ŒMD‚3*Á,›jd›¦+|Ñ¢EñÂ<Ïì`¬:òD`r.BCCƒÞ|óMÖN{„ñ8&Ù›6mzåë,Û6ˆ‹‹‹¶²NžL&éÝwßMŽÀX7ëÍ&Ù#FŒ€òu–mDFF†[Yg èScÇŽ} ++k²mÀ¹ |ÔÃC‹>+ëäǤ.kðø!À²ÐÌÌÌn'¤°°ð’úz•ÍËŠŠŠzå£IIIEþF„üÿô®SWvñâÅ1'Nìw'Mš”€…K^ž›.((X*üŽz€>ß|ðÁÿó'"455µ†ô®S7³ŒQÂ믿>ÓN†ú0F/ŽÁ¹sçꬬS‘[·n}tÈ!ƒíÔh¨êå>fJŒ}ôÑG§;z ź°NV‰°`Á‚d;¶®]õ’ê–ƒvíÚu©±±±Y/¡XÖɪ£"òóóرuíª—”ÏÆz Î6r±§Ö½^á\]Ì:*aÕªUÇ/^¼xÙN-‹ú ^!³Ã†SÎZ[[¯ù,êP9}­U‘]7nÜo§–E}P/‡A•xèСÿvuuÝÒl à\¬C­ŽLÉ ÕŽ;önWTTœÌÊÊډŌVäe•––VáwÔÃa¡ãiV?1oÞ¼²ºººzͬƒs±•>Ìiæ¬ÞK/½T WaĦm˜HÒ)™¤^V}}ýu”z8),䮸ªæœj†SÎÔXc°ï"Þòx<¸ÆN»ë ¥J9”JÖ ¤)))–É6ð¿6ÃÿŠ·šñ¡— ‹ÔÀ¶ª‚6:qÇNO:Y2Lð+¦˜½X:›'¥–Ï¡ç¬!B17$v˜l Nz]C‰`Ž˜ä3 Œ#r$¸gh€ƒ†2” ç\ê2iƒò ”:¨ï–ŠF±L¶ a‹u¸•Íº„ä:Cœ‡r†Åiãžr²D¶ÍaéÊ«¼³£cG †Aù J5ñVʶUž>ʬZ‹™4„õ„¾}û¶··³˜ÞhÆÎb@»F;BäL¹©«³óDèËrpdd¤{çÎÓæÏŸÏruj6“ì÷ßÒÚµk555uê(Û΄À½h–<æ\………s´®äÁ ƒw{?l؃(Ÿâ c‰ è¡Ï˜1#ròäÉF,uÊ|{å£ÔmúƒÙÙ¾}ûsn·»OxxxÄË/¿<ËËË3|æe 0 å£#FŒÈ£®³€[¶lyxøðáÝë÷ÆÅÅ¥¾óÎ;©2ŒVdýSøõ}öoÞ¼ù uŸ‰ã3F Ë—/_j'¥QÔ‹ºÏD"äçç?Ù¿ÿX;)ú ^Ô}&!%%Å–žº]õò["x<žÏ쨸]õò[",X°à‹–––;)ú ^Ô}&ÓÉÛ¶mÛi'¥QÆ47AÏðCµ… –cèvîܹ²÷Þ{oŸY ®Y³f5~fgg§Ž3fVuuu9…ŽÆAñ¶gNN·{öì™ØÚÚÚ¬s"É«l^Ö¬Y³:;;o ÔmÆ Šf¶¤¤¤éðáÃèÀlâQ>êAÝf˜¦Keff~†Ï×1Öý;ãqL²ÏŸ? åë,› ð^¶âú‰x ÆjÖG«~a<ŽIö’%K*Tü_¿P×j³Øpµ.†; Þ:î¯áêcí4&ٌÌÙü.]ç gRùE;5œ@ŠO×Ö°N MII±L6Aà±Ó.áÐ@ "DÐÃYäÞªªë{• ÜĈD Ü1–È&ÜŸPÂ÷*ÍtùþJþÝJøpÆ(0œc¥l‚hh°ò½JþþN'Ga”uëúN'ƒdDDˆ0 n]ßédl‚ˆ²Ñ¾J'111Ü6 ‚¬‡ž’’]QQ±ì“O>™aÄš?^£ƒ’’’_}õU:/[ü`âÕì~ú駧×ÔÔ,{ã7L§Nšd|´_¿~ARß ˜åþýû‡oØ°a^mmí sçÎLÍ×K‰À#&&&º¨¨èåååñññ¡ÔŒ½”<¦L™2öøñã9è?¨x]/Á߈€hnnn­ªªº„ vSs:š=ï7nü– |ÅŠUD‚^JÇsüùçŸ/ƒ(â7jÂ^H„êêêÚuëÖ•|ú駗©éz!ZZZZwìØQöꫯ~GMæßD}ììã?®Þ¸qãIp ; ÒÁë#o .üÐív444tH}'èKYg¯²²²Å`¼:šâaˆ†%cÃÇ«Ô­æNVÉ&ˆˆ`ÄدæNVÉ&ˆˆ@ït"¡8¿ßÿÜàº=mìõ]ã:ᔋñ}ŽË&ð;Îb&hv¡ÿ`x»³?ÓU,áIEND®B`‚inc/images/prettyPhoto/facebook/default_thumbnail.gif000064400000000343147600022000017041 0ustar00GIF89a2!Äÿÿÿiii{{{ 000áááZZZóóó333!!!œœœÉÉÉðððÀÀÀöööHHH™™™ÕÕÕrrr!ù,2!` Ždižhª®lë¾p,Ïtmßx®ï|ïÿ9ÅHbKʳx¢¨)5àX`KÚmb€øŠÂÔÊÄ|Þ –2¦0æ£iäŠÏ?û% I€„…†‡ˆ‰Š‹Œˆ!;inc/images/prettyPhoto/facebook/contentPatternBottom.png000064400000000216147600022000017565 0ustar00‰PNG  IHDR‰ tEXtSoftwareAdobe ImageReadyqÉe<0IDATxÚbü TL T£ŽH`Ù»wïjÈÄ £‘2jà¨@€¾h¨³™IEND®B`‚inc/images/prettyPhoto/facebook/contentPatternLeft.png000064400000000211147600022000017206 0ustar00‰PNG  IHDR‰ tEXtSoftwareAdobe ImageReadyqÉe<+IDATxÚbd``h` üÿÿ¿ž&*ƒQG 5pÔÀQ‡ŠÅ$à8Î|IEND®B`‚inc/images/prettyPhoto/facebook/contentPatternTop.png000064400000000216147600022000017063 0ustar00‰PNG  IHDR‰ tEXtSoftwareAdobe ImageReadyqÉe<0IDATxÚbd``h` "`b 25pÔÀÁ` ãž={NSÕÀÿ@0)£7 j1¡;TìâIEND®B`‚inc/images/prettyPhoto/facebook/contentPatternRight.png000064400000000210147600022000017370 0ustar00‰PNG  IHDR‰ tEXtSoftwareAdobe ImageReadyqÉe<*IDATxÚbü ##c#‘€‰Ê`ÔÀQG 5pÔÀ¡b @€áø¨aÜöIEND®B`‚inc/images/prettyPhoto/facebook/btnNext.png000064400000001515147600022000015015 0ustar00‰PNG  IHDR9/Y—btEXtSoftwareAdobe ImageReadyqÉe<ïIDATxÚÜš?hQÇß™H$Ʊ”Új‡± í¡´ ”.3t06¥®A]2„ÅHÁ!l›Æ©H DZ2:TJÍà ¦WÒm½$¦&^¯9!-îê¿»÷…ïòðô}øïý~ïý(t¾d`øX¾ÄõJMðWpü œçÆþ˲¼¾Œ:gìx |‰G;à5ð÷N@ÞO‚åH|j€7Á[í@šÁw‘øõœÙúŸ%ˆ¸y…<€!À$-Mróæ ‰WÐQ‰AŽqóæ 9Ž¤©q!Z‰Bê„@ŽHrT¤¢Ó¿ …nõRÐÂÓq9Îû‹‹‹·Åò®å£n·ûßï¿I4¤L&£|>ß”×ë5 Ù…h>t¹\׈…ü³:€Âá°Íáp\%K.—F£Ñi›ÍÖ—òm°‡¡ ˜çûY…B1´¼¼<Í0Ì‹T*µK\$[R*•Ã«««3&“iŒXH,•J5’L&ŸLLL¨‰…ÄR«ÕªõõõÇF£q„XH,F3¶±±1c0†‰…ÄÒjµÓéô#N7D,$–^¯×.--™ˆ†, E»Ý¾I,d±XÜí$^©TŽ‰„¤iz×b±ÄK¥Ò‘ O¹\ÞÀ•|>@äR­V˜Íæç¹\Ž!2¨ÕjŒÕj}™Ífk’IÐ)ŠzzÞøáá¡'ägÇö÷÷`]Éd2{D–ZõzýêÉW½®>zÙh4Žgggã‰D‚&²h>y<ž×±X¬HäñG³Ùdçææ‘H¤Ðשׁ+,Ë6ÀZ0Ì#¨+ o!Š‘H„oš}¨ W=Ð/xcžñ$ƒ¤©ŸB^WZ¢´Èm‰Bn ÄÍ@{¬póæ y‚Nûc¤¤wܼm!9t¦ HäÚâæ+h 9 |Œ•D‡#—¿G\Ÿ‰½uoÀßþɬþ²Õëè´Wß[\îØ|À½šŸQ]’¿3é:I¤IEND®B`‚inc/images/prettyPhoto/facebook/btnPrevious.png000064400000001474147600022000015717 0ustar00‰PNG  IHDR9/Y—btEXtSoftwareAdobe ImageReadyqÉe<ÞIDATxÚÜš?hZAÇïi¤5ÆZBm´C‡XŠ…vÈPZ JÁ ¬MÛ¬A]2DpiÁ â 8¸XÚªƒC*‚R¡Ð’1C¥Ô bjIk´UJRíïÈRHKÏäÞ{÷¾ð]n¸û}ÞýÞýyïÇF#ô?â8î¤fؾ6€/òmBiþnƒ?‚k|ÛŸ±Ÿòx<‹¤£mð:øÛY@Þß«ô4WÀ§´ƒo#éë=¸ŒÆx¬Œ">N+)¤ì@l ¿RJH¼‚N3©Çq“@Î!65GidÒD9Å(ä4 äyÚÑD"‘ºU*¤ò¸c±ØM¯×{Fß’€ …B×ý~¿“Vÿ¢C®®®ZÀ‚B¡àd éóù®À,Þ§ (*äÒÒÒåh4êV‚h% ¤ÛížM$T*Õ„ã‘ÜBžžÅ€N§s&›Í>Öh4“DrÜ3&fÒf³éÓéô") 3é:??¯ËçóO´Z­à''A ­VëT±X|¤Óé´b¬Ô!-Ëd©TZ4 z±Vrª&“é\¹\~h4gÄÜ©B&“I›ÙlýŠFÒãñTêõzCÖNç¶L£ÑØ–-$V³ÙÜw8™V«µ#[H¬Z­ö@_¶Ûí]ÙBbU«Õ¾ÝnÞív¿Ëkss³çr¹^ôz½¾ã ~@ÿ×!}ooo_­V‡eqÕ* ;pŸ|…¡d—®Ç•ËåZËËË™Á`p [H¬T*ÕXYYÉ‚d ‰ÇëÁ`07G²…ÄZ[[«…ÃáuX‡4úŸ@ÌæÈZ*$[H 𫀂~‘¤k±©$-F![$[ŒBn‘@âb ]Æ;8nH¼aWƒ|ƒã&Ý'«èXĵÁÇ;V±~0wÀ6tTö"5áŒ{ ~‡ø:;9ÖÖ½÷0ð·cáUtTãƒ?_ì3¸Ë§æ'tB•äoì´ä/î•âIEND®B`‚inc/images/prettyPhoto/light_rounded/loader.gif000064400000004761147600022000015706 0ustar00GIF89aôÿÿÿqqqãããûûûíííÒÒÒñññ¿¿¿àààÇÇÇèèèÎÎÎÛÛÛ÷÷÷²²²»»»××תªª!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù ,® Ž$AeZ ù<ä ’„ÃŒQ46„<‹A” ߈áHa¡¡:’êID0ÄF„Ãa\xGƒ3€×!Ä ßO:-‡‚Rj—TJ‚ƒ* ƒ t †ˆŠŒŽ„—~—" ds]š  š)t–¥-"–i;H>³n§Qg]_* ‹ ®R±3 ÁGI? ÎË´¨v$ý›j3!!ù ,° Ž$À0eZy¤0¨£q £ãŒP¤Ð£W  )"; qXˆ^ÏD50‡† Ո̢%‹`‹£ÔrÏJ{ 1‡ºÍ$ʈ…‡!!ù ,´ Ž$@eš6$‚Æ Ž`Œ 3*Å=‹  …ßÈ Pˆ\"FÁ©’í²`PÐ-­ƒÓÐd5VÁ"2Ÿ|?n"!( ¸Š‘€è•)e€„4xyc?   ‡‰3‹…™™ ”#wyJ l% o€^[b_0 V T[0mœ $ƒ4 >„'VZ ¨cη3ƒÆ$Xš¼%!!ù ,­ Ž$`eš¤¢¨:D3 ÂH0¶,'j0¾Qƒs‰ ‚L(2HM¨Òj#Ðȉ…BŒ \Oéi`u§†=YŒù€EVL=I  ƒ…>‡‰‹•• suI WJm| \"_…b0 B¦ cV"d]*K1" H|@B?ÀI4…È#  S$¿-|¶|!!ù ,¯ Ž$Ð4eš¤a¨:D Äh¶Œ³·œI Á/€K¤$W-á 0(`3œÍÑFãÙÀ=±pf@ïýtéøQ£ìÉ  {f~*€‚„yS*mg) ”enu E^Z^ g@ kw(b& -w#"º xW"¼t #Ç#”%U$Ë`¶t±o!!ù ,´ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–<Îp6%tP5Ù¡êS|ÉîØH(²FÕ¯›c¸Œ€`05xz*|~€v‰G„0t#  F hŽ0  #C d 1  I¢#(i - “ À uEL q ³Ì" h%±$Â$<Š·q!!ù ,­ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–Îp6%tPÝñt¸ª¯é„5Å©3ÔÈn»G$ò€´ @aˆÏëwy{hoFS>k#  F Y" Š% E  Cb AI4$ (z¤:2• mI L½l#Æ# ¦F­#É#š>²F!!ù ,² Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨©ŠVñtKG‚ˆ22ôëŽ7‚D"¯ªé$)‘„±é•Qø¼Šqp8 y l |~€‚„6zw2j# F Œ" ’% VŸC œ ]¥6a$¡ Q ª:2 \  EF I—&Ãx ¯"Í“¬F4$Ð]#¸x!!ù ,³ Ž$Ð4eZiä ’J16„<‹ŽˆB” Š?$r½œTêHzDP'"lä(†1±5–y½Ãá8tg†œ—p,’qÛ”Múÿ*   q ‚„†ˆŠŒ€”"}•# b?y{ {)Šs -s­:–9>e ¤E,C\3 ‡^·3[ ¬ž¾¸°S·Ä|˜»²?!;inc/images/prettyPhoto/light_rounded/sprite.png000064400000010003147600022000015747 0ustar00‰PNG  IHDR‚wÏ\˜WtEXtSoftwareAdobe ImageReadyqÉe<¥IDATxÚì]{ŒÕ?{wE^.yº¬ « (-/¹–WiA1¾°°¦Ó&MI4•Z4mI”˜´ÿа6Ò Ö?L )•À®WAkµÊòX^«›಼åÑïwöœëÙÙ{gæÎÜ{çÞó%_fvæÌwßï|çû¾9w¶èúõëÌ’¥’•+W:Þ¼ãŽ;FÑa:ñDâ{ˆ+ª·‡8žËD'vðµk×ØåË—cß}÷]1øêÕ«EW®\¹(Š5S™ÿQ™âmË—/ÿ¢¦¦¦`fIuÖ€¡t¨¦YLƒ2(9j$@ €×eŸb±碢"ðQâ¿QùZ*{¨ ,‚q:,£›‹ÁÂÀ”””$*j .^¼È€£Þ'œ«Vå týÅ.]ºTÑ­W.\¸°£ €Ð`ü‰ã~ü}ÓM7%”/,j %²³gÏrè}J˜EÑ7Iù BÖà§T¶·nÝžÏw0”hË,ÁýrÆ€¢¼\ºt‰;wŽƒ@í“´ jy(+¬Ã:_vóÍ7!y‡óêÔ¨ÆrÀÑQRéNA±ð` ¤%}¢ÙÍn¹åæ-õìÙ“—QŸ!Y?+..®Î{‹€è@8†¼ónCJ9ë0à˜=4X¬k×®ÜüâoÍ$~]5×çÏŸçÏaæaÐÁ(åAq`ȆÈC9éä©3V•­ƒòÁƒ2¸Þ½{w6mÚ4þüÎ;Y{{{'ËLž<™—­¯¯çýÂ2yTn1µå-jÛù¼4LGtàåA Ι3g¸¢xà~„8ÀšššØ„ øýãÇóÆàâþ·ß~Ëî½÷^6xð`®„={öðgz÷îÍÍøm·ÝÆî¼óNŽÖÖV¶ÿ~‚#Fpá(À7ß|Õk(ž‘`”„gÂ[o½•+üý÷ßçþV×Г'Oò²2š€œ×mò_Tï_õä5X( Ÿ2e ©´(#CLiÅqb¾;‹÷`P¥7ji@ÙÓ§O³E‹qeÖÖÖ²^½zñÙÝØØØÉÑ” Ál?~<ŸÁk×®emmm|ÖáúìÙ³¹b+*:òU6làË®]»XyyybIؾ};Wf/À‡™­·UÍy˜ú$ÁÅãù©S§&–0 iI$&ц{òrÐtÚD¨þýû³=z°mÛ¶q¥ôíÛ—? åJgK%¬×ƒ âç0é˜é¸vðàA~ K¬ÊÈ‘#Ùš5kØ‘#GØ—_~É>ÿüs>cA>ø ;v,wìر¤QƒÞ'©X,P8–4´k%A Z`$ãö‚È#èkªÉõSú øJ• À@K…È{ê38WŸ‘kñ|ÀŸÅ’2jÔ(–ÒÒRÖÐÐÀË@ñ‡æ³ euÐÊö¤êÊ©K αŒ¹ƒ|õŽzÉbFB ¬³0óð °LÀÀÛ–@€3†û௿þš_/++ãeOœ8ˆ%a%pþñdzõë׳¥K—òë}úôI, {÷îåÞîÝ»ùó¦6‹q©tj<çVLF)8Ç5§ÐYX–æ|B1:OkåTêäh/É#(kê¸qãØÝwßÍ•™I 0€àÝwße‡âþ ü,ypdõ炶“úG>¡ŒÎçÈ™—Šd¾oß>îÊpð½÷Þãa#”G§ Œ°Šð1PŒµVf÷ ˆ;vpùP:–ȇS Y „—É™UÁ È%`)A_’Aaá£|û(J›i@†z± r]cÐeB fBú 2ÇÅC™¸'J(åçPˆžœ‚¢eJ®ßêsº)—V²Ð.eŸPÿÌ™3yû$Tàpåq@–ËÕs”NçækB)ñšÀPC½BU^TI†­§ö `€bu¨`ÀóÄÌUÆ…5Ôê«hFÍºç ‹‹k¢&˜@ª‚M¤‡dm!+S[Qbø#tx•:þQÔ_:ɈýÀl üôIìYØM@z5Ÿß<&œEI!G¬‰f@?̺É2æ2Ô2ÙkgS¨(,Á?é¹U…°1¥04Ð`´Ñ@ ¥co5_E0ߘcPZ('y•?“£ùGâO !¡d´—b™¨!ò-¼q#.¨Í«tÝn^µT˜³C`ÉÁRg¡²²òºÉÑJæ&s ]ípÉV½–|Zu»wª,ÈmïÙª·` ¢ ¯ôm^êL5 ºúœWEgº^K@PúñÇOüsÓLÄ9öÊkòÜ«2Ôz ûÏõkZ9Û6mÚÄë–PÏø1Ïj½A,!–ÒtU3ì *t^¬‚jÞõz¥|§ëúrb) ¨&׋5PÅx]«M¦^Wt*@¸‰4,y°r0u8‘©œe˜”(-’^‡¼¦‚Á àð1ˆõcžêÕn†õ‚#þ®‰ Þ0ÊÙí%¡”z-¥H(¥kü>Ÿ­z-ÂÇ –/fÚT¯¾¤:2 -x ~yMî$«W÷ ’…´6©PÔ ÎL§xÝ)lLUέEÐÛ`’ç5ÙeÉGøè&^OF¦»¼8-©Úcs!ä¤BLñz²Çd/†Ü„œòy'ËâtÝo½–|7ñº›xßOf1EZ«`!Ù»~·->‡ã)éz-% “™m§2¦°Íï~„LÖkÉÁG0 ¢›ÙF"(õZrB¶R³6%œc@°›W-ÙÍ«–Ì΢ݼjÅÔë&R¿Î¢Ü4«ç'Lu‘ڶ䄠Ìj:Á­bM)gkôtóëõu°ßM¤ªýlšµ›WCXLJIööQ¿ÄæÕLÔZ±bþ{ÌâûXÇçzw%–Ÿ£Ç'ðð“þ6b|èkñÆ•+W~âËš§J1;½Lf½nUsª×iój>ç%/Óÿ7ãBñ^ÀÀ77 ~çÙ"˜œ½T&Ú?33ÙæU·þC>XÀèð$q9ºäS €ƒÿÌ7’ä=EÇ7 /x¶~½]!vóª'Ì¢ÃKÄc³aùøŒøEÄ¿]'”ìæÕŒƒà÷tXO<>0!²×‹ºR‡©–†T?=ó†¹i6‚ ø ²ï¿'& þ Õ9€,Ã/-‚)ü‚‚“9f¦ûAo^usÍO½9‚Å$ÔµXÔm‚S7ìM¤N›fÝÖŬÂD/ôA¨s¡i™ˆ9­·©B5])A™çlÕ›AÇð™ [“exF´åF è»~ôߤ:OgóªšÍtóî@CÄ6¯¾$ÖëlÓÑ–}„ f˜ßÍ«ªEHfòîçº òcr¨IcD›:'”’ ¦×M¤~Àc²N?™häðdH!b:¡%ÚôB'g1ÕàÚÍ«iY¤Ës°iå¢mß/ ¦”ífiº¿nÊF½Y ¼;ÈE“U$Úf¿Åœk€·ˆuY Ý^TÅí'xç9 ™[X`>Ý…6Z „OQhc"|,++ƒWû(ñlâ*q»]¶¿ÝÒÒò•ŸÂ’!ê…6–eá?´iiiÔÖÖ& HII‘¾ÔÚÚJÅÅÅ2ëôµ»G ¥x¨2°J0V]]M³³³ßõUÃÁP¨j8S^VcTVVÒêêªÜcûƒ²Pö÷÷ibbB€’““)55•¦¦¦¨¿¿Ÿ:;;)33“ÎÎÎhmmMv‹ëëk*))¡®®.é‡÷`ÂÓÊ£«ÉÖ…˜ÞR«ç~uu%±ÚÜÜ,mÚÏœØô| d6??/ùóY < À¾¾>ª¯¯‰Âsss"@OOO‹1àTõ„„Q< %ܧ5)øÍzœDL/©W|ÀBÊšÍ1jˆÉÉIQOww·×Xð6 æöö¶ó`m€>??÷Î…æD\ëÚ´¯¿-3BÏÒÖ ç q b333þ÷Aãô¨@–‹‹‹”••õݳÓÓSZ^^¦õõuÚÝÝ $TH{ooOŒÒÑÑ!Ê33ý{öéÍ@Ð Œ¬ à………À“z ­™[·mKJJ¢ÍÍMIfæÖ„ùÖÖÖJr*//···‹t³ $,‡Ãá=)ÛôÈj•ý,°¹eù;°øFÁ€ïqdt̶‘(Ú0 ±µµ%Ï–––$0~ccƒ èèèH”€ñh Ú†ø-å‰ÿäe[S<,ÛÔÔ$Œ~úÕ¥‡^«x2+€ð gþ6 y0÷‡ñúe¨óhìëÁÈ_ˆÙ<ÛŒmlll„ï7_f‚æ-`ýHÑ“îCø¹ùfL»Ùj0جž¡Í‚˜ X=‚+`ƒMh!ûà>àÔÿ…ú¯/ð`«Ðaÿ•522âü‡÷»ßü/_ßÒþbX%m‚‡«—­Ÿ–w ýÍ›~?'ŠÏ ñUåj@?%­ñ«àáìe3‘}óÇàÀÀ#ùZÆÛDƒ|`÷ûÉs˜ùó¹Í‰?ñÇ Ww<üC þ/Àó«!ø:lAÃIEND®B`‚inc/images/prettyPhoto/light_rounded/btnPrevious.png000064400000002642147600022000016773 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<DIDATxÚÔXIK,W>=8ˆˆŠ¢ ¸DN(N· Yd“ \‰ W‚ÊÃEPÅHpØÜ" q$(MŒQÔ84*N8ÏCç~'}škçök“À£ßKݪºuê|ç;í² ]Ñ—0×ñš><>>ZïïïmÖ§§'ëóó³×_^^þP‡_Õñgu퇦¦¦%uî4é°ôõõ9é#†Xº»»#–œN'_ÀX­V‹c[]úæöööë–––?=Á[FGGý4À^\\ÐÕÕƒ0»Ý.y8A±ì^£œðŠˆwÍÍÍ?Âo¢Ïú1>==¥ËËK> ÀÀ@Õ¿ÙSG›ÍÆ÷°À•>UóVÅv…Ž9Aþ:Kt~~N777¯ØÕàL玵Šýü   /3¸_3}}}ÍÀ®IÂÃÃ)88˜AK~ã—#j¢££¿PS‚Âîé)¼Œ°’‚IØ8BôÂ5¹'k GÖbý8âÜÄ Þ ÀÈS<§3é¹€‹ŠŠøÞÄÄë–µx?ìQ:>WlÛÞÞ¾`7yMU=Šå¹½½=έJKKc£Ôêê*åYYYüRa€Ö××)33“uÀaxú###issÓ͈g.«ö$é©Øˆˆ [ONNX¿‰Hu-E­Enÿf ¶²³³Àòò2ÅÅÅQMM õ÷÷³1ÕÕÕtxxÈ/IIIá{äp8¨²²’Â\Xž››£ŠŠ š¥ùùyÖQWWÇïZ\\dƒ=E7^?°8AÀ333îê­?Ça®œû ‚ÓŠÏ&Ä›½½½ÔÖÖÆó‚‚nÉÉIêééáûÄÄDvdccƒ:;;ÙIÃÃÃÌØöö6åææÒññ1§Bll,-,,ð\ 4Ù ëC¤¤¤ä`IGÓZWšä 8í¾Š <žœœÌs(—üŠ‰‰¡¤¤$*..æóÝÝ]w˜¦§§SCCŸäÔÔ3\__O ”‘‘ÁëEaaaÆ÷‚1=ŸuW[[Kª*ÓÙÙÙ?›ª¹ËÉ Z’Þ[huuuññèèˆ åóòòr pˆ¢aee…û’×ä6GzÀ`è3Ù m;}îÔd—öF±ølY­­­î0F( ›###ÔÝÝÍsä —ª @¨¢`wmmŸÃ½­­-*,,äT@hƒeo-H/`&c°ˆ¸²²2c1Ôº‘¯}ZßéHÛj.á†vvvhzzšrrr8¿°‰€ „KKK)??Ÿòòò8r Õ²´´ÄÀ›à=ï gà°ÍpWëZFĵÂ,EEE¹·}b®ª:ò ¬¡Š§¦¦rûB¨£ú#wÑÞà4èÜßßç°Çz„-ôzSïölMß º”ÍsÈãWò½Æ‚ 1N6P.a †]-Áèù…ê –q„£°ŽC¤Hå6 tÞ¥÷e“ zªªªxœ »8 ’CEæg*%Í›/aèé-Õûªì²Þ"(loÑ«·O_Œc'`Ñ¥ÈQ€Gc°“Ÿ  ÉfÃWu–¯0J¾W{‡a_ƒ†\˜þmI¯ ¿¨óÕààà: rÚ¯AˇŽä¥´E_á.E pGGÇO.Àè©N¿­—¾-_xïû]¤ÄFHk ?Êß»ªÎÿç§Þû1( ÛücP…ºM·¨ëV׶u}XÝ›;88˜p­'awxü%À'r!¾1,–IEND®B`‚inc/images/prettyPhoto/light_square/loader.gif000064400000004761147600022000015546 0ustar00GIF89aôÿÿÿqqqãããûûûíííÒÒÒñññ¿¿¿àààÇÇÇèèèÎÎÎÛÛÛ÷÷÷²²²»»»××תªª!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù ,® Ž$AeZ ù<ä ’„ÃŒQ46„<‹A” ߈áHa¡¡:’êID0ÄF„Ãa\xGƒ3€×!Ä ßO:-‡‚Rj—TJ‚ƒ* ƒ t †ˆŠŒŽ„—~—" ds]š  š)t–¥-"–i;H>³n§Qg]_* ‹ ®R±3 ÁGI? ÎË´¨v$ý›j3!!ù ,° Ž$À0eZy¤0¨£q £ãŒP¤Ð£W  )"; qXˆ^ÏD50‡† Ո̢%‹`‹£ÔrÏJ{ 1‡ºÍ$ʈ…‡!!ù ,´ Ž$@eš6$‚Æ Ž`Œ 3*Å=‹  …ßÈ Pˆ\"FÁ©’í²`PÐ-­ƒÓÐd5VÁ"2Ÿ|?n"!( ¸Š‘€è•)e€„4xyc?   ‡‰3‹…™™ ”#wyJ l% o€^[b_0 V T[0mœ $ƒ4 >„'VZ ¨cη3ƒÆ$Xš¼%!!ù ,­ Ž$`eš¤¢¨:D3 ÂH0¶,'j0¾Qƒs‰ ‚L(2HM¨Òj#Ðȉ…BŒ \Oéi`u§†=YŒù€EVL=I  ƒ…>‡‰‹•• suI WJm| \"_…b0 B¦ cV"d]*K1" H|@B?ÀI4…È#  S$¿-|¶|!!ù ,¯ Ž$Ð4eš¤a¨:D Äh¶Œ³·œI Á/€K¤$W-á 0(`3œÍÑFãÙÀ=±pf@ïýtéøQ£ìÉ  {f~*€‚„yS*mg) ”enu E^Z^ g@ kw(b& -w#"º xW"¼t #Ç#”%U$Ë`¶t±o!!ù ,´ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–<Îp6%tP5Ù¡êS|ÉîØH(²FÕ¯›c¸Œ€`05xz*|~€v‰G„0t#  F hŽ0  #C d 1  I¢#(i - “ À uEL q ³Ì" h%±$Â$<Š·q!!ù ,­ Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨ÉzÊâé–Îp6%tPÝñt¸ª¯é„5Å©3ÔÈn»G$ò€´ @aˆÏëwy{hoFS>k#  F Y" Š% E  Cb AI4$ (z¤:2• mI L½l#Æ# ¦F­#É#š>²F!!ù ,² Ž$Ð4eš¤a¬:*Äر à1œˆ–ó‰v/€Kd¨©ŠVñtKG‚ˆ22ôëŽ7‚D"¯ªé$)‘„±é•Qø¼Šqp8 y l |~€‚„6zw2j# F Œ" ’% VŸC œ ]¥6a$¡ Q ª:2 \  EF I—&Ãx ¯"Í“¬F4$Ð]#¸x!!ù ,³ Ž$Ð4eZiä ’J16„<‹ŽˆB” Š?$r½œTêHzDP'"lä(†1±5–y½Ãá8tg†œ—p,’qÛ”Múÿ*   q ‚„†ˆŠŒ€”"}•# b?y{ {)Šs -s­:–9>e ¤E,C\3 ‡^·3[ ¬ž¾¸°S·Ä|˜»²?!;inc/images/prettyPhoto/light_square/sprite.png000064400000006663147600022000015630 0ustar00‰PNG  IHDRLw©*¦EtEXtSoftwareAdobe ImageReadyqÉe< UIDATxÚì]ilÉ.Ü`îà `@F¬Í}E2§Á€× ° Ž‘Ð"ø„”h#B£ä–vI¤ýEX o$òƒ?"-!ˆË ®åPVdÁæò22`qØ`npÞWTMŠ¦º§«§gzFé’JÓ]ýê½z_½÷êuÕxœÕÚÚÊÂâ¾änÙ²… 6ÌîùªeTK¨Ž¦Zà“ÜNâ³%JÂ(Pß½{Ç^½z•ýúõëÔ·oßf½yóæ… «'šÿÍ)ª7nÜøºZyeUVVrÀž?kìСÃ`úXA >§Îƒ!HÖL+(`1ŠP±v©Svv6¯YYY¨·©þè«7mÚtã SoºtéÆ¥tù}ÎS0ÈÍÍ1Ì4°Ô‹/8Pø´ê„kÕ AO Pû¦¶mÛN¨ªªúrýúõG$ÏXÔi+1ç`µiÓ†Q'–“““±`Ásž„YÕLÉ7§´´”õìÙDpÃ?’Yè,;Iä3©ÂÍàv/_¾d---ܲT$HNà ~·×¬Y³N:tè±j6+à†ÜOss3z%ƒ¢ Ö°T(>óÐc—tîܙӨ}ˆ×¯´j !<'r›j€³ˆÁüaæíÛ·ç3‰{”víÚñvÕMàè‡YÆàPA%¡ *xƒøNki§ÊÛ ø£‚hÐÞ±cG6cÆ ÞÿĉÜUUKXS¦Lá´GåzÁÒÀè>ߺuëw°2¬†&³&ÍÍÍ\¡éÓ§óO(zíÚ5VWWÇ&MšÄŸß¿ŸƒÀódz‰'²üü|>ØK—.ñ>ݺuãîÓ¿6|øpbCC»zõ*«°°ƒ-c V¼»wïrt‰>rÒdALB€9~ü8{úôilÁCôxð৕® ~4þ¾Lºd ãùµZ ¸W¯^låÊ•\Y( K–,a>deee¬¨¨(æ<ÀZ³f ³¾¾žƒ¹páB¶`ÁF9PË–-ã´jäÈ‘lðà÷ó8wî\ô!CØСC¹l]š£®vrET­–@ÌÔ©SùdJË’`F¦ÒÛÄg‰´°Ñ.WÂx. ÚG±åË—s¥«««Y×®]¹µÔÖÖÆ|_æ?àë?~<·ˆíÛ·³¦¦&>‹h///ç¼Ï‹wíÚÅÝñÌ™3làÀ1W<|ø0WÖ€I‚¥XǪæŒ:$hý§M› ,i™0€.Æ0ZV ™«³bWÀ°wïÞ¬S§NìàÁƒ|ð=zôà}‚ šjA<éׯ¿†+ÁrÐvýúuÞW„•³mÛ¶±[·n±‹/² .p @™9s&;v,ŸL̽{÷“U«N¸+€A(ÁØQ`ý,Õ²Ô‰ ƒr­@¸)Ò¿e,Ã=”—Å€äÀå3µ®Õ>2VœÍG?ŒñkÀ€ün¤&£ª;J ²ê$ÁêÓ§êÀìÆ<~"#Ô`A²öo;‡%`j«3¯È<såÊÈešpìØ1žN@Yt Áé@€ˆ GE,•ÁÝð >räçpàšàżPv\Ý¢¤‚ær1¸0tqMöÜ­@âú=ulbeÒïQ18™¸Â|aq2–¡À”Æ3™¸‚nŒk Üš™ìÊø¢ö³º´jð¸ð)u‚ü9sæðñI°¬›xz<Ç„Kw$9·érž”v‘ñ- r³ ``ëÒ%PÈ®XÝHí£ëPœøY­_(È«je@à¹,´á9è%XŠu}»nݺŸÔé©&h†æ¹]-Óµ4( ëTY šS± Љ×^¾úƒír…[ôñüé/ߪ•Éí/:‰=³³øW6l¸ùÑ~VCÂþ@B¾‡ LÛ³³2T,&nu h©ÿ?‰Ïzuñ#ØÓ[„îyêÑ[Ô4¹« |Û¢¶¼ÎÀ=+©ÓwxC§úuBí· aq_²CBÀ’Zx £wÀV]ÀtÚS7欥¶¶ÖÕNdPr“naêq”HhýZå‚0U˜Ü±nïª3¯œÚÏTËM0u@K—.ÝãZ7³¸ÆÞ»l“צƒVåjöÏm¯­m©üBM¶:K(»wïæ¸- E/n¡ÊõÃuSôUó7MËÊÃÄÊT·²Ê•üíÚ­nœÀTS7±.U(`Kt.f$pnVÖ¤X˜j¨]ÑÑy´NYiáV²M-Õ_ÌöS°·°“kF`1Œ¿K"tJM­Å$q B®o‰k¢VæµPrJ+ürI÷Ðɵºa¼k?Ó£ÄÕ¦I¤“\kÌrJuR™¼æZgÚ.ß±K'âѹµ0ëtüL“ꤦnò§ô"Q·¶sÍxãIeöQ¦&¯nfSÍ—œ^ݤ"²¿¥Úµ{•ëËËw¼|ÇM¾ä%Ó÷CáTYÙy˜Ó^“Û‰¯aåa©–ëë~˜Ó~•›4Âë~X*åúöòm:»ÉH8S!7aÀ(ùjÊøƒ/—;ÈM0 ܾFà±Ë#¹¾½KÆdx‚$ô­‚M#¼}yø¢KTu‡/‰¾’ùò.é— %šVÄ@÷ª”òc6Ý+†é6‹×ÃUQ/‡/©>ɶº˜úNç4xÝ+”‡ ©ë‹…Ù¹‡nðºA{Ý“RöLåÊ—þ@v+œv>öÃT¼Ì´Ó!ˆÛøØ1["Û,‰æZ™òûá!ˆ×´"žKÆ;²÷’žøyø’R Ó-ËÂÉýtÏý>qÓ–È‚“Ы‘îõ#Ù‡v‡/nåq ’mâmU[ï—[%×õ$c‹º¸¸¸Õ¯j²U¬Ê•ï’nWakZ“ª-ê\k,ñû¸Ì4†éò;·q,¥yX¼½&“Ã/ ë²û*TZí‡9íWÙíEyéðÄ÷͈CT|¯JW‚’ëkZ–°° K,†ìرc },¦ZNu‚h>Ou?Õ=«V­ú nÿ¾RÒùÍ7-,Œ”Â_Ü~MõÏT?¥Ú[ÔOEÛׂƨ$‹o &,J}¦´×Q-´ÐþƒêÚh4ú³Æ‘HDÇWÇÛˆo:XØb‹RõTK5´Ÿ Z·e±,&x×'À7pÀÊ•û(¢¸µ¡/7à­¥¼K…,/|LâFÖM¡X*]æ+ô x«´ù ?&d” ™¦|Ó>­ðãwe2û·i,€×X½jh"V¸VTÅ ˜B릨´ ?&dÔ™¦|l¿º¸ Ð"6ôû xï·I5"¬ˆG¾¶G,í²  1MZ±Ç€·•¯,5B†W¾Á&2í*‹rº¬JfånŠ _¦ÉÁŒø¦EЧãg,×RýÕ‰¸Õ(®Ñ¶VЕdñ 4Ó7ÝŒsûÅÛÍ›7'…o¸[nï„€…E)¹òô…ò£®ôQ$V1ù:Ô vj)87¡Áí¾U²ø¦……‰-ž ö~Ÿ ŠuµP´U£’,¾®’ Ô'JûCª=,´—©î‹F£MnG"_o#¾é`aE¥0ðj í'‚Öm)Ò€Åï¦ø˜šy7C!Š+Í6ô…¼ m’ÙfZ³G¾Á}%·° Å*E¯ÿÿ^ÐäðVi¿$~OÐ_€öÓò3ÉÂâ?~¼5óþG™ƒ…5(+Ø šùÂtë|ƒïÅÕÖ?i]•tݲØÿ~ϵ!“,¬N¹Ï åÙÐ×ð®³I5òXyùX­XÚeé*bš´¢Ö€·•¯,+„ ¯|ƒLdÚ',Êér°2+w¹µ£ãË49˜ß´úbo{¿OU'VÌq¶}^6ù’Å7ÐL?ü-êp·",,ÃW¹»`Üÿ±ÏmqÃß„_ºX¾ã0(‰òþBu;Õ6÷Ø/Dn´1IJ iÅ?]kksŸ‘1 @ýI÷ë0j¹úpÍ]T :6„Êý* 7ý7Õo¨ö s_°ÙwMÄ·¶!`î ¾›Šïr½ s.ØMø‚ê8ñÒ&®å¯T7°÷Çca¦ïðì(ÕßRý1„É°zaQO‚¼Rª9TŸÚÜg`ˆOÕTŸ'IÞqîÓ¾deÊoÞdjZB`Vþ+ÀAÉëî ‡IEND®B`‚inc/images/prettyPhoto/light_square/default_thumbnail.gif000064400000000343147600022000017757 0ustar00GIF89a2!Äÿÿÿiii{{{ 000áááZZZóóó333!!!œœœÉÉÉðððÀÀÀöööHHH™™™ÕÕÕrrr!ù,2!` Ždižhª®lë¾p,Ïtmßx®ï|ïÿ9ÅHbKʳx¢¨)5àX`KÚmb€øŠÂÔÊÄ|Þ –2¦0æ£iäŠÏ?û% I€„…†‡ˆ‰Š‹Œˆ!;inc/images/prettyPhoto/light_square/btnNext.png000064400000002603147600022000015732 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<%IDATxÚ̘ÉKdIÆ£´ÜWƒ *h©šV\pQQ<8 ‡éƒw/ãe=Ø‚ÐGÏóˆ sp\fă :½(n‡pWÄ}«ª‰/¨(²_W•e_ª’÷*_f¾üE|™¯ln·›l6“âàç|ýÈ}JùšFnûWåŠuÚívæAIð\ïÞ3È®7ÞFÊáË'—Ëõ ׆¯RQ"""Š^__ÅX LÑÑÑC‘‘‘bø÷A£$&&’Óé¬cÈ_ùÚª*ƒzÐŽ ð——R`<,Tà?ícˆøÍòX³(®ð0¼èÛÛ[ŒcÄÇLJ5¸Ý”4< `õ®zÕÀo«Ðàí ¹‡+¸éÆO´XÂ#gT@r²éú*C?5ÀQ¡«ÂÊÓœ¹ž¤%ÉÈ\,b´¦¦FàVVVDÆf1•xHÐð4ª5<ðüééI®TÜC)jèççgióz†Û°.¬ÆÅ̃qþˆðCµ®ÁîЈ,m…AÁîïï)==ªªªüæææ›YÝãX‡—›2‡A222D=———RqŸ——GÇÇÇtrrBeee2^“'æ988 üü|yŽ1x~ãúj~Q' ýââBÞ‡g¾äýÑô˜¹EÁâÅXÀM©ãåú25”fv5†Y©¨¨ˆZZZ¨··—îîî¤_CCƒ@TWWG¹¹¹bŒœœ:<<¤ÂÂBêéé‘>iiiÔÖÖ& HII‘¾ÔÚÚJÅÅÅ2ëôµ»G ¥x¨2°J0V]]M³³³ßõUÃÁP¨j8S^VcTVVÒêêªÜcûƒ²Pö÷÷ibbB€’““)55•¦¦¦¨¿¿Ÿ:;;)33“ÎÎÎhmmMv‹ëëk*))¡®®.é‡÷`ÂÓÊ£«ÉÖ…˜ÞR«ç~uu%±ÚÜÜ,mÚÏœØô| d6??/ùóY < À¾¾>ª¯¯‰Âsss"@OOO‹1àTõ„„Q< %ܧ5)øÍzœDL/©W|ÀBÊšÍ1jˆÉÉIQOww·×Xð6 æöö¶ó`m€>??÷Î…æD\ëÚ´¯¿-3BÏÒÖ ç q b333þ÷Aãô¨@–‹‹‹”••õݳÓÓSZ^^¦õõuÚÝÝ $TH{ooOŒÒÑÑ!Ê33ý{öéÍ@Ð Œ¬ à………À“z ­™[·mKJJ¢ÍÍMIfæÖ„ùÖÖÖJr*//···‹t³ $,‡Ãá=)ÛôÈj•ý,°¹eù;°øFÁ€ïqdt̶‘(Ú0 ±µµ%Ï–––$0~ccƒ èèèH”€ñh Ú†ø-å‰ÿäe[S<,ÛÔÔ$Œ~úÕ¥‡^«x2+€ð gþ6 y0÷‡ñúe¨óhìëÁÈ_ˆÙ<ÛŒmlll„ï7_f‚æ-`ýHÑ“îCø¹ùfL»Ùj0جž¡Í‚˜ X=‚+`ƒMh!ûà>àÔÿ…ú¯/ð`«Ðaÿ•522âü‡÷»ßü/_ßÒþbX%m‚‡«—­Ÿ–w ýÍ›~?'ŠÏ ñUåj@?%­ñ«àáìe3‘}óÇàÀÀ#ùZÆÛDƒ|`÷ûÉs˜ùó¹Í‰?ñÇ Ww<üC þ/Àó«!ø:lAÃIEND®B`‚inc/images/prettyPhoto/light_square/btnPrevious.png000064400000002642147600022000016633 0ustar00‰PNG  IHDR=s ”tEXtSoftwareAdobe ImageReadyqÉe<DIDATxÚÔXIK,W>=8ˆˆŠ¢ ¸DN(N· Yd“ \‰ W‚ÊÃEPÅHpØÜ" q$(MŒQÔ84*N8ÏCç~'}škçök“À£ßKݪºuê|ç;í² ]Ñ—0×ñš><>>ZïïïmÖ§§'ëóó³×_^^þP‡_Õñgu퇦¦¦%uî4é°ôõõ9é#†Xº»»#–œN'_ÀX­V‹c[]úæöööë–––?=Á[FGGý4À^\\ÐÕÕƒ0»Ý.y8A±ì^£œðŠˆwÍÍÍ?Âo¢Ïú1>==¥ËËK> ÀÀ@Õ¿ÙSG›ÍÆ÷°À•>UóVÅv…Ž9Aþ:Kt~~N777¯ØÕàL玵Šýü   /3¸_3}}}ÍÀ®IÂÃÃ)88˜AK~ã—#j¢££¿PS‚Âîé)¼Œ°’‚IØ8BôÂ5¹'k GÖbý8âÜÄ Þ ÀÈS<§3é¹€‹ŠŠøÞÄÄë–µx?ìQ:>WlÛÞÞ¾`7yMU=Šå¹½½=έJKKc£Ôêê*åYYYüRa€Ö××)33“uÀaxú###issÓ͈g.«ö$é©Øˆˆ [ONNX¿‰Hu-E­Enÿf ¶²³³Àòò2ÅÅÅQMM õ÷÷³1ÕÕÕtxxÈ/IIIá{äp8¨²²’Â\Xž››£ŠŠ š¥ùùyÖQWWÇïZ\\dƒ=E7^?°8AÀ333îê­?Ça®œû ‚ÓŠÏ&Ä›½½½ÔÖÖÆó‚‚nÉÉIêééáûÄÄDvdccƒ:;;ÙIÃÃÃÌØöö6åææÒññ1§Bll,-,,ð\ 4Ù ëC¤¤¤ä`IGÓZWšä 8í¾Š <žœœÌs(—üŠ‰‰¡¤¤$*..æóÝÝ]w˜¦§§SCCŸäÔÔ3\__O ”‘‘ÁëEaaaÆ÷‚1=ŸuW[[Kª*ÓÙÙÙ?›ª¹ËÉ Z’Þ[huuuññèèˆ åóòòr pˆ¢aee…û’×ä6GzÀ`è3Ù m;}îÔd—öF±ølY­­­î0F( ›###ÔÝÝÍsä —ª @¨¢`wmmŸÃ½­­-*,,äT@hƒeo-H/`&c°ˆ¸²²2c1Ôº‘¯}ZßéHÛj.á†vvvhzzšrrr8¿°‰€ „KKK)??Ÿòòò8r Õ²´´ÄÀ›à=ï gà°ÍpWëZFĵÂ,EEE¹·}b®ª:ò ¬¡Š§¦¦rûB¨£ú#wÑÞà4èÜßßç°Çz„-ôzSïölMß º”ÍsÈãWò½Æ‚ 1N6P.a †]-Áèù…ê –q„£°ŽC¤Hå6 tÞ¥÷e“ zªªªxœ »8 ’CEæg*%Í›/aèé-Õûªì²Þ"(loÑ«·O_Œc'`Ñ¥ÈQ€Gc°“Ÿ  ÉfÃWu–¯0J¾W{‡a_ƒ†\˜þmI¯ ¿¨óÕààà: rÚ¯AˇŽä¥´E_á.E pGGÇO.Àè©N¿­—¾-_xïû]¤ÄFHk ?Êß»ªÎÿç§Þû1( ÛücP…ºM·¨ëV׶u}XÝ›;88˜p­'awxü%À'r!¾1,–IEND®B`‚inc/images/follow.png000064400000006624147600022000010571 0ustar00‰PNG  IHDRŒ(,MÆtEXtSoftwareAdobe ImageReadyqÉe< 6IDATxÚìœ l×Çÿ³3{Ù»ÞõØ{¹Âl $¥b§9Û(µIªH ¤R«ªM4TÔT@’&=\©JÓ(„¶©Ú¨UŒÚ«ÔKSB ±¹o¯/lŒ×^Û»Þ{¦ï{³»ž];66$x?ôØõÌ{s½ßûß÷fgEQ@öô?…Uì㇬,ee*Ò–6 …•ƒ¬lûéØK †Áòã‹ãÙâ¼[Y ½d€Œ(d9̪(ü_Ú®Ø?þ¿ òïáH]¾&4»¡ÓëÚÄ ù¹ðÔû eÙS>ÿ1Ñ eÀ¹€¾HBr¢rƒ40*:A½.F1f1—Ƈ§~e+Ë%òF¥ŽûE‰©Jgð$¼áF„e¢J€aEÜe¥¡™°°ÿÒ¢`B0Ú‹è…Ù˜7õ«â‰–·ž&`nÌÎ(†/Ô o¨‘Uò0`¼ ˜ ƒ%še":&€1BÖ±„ † é ²hecSF_˜Ü— wGrb3é8f"Ä/qÓAd°(\q$HÑLôõêh…€A8êG(êE$d%À?e%ƒ$ ÊÄCG€Â´B%æœBþ€DARÕ#Ê\Pˆ» …j2eQ4ê’¶‰dñ¬Xæ,²æŒq`d™­Má®+m!†Ž 2AŒ$†èPxARIÛõçnfÙ×àKEÛ`5”`û!aѲ $x ™iшQ:r¹ÎÌ¢ŸŠÒüG±(ÿ»ð±ÇÙ¼~È>–lr$+%!%kJš˜ëÆŠ¬åXV° %Yw¢½ïj¾VßþO3-£~jˆ‘b‰6KÚ>ß& ,È{7<»q&{öÀÙ¸þ£Ÿª} Ê` “쟮‰Y d±ÒÔí„Àèž”YÆn÷ÕBÐ/KÛðf–òqsá&Ì:˜¤lÔ{v£¦q=<³#I˜’? #kŠ‚+Ê’ò3Ê0Ó¶rJV¾¯a+D ´uC·ŸŸ³+Š·`Ë[L™ÀªyUYF·óã ˜,ì€õã{¡gÚ+‘g.E{oÎtUCÁAiki6ãt¬,~³³×@Ôáê~{êEw°~dY’ÌERЛ*.£˜ –%[p®Ý™´‘žÎ­°dó02ÍÓd¨ ³önƒEg`–LYb{9ÿþË·§#hrÁ`êW6£dÇݳv°Qkǹ‹N:WL; 7~6`É5ÏCyÉ68lwð)þ–Þ}ø—‹)Ë`ÌÑ$½Jj5z…‰wø/þ\=S)v!êºá¶«ÄÚú€H8_±eA?ûŒŒºOþúL«ÙÌË]‹ý˜2²«$Æœ÷L[%!/Öòã" ìÜ$õ‡…Ü÷—/ (k%VÛ}u –p÷ù<Œ– 1ºA3¤+-±mfd9“Õbeê"±‹žo*Ãójðør…—{§¿ ›R†H5‰¦ -k0m{¨öùFuYv ÛÞ,ÖÁÌ­AÈÇ”*¤ncAî:”U!Ì ä?ù‘fˆOUcùœuð÷0pýë–2:pö5lEݦÛÆòÂÍøÁ².~\ß\ð ²ä2Þ–Ÿ—<¾eJÆ2Ü5ãå,žÀyü»aÚzþ76ûГª,WTbýM± ©Š9K-ôÝÎFí7n¬v¼øV^~w ¬’__ô&zÙH„4^,Eåè{–ièö-µ|”•˜+ácM±Ï‚üµ(É.G¶RŽ€W]¶´`=B¬#{»€phpU­9¼y6oËÕµË3—a²µ žØ™€S»ò’*,œ´Ûþ±ë_ÐÐV‹‡—1P{ìÇø§”I™‹qçÌ—0År‡%éÄþ¦gPßùî ²£-ýÀŒ!4ñ߸¦,¯ÁlÄß:µ A6šç3‰'ßÿÜß*pÜåĉ¶j¼[·9–Jø½ý6˜[,-¦=S‘ã­ÕX\²>xGÅã‘Ù9«áë2EïôC§wñcJú)ûó\Ü5Ý2{--QA;Ö\K].]¿.+ÚçÑí¸pÑÅã™·n„Ù`ÇŒ¬Jô1x£Ññ%×<wÌü &[–pX"rŸ´¾„Ãm;˜{•Ç^ÆËŸž`Ê;µÁ‰úæ:ÞYÓ²Êq¶Í‰^Ö›–æª æp5¯_`+…¿·?†Ì¹C·§Žu¹÷¢(· º¨¹ÌE‘ýeïF,žUÉ•¢ÈR؃N—è¤Á÷¥c™Ï!×N|aî:¾-‘•ò*ñÑ©<ðæÙ^LaÙ*”“-¥¸géfܳd3V-\Ï—ÙÍ%ª²EFvý ¢•Ï£ eYÆi¸}æ (´ÞWF}×;ø¸ùWãvó8)èÕº‚Ñ—ñfÕû¶ÂÌÒ`J…Iº™ý,¥¡ä¢h$&TEˆÍ ÕÓ~—‡oOªìÀÅ•(È)ÁY–Éœ¹àă«ª`c.mvÞji¨æõõ&µã“\ŸæN¶WêÂMÓ×±ôð埜©Vω€‰©FTîøÉuÑqÐvwÜ‚Úú]êyGGvMo›± íÞ:œv¿ o°u4·RÁêÛ+ävöƮͰq¥¦ tµß¥Aóé+É«cí(C"°ØU`hÄvû]˜;¹RíßØ”ód‹ªM—êæq)ß;½.,,º}XñàXK5J§¯F¦ÉŽÃ »ÐÖ[ w¯ ‹J*1#¿¨y„àcÿvË)i[Ç/Tã¶Òõð=Øâ55ã3kÚ±âaÇÓ.idi¶M=_ˆê™­1EÁ5-±U`Ñ”oaVν¨k{'SÆŽ¤3ãÖ’­¸!·’~ËëGd?>lüƒìðØÉÉ ,è´U`ñ”jÒ¼ d’ñºÖ0íøÚ«xÐIÁëWæì`£ØƒSä"ôÉd唹¸†oOnæô¥]˜STŽÙ…åøïñj®DÔñ÷¯¬âqÅØ2ª¹ŒgÇr q;r­å•a÷GÛyí\ÕëbñÎùv'V¯Ø «Õ“U,ÅÓÈŸbWIÙu|½¶u^Áôœ»pß¼×q÷ ¿Å¬ÜÕ0ë'aIá÷PZðmè„~zìâŸp´íã'i=t5ç šzœøàä¯qûâ ¼pe£óyÄer2‡ž1mð ßžbÚÑÑíÂÅòK€3î]¸xºLî:}¸I@‚תåûhw»pÉã¤âs.TïqßÂxò¡z´zj‘ÁÔær^ùOÜÚÄ<Χµž`œõ?^´`Áä‡xüTd[–žý,u^ÎTÆ”¨Ûå?‡} O]•>¤ÇL”Ò©kÑá;†¾ð%#ÝE}üWV£1òßÝ—Ø'SÛ$u.F;) wÛ‘ÏÒ_’ù¦ŽZ.ß4[jÍQëiÛÓ…înyyê6†jOÊA@xYÊÜÕ¦¶§à˜fk)õîéP–Ñ­‡T£Ì)¾?Ú?Es1´-‚9{Š—…üÉõ>Úg¶XÆTÀÎLßÌÒ|º•A3ÜÃéF‘bXSqçì1'Íe&ÃØ}ò;,+zmLÁ GM b&Œ’ ú|t5YÑg­{…¡ GGÁ¨Þ4p$R°ª=h÷9y°˜•«v -»ˆÔöÔ!\ ñxèòíù~t*¨ñú´ž "7Á;NT4 0 ܵɪº(},îI­Ç·Ï õùk™‹R?ꮋ·õ[°çܘҘ1#çîëϹßÆÉK½j^BÒŽþ±¸5ï ív“ÖëúãRª¯KmÏSÌAþ¾\ûøþ³~ Zw2Ø9r˜RŽŸ–3.K=.Ú§IêÏ/wl#µ®¾óxÿÌc¸gŽ™eE«ËýáNìo|žy‘:7—|kà]D>"Žnô]iûñ¶ßq¼wzš»÷%–iû=.ô¸ªç§ÃP·«Óå3U.öÖâƒóOò83*‡püâü± qß÷€ym. õqÉôO4?›v¾ó=<·×~”RHb"Ya!åÉ·´¥M+#B‚)Πü3ý¼cÚTú™ˆk F§è (=Q˧šú› RÒèLH=!c€3!Küï~`t$ÁÀŸØ§DY‰ðÍ(‚æaüô“m×7&štNàã«,JT]ìÎ9Ó-+²M-0À¯ÂÂ,"HêÒ4( Áb &$ úÜzHê–—€9â ´®Ô#‹?o¢ßz0Xèý0²æ7“i…™( Co RßC°D|øº$äOóÓ öAæ‰3î¿ï™kXôweBg`2š! ôºÒ︛`ÙE„Ò£×-Áë1© -7H=žH¼Ñfrz4™eõä… îÔT Ô×K ±QBííöûXÂ6`†^4q¹Ä‘œ,ÎÌL•ýÝݲeÉ’ ªœFÀ¬+Ÿ;wFö¨QÒS]-þ}û$d…Q©»Ø 9âÙÅÌ2ãHIQ€ §¥‰$òÇÊ•k\¨21£¬L± Áôù$ÔÑÑË.Á -È¡˜œNÑH€" ähŽ'`25Üè* (TE¡ÎN õôôe›a†Ãè;hÇrÎÉ6ø"b…€‘ À$HÀ*ü›`1Ðee™³&H€ ⢋I†à  R¿ôŽtÉNC0fQ8бÒÈeT lb3ŠÌà±xɽ C$ñ†ªŽd; m°˜1Ñ0‘:&ÐØ"³cKØ ±0‹Í0‡wrx½’qòÉ’5{¶h.—´¬]+m_-þºº„Ú»²²Ä{Ì1’>}º8ÓÓ¥ñÃ¥}Ë–è c`ÁlÄcd;žiؼyRrûí‘ëÌÓNß?JíâÅÒºaCL;”@KŸ6Mò.¾XÒOqšcQRêÔ©Ò]S#={öHrI‰$Ië¦M*Äí8‚ÃH<ÙÄŸ)K›„ž ¯¿^x@'&R…šã `™°t©tã%»ðÜýA°©I¦¿¶—/_K‹Ôa Å—_.£~X~~þyq KÓ餑Êó,”)S¤eûv Cnšå™‰ÔL"3tìØ¡&5²ã¾ ¡¸Ý’~ÒIâÌÈPŒÃø UÖ°¹s¥ì®»$sÖôÙgRõè£Ò Ö/)0`‡þ´¤$µEÐÌØÌîÝÜj äžp‚”Þx£üøì³’‰AyÖt Ê}˜¸ýß|#Y¸çŽ#¤ŒSO„»úî»ÅßÚ*™N§êSQaœ¶¾`P!˜:Àk1)…xÉäC Ïرê=ÕŠ/(Š” ŒÛ ÔÜùó#u*1AALbê ökݸQÚ~øA2V¯–ÜóΓì3όܣÊábÃÇKÞ…J.ô÷å—eßë¯K°½=q/ÉâZ°a˜~¿“ÅÉI±LP&°L• ¹qDÔ»O!­`¹\ : BMÒû‹7?î“•Œñ´@~=Lp(SPè¶>Q³fÉÆÇ7:­7„Þ Ld%häHää€<('í ™µæ5kÄ·y³´¬_/…W]%ž‘#{A dÀNI.+S©Æ®ï½Ä²V<Äc6pú3€cÅÝ\ÀpÁLåA”õ §Œ'c¡WC……2?/7îí·%4fŒtã~éwJ>Ë4çÍ7e&V€¡ ‹o¸A&¯[§Ú»b…dCÕˆA‹ÛË`+ê§=Çä…±H°uŠe0ÇÅ1xô±³ßòŽÆ3ûüsI† È;ã ñ™Æ–yúéJ%ñ¾’‡ns¿×ñ_þwH{9&šýTËfÅm·I-e«Û/ ,² öJ-ŒÛÏ7 bŽÍòuü)þ2€ÜŸ;nüí{dBwŽ}òI©„ðÖ.\(LN&ªd7h³ôÊ´þ©§dãÓOK3Vb€TzÓM²+ã¿W\¡VrùÍ7‹çœs¤ /´>߈׾BÎ>÷\µòÉHô48ÎäSN‘f½lîk?Y´“ÂŽ²âP¡ì{,V´ãîÖÙmk¾øBºðeÏècK†a>`Ùûí·ò&€óÆVtþù’{ÝuÒŠöA#ˆ:ˆÜ¹k—à4h&–s€±é „­ãH6m8$¢Až$pÏ`‹Ÿ Ôo_{MvCˆ¿Âïçd5nÛÖk#ÕÀæi„› Vv啲lóÍ«¯J-µ6QêŽFy£>1ÑÆC&¢¿ö{¾üRŠ¡÷;RS¥}Ñ d*@Ywï! °Ä9í¤`Œ÷¤©vJ`lº01ìË…1 Œ³uÉ’ˆMãÐÛ ›òwÕh ¢BµÀq\]ƒd †éQ÷Ý'Ex?ºæfñ74(õà²Ë$û¬³Í.Ö÷=`Ø „eÌFcS9SÝ/¿(»$èwëFW§Nán½/ÚB4xË |¦+Wª6@1^¼ŽÜC®Ä.0Öçðßèîxík±Â™r”"mÖÂèÎÃ}&^ƒ õÀUß¹j•’Óºmbz^#ÙÏnüÕW+*ìÒpÖ›‰Øbz{>§¬tì-·Èä[o•Iø6a‚¤ãYd¾®A0½¢Q< ]$G©¤JØTÛÀ¨¿þ*îìl)…z¦7:Xv [†hH6«ž¥½X¶”˧Âöpš ç Å8ÕL†.ûMA}f·ÉU¦ºð›Æ¢’‚ ´o¯®–fLê¬<†(”m￯&³€Í»µ:ÇíŒ"#Cv¼W–7ožšô¨˜ °¨ XcdŽ‘6  ™u=\Ýðç ¤«ü£î¹Gr¡jæÝ/½$õ`Æ6¼ßv¨æv°˜—^ݵ×JuBƒxNغ—4ÐHo—®FŠ§O— Ü» Ž>”Ça[½GŒH¢õºCï›lPµiS¤<}S…E3ÒÍ}øjjâ¶g¬¦öÓØT¬¿ŒÃ²*š^G^ vq ×ψDsXwï'ŸÈ°ÅL¨>/Øâ'€ª5I÷1„<ò¸¶Z6Ø”`éNB6˜õõïxÈ© ,’G°è©*ïÒ¥ây&Êò÷ߥ€:ãÊ=ûliúê+U'!G)–J’AB  ÷¬ÆSî¿_’èY`eÑÓóÈ#jvBšéLp8 D»æÙâzÐüq ˆ†aú¦‹šûâw]E8¢ìª}t$О¬Ð;& t>ñškdÁAÕ‰÷ À…¼ enƒ%¬j×ò^A¼3ÜQ³gËV¸¯>Ø):3™ëUƒ‰äIP A“  ”OœØ«®5 Ð7R [-²ˆ1†ª^P±,s]¦ö Ù§2q°vp¬*IêVÃ_íÀç,[&³@Ý'$t W@_†p_©L,¹¢^£Í6¸‚lyÁ§ŸÊ?À ã{L~Z¼X¾†±è¥`-ýöQk ¶€É¸âéïÜ°A©,‰ ¡ ™eIº:‹gÜó=@¦ÿ]ܺ*tXêµ ÿ­ðÜf=ñ„Ì+Ma~TR)ŒUºóÁåï>\Êàiš· ª^|Q|°Y¢Õß´ ,“qÜq*Œ„s£d»|ôèðèK.QÆ·è–ñ¸fX§´þ_®± «˜1"»À!}“^™ÕJF_­X匄æЂG»zÝÓɧۇúækÖ£~g; ì¥vTÑ/'’“Àà^:êÐ{©càe4–[pmôÁzñÚP´9jxDÏc„˜ý°lÊ‚"ÔeÔÙªNúøÌïÅÉæx8.ö“Çкåý)Ž±ÕëUê›ò¡-å‡Üädd<^”šnsñüùR~q²ºå˥⡇TÜ%ævžy TaR^žl=ÓÓØûœ;x^ŒÀÓh®bÄ sýI] `ó‘ô9 l†ÇÃ눡i„þy !¸õMA·î-…Pîa™åZYþ¨Çˆ¯Ñw*Ê(ÌT”Q Tu)ºÄöÓÔG"í™ØG &V­ZÝ OÃïp‚Öf-Êù G”÷bÎå¶m“:2×s}bb;Á6º—È2õüÎ"q"³¦MëSÖ²y³â„üy¿ò¹çäØgž‘œ™3e¯n˜Çôšâ0ùx…À•“¦kšNÏæ5BZO²xB)–íóu8FßæÍHã:Õ¤²nOÄk/z™9œ¯„b)‹% ë{©ÐÊ’ãÔÓL1<ºhcëocÐØpŒæ)ö—,Å3b„ú¿GÖ]í„Ž7ŒTŽ(§µÚ¡¿Ø¯ãë ìzblT_´IrfÌ轆)ÑþÛo ÏÙî7Þ¤ÜÜþç9FÜÍÕß>’ÏÄ0?Ýø°D&ŒØšwÞ‘f0G¢sÖÝР²Ä±•¢í'õý_Ò÷|¯ßÔU[+¿ÀUþkÈ‹=Çš }lšQ\G; a3gƾû¸,û‹fŒ8"ŒKÐ3п¢¾rˆO­Ùé0LæoÄÀDØ„Å0…A&dîOp‚Ó,|v:’q¢õqÛ ,ð7àr©_0-¡P(S} ÄëU`Q®Adÿ×Ù!É0ÌN~x &vôÆGÀlí¨«›!©©êŒ¨‹¡zBuþÓÌÐSIÜ»¸–và`?ÒöôH»È÷‘O–åÎëllmOw·x¸Cµdì'Ù :ì¢k—¨¥\7bî‹sr$¸jUï'ËŒ"¦””,r——K=®Ûºº¤“úé/0Cˆ]èBs+ÌâËÒ4©¬”ΚšÞ"Fùì*wµ méÙ i2OèG>»ú­.°ÝREIEND®B`‚inc/images/loader.gif000064400000003471147600022000010513 0ustar00GIF89aôÿÿÿðððŠŠŠàààFFFzzzXXX$$$¬¬¬¾¾¾œœœ666hhh!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù ,w  !å¨DBÇA«H‰àȬ³Áa°¦D‚Âæ@ ^¶AéXøP¤@ñ¸"Uƒ‚³Q# ÎáB\;ŸÍ Ã1ª oÏ:2$v@ $|,3 ‚_# d€53—" s5 e!!ù ,v i@e9ŽDAÉAŒ²ŠÄñÀ/«`ph$Ca%@ ŒÇépH©°x½FÂuS‰ƒx#… Â.¿Ý„†YfŽL_" p 3BƒW ˆ]|L \6’{|zš87[7!!ù ,x Ù e9ŽDE"²Š„ƒÀ2r,« qPć€j´Â`ð8ëÂ@8bH, *Ñâ0-¦ ðmFWîä9½LP¤E3+ (‚B"  f{ˆ*BW_/‰ @_$‰‚~Kr7Ar7!!ù ,v Ù4e9Ž„!Hñ"Ë* ÐQ/@ƒ±ˆ-4€ép4ŒR+÷¼-Ÿèµp­ȧ`ÑP(–6ƒá ðU/ü  *,„)(+/]"lO…/†*Ak‘“Š K”ŒŠ]A~66 6!!ù ,l ie9Ž"ÇñË*‡ ½¾-Ö80H‚±€=N;¡ ÐÊT„Eìн®îqè¤í±ež êUoK2_WZòÝŒV‰´1jgWe@tuH//w`?…‰f~#’‰–6”“#!!ù ,~ ¹,e9Ž‚"ƒñÄ* †; pR³%„°#0¤š`¡ À'Ãc™(¤”J@@¿Áµ/1Ái4ˆÂ`½V­‰Bâ¾V u}„"caNi/ ] ))-Lel  mi} me[+!!ù ,y Ie9ŽÂ"Mó6Ä*¨"7EÍ–„@G((L&Ôpqj@Z…§‰ùº „ï%@­w¬Z) „pl( ‡Ô­Žqõu*R&c `))( s_Jˆ>_\'Gm7Œ$+!!ù ,w Ie9Ž*,‹ (Ä*¾(üB5[1² ¥Z²ÓIah!G—ªexz²ìJ0ˆe¿6ÀÂ@V|U«ñ4º¶Dm²…%$Í›ëp \Gx }@+| =+ 1“- Ea5l)+!!ù ,y )œä¨ž'AœK©’¯àÚ,¢¶ý“‰E\(lƒœ©&;5 à5D‰Ä€0è³3‚a¬0-‹µ-Ñ¡À”ŽÃƒpH4V % i p[R"| Œ‘# ™ 6iZwcw*!!ù ,y )œä¨ž,K”*ù¶Ä‹¨0Ÿ aš;׋аY8b`4én¤ ¨Bb‚b»x¾,±ÁÔ¾‘ ±Ë¾ÍäÑ( Ƚ°  % >  2*Ši* /:™+$v*!!ù ,u )œä¨žl[ª$á ²Jq[£Âq 3™`Q[ø5ø:Š•ðIX!0ÀrAD8 Cv«ÉÜHPfi¾äiQ”ƒAP@pC %D PQ46 Š iciNj0w „)#!!ù ,y )œä¨. q¾¨ ,G ®Jr(¯J8 ‡Cðä*Š‡†B´,™Ž…ê&< …Œ´Ûh± W~-¼‘`Ñ, ‡–õ¤,ì>; 8RN<, …<1T] ˜c‘—' qk$ @)#!;inc/images/wpweb-logo.png000064400000010446147600022000011346 0ustar00‰PNG  IHDRdÇ^‹K pHYs  šœgiTXtXML:com.adobe.xmp adobe:docid:photoshop:198f764a-ecaa-fd44-9242-2f7d2bff9409 ¼ýô eIDAThíÚ}U}ðÏóÜ{÷%û’Ý$$”Ø6‘—–iÕ‚%Tû2´ŽƒZ¦ê”)£­ZG›Zlk;¥Õ™ÒbUªC­Z°ÒZ„¶DE,¬…Jh0àT HØf_’ݽ{ïó<ýãœ'÷¹wwIp¢S¿3ÏüÎsÎyÎïœó{=çÞ¤( É›nY‡Ë1ŽÛq“å°sÒ#ÈsÆÛÌg´k¤-Úkh¯"YXêë~¼w¡P$´úXýÇ?J^£H–eý£Qp(åŽ!Z õâØó8(®¹P=–Æ0È’·+P+>(ñ{ÏnÈ„¤I’…²E ÿ]ìÂÂXû8ë åï†0¾Ï‚Ä°tétƒÁŒãúÖ]ý)í~Lÿvc{î16óiEJ;ç•r1^»±W«Ñ¬y"¸-Öã\܈ÞL` ž/´×¦Bj1%$ +LK:ƒ=äÈãxþ9¶W± ?…Ï`¶§­†AŒï±b™yµ±[ÇoŒÇuªÌ/s¢÷cÖe Öd̦çuµÌ¤¯5”âÜYV{*˜Mß¢Þ o¾YäÖ`Íc³Õð² ÿGü«Ã®l|?iVZÓ ø{lëYØéø:®Ã§,Æœ"e7þôÐÇ°Kîr}ƒ9™DžïïïD|ŸÀ­Kð;/Œå?Ç·päS}vâA!“„Óbßzæ· {ã_Q2 9e!¤†™[º¦b6}·¾œ¾‚Z­Ï|óÍšMê5Š”Æ}‡¶Xè{¡Ó£Á%%9AÓúÍ¿Q‘Äþó±OAÐ2øåž ¸¼R¾ëzÚÏ4|NŽuðPÜ€}±n³Vò#ù«Œg,$#±þå=ãýjœ+ÁbÏèiqe®¯ªÔ?y=Ÿ <)l<ü‚`!eßr~“±n >‡Q d}›™”Ä•ã2©5†r¤¿n¶5fz†z²£¡©-µëHAQ#Oá7±5ŽqSܬЖwÅ™/EzZeâð’žyül¥œÄ Ú‹F¥þMøQü°à"¶b4ÌmVeÔŠ/Dë]û-Çï¥=ïçG~t6óî8ÎRÏe•¹–¸¨g~—¢ÛÞL)âðg{õº‡,©,.³*£e›Zɨ¥Œ?­!yÉ$ÅF\]åÚÀ' ÙU-«ž9¾iŸ -°gÅÉîŠuÕ {16Çöz¥¾êÏsáû_ñ}È@Nâ+•>çTxŸËDú3•~?„³+my¤ma÷òXn£¥íJ¹Ú6/ìõþø>BU üQ×[’P¯±¿EbƒzÊìæ?,¤3¥¬ñfGIòÏVFاôÉEB­Mš«(οëhI¹A?éíxW,W5ö’r:n† uk«éÃ…•ï®‹J°[pU~gÇñÀoź­•±_‰ã0§Ïæð” ‰Àh|Oðk:Áþ:JtãAüËá·4§Ù8Ë¡‘¨ELêLN3¼'èg©íµâ够øñÊx×w¦”Ò× q$?Ìú€Øà'#-òuÜËÏ‚8¼ÆrÕBú…¬î³‚eÜ,¨Û‡$þX†B¦pK~/Šô^lÇ4VêXìëñ¿£j‘?‚·â?„XÒë3!ɹBˆ!má\VÃ…ÄfIÀïÃá |`„Æ„Ca½Æ¡ævg¯Á+ržLOðØüëôwõ±exTqG¤§EZj–+íÚ¸ð^ìÜã;„ös8Yü³ýuò„ÄŽØÿÌHÏŠôk‘–nô'"ý1Ü·¿?/(ÝÝø ÁÚV[l= ܆+ñ'^%ÿÕå€Ká|MšÓJ™gxÑaÚÑ%ÖÒ÷KÓ·)„ ­Ucç0û¦h7©ÕÄEì\†Gå"Ïr#JMÞé™:ÖSÆ–*VFº_ŒÏ5öÖé/ªüFqpáIG_Žô4%¹™¹?… qí!}¥+V•8NH®RèsñmÁBv°¼@à=-¦W2;F­ÉØ(õ:ÍbŸ•ùmVg4“Ï(xp€§ë¡ßäLøŠj7X Õh'Ý­âß;€÷þü:YM¹A¯Ö‰q-1ç|‰º²?Þ`¦”‡ÿTf}¼[8|îÓIJ~¿ˆ«bù‘%Fn J÷UÁÕ?çÜ{à\wâby3Ï$¤¸U;}ÐäšØ[-V 26L3ÿ3ÓBþâ½&<ÜÇ@,cj†f³)¸ÞŠ™p*ÛÏê'žªÆ:né‚Hÿ©Ò~—pB>K'•Þçh¹ÍDFÐ…¶Ž•”ét•ßN!F=OpIôœ¨#šKÔ-5ƒKqBõ%ÄÆ·³63ƒjnøãêÑM¥)ÅÐœÁéÚo9ú³&ú¿â`ºÕhŽ”f“igm6í¤‡ãA°/ Òå¬äØAGK ÙÍáEØÖÒBªA½šqÅØVðT=Äþ.Ú!œ J|I7nÃ*ï{*åòìs²¥:ÊÄg—`qÕXr¡Ž&‚r]ß:‹™²iN³vƒ4û¸¤<ü¸ÓÈ?éœùY›Ú£¦ÓiO2³âjÙVYAQÖH›×Zó8Ö¸¹¡]Xú2q»NÊ™ã_{ÚoÖÈCÂi˜îTô@×i顾0÷þ¢šâoÇûzø÷ò{C,OéŽY‘>ÿ¸Ôb"Ý‚üð3ô½”R û†7H³yÅô+H>&©kNßcÍ¡mNÀdúI2H~‹¾új£9÷z5Œ×?`hâNÉ4Yß™’bF'cZ· ›ðá^«÷¢ño… ÚˆwVêïÂçëøb×µ‚¹„éZˆ#ÝzpŸpoõJ!Nì×Ï VzŽ (ÕÞ;„@¼„&vQå!òfáx’Žµ”—‹øf\ÛýE!¹ªW9ÊÏ æHó•’tL»xÄ`“§ékj§ïÒÈOU¤o´gxÞLcµÙú "ßcíÇÏÑ—Ÿ)K.µøòp9¬4r9Œ8Ú Y+Bš»cSQ(‹1¦sòÌ瘡¸æÂg̲"RS´¡ë7ï9‰÷j¥“ÿcãäe6MMØ<¹Ç¦INœ¥‘“%÷ãu:¹þ‘p¤Åms´˜ Adobe Photoshop CC 2017 (Windows) 2017-09-07T15:03:43+05:30 2017-09-07T17:52:51+05:30 2017-09-07T17:52:51+05:30 image/png xmp.iid:5ab35a71-c342-d34b-9fb3-1720f3b46c4a adobe:docid:photoshop:3d142f45-93c7-11e7-a2d6-d9d78fb57e71 xmp.did:cbcb7732-5a7e-ec46-99c0-f764c125fa81 created xmp.iid:cbcb7732-5a7e-ec46-99c0-f764c125fa81 2017-09-07T15:03:43+05:30 Adobe Photoshop CC 2017 (Windows) saved xmp.iid:0ee46405-5da8-3e4a-91ac-01cda991763c 2017-09-07T15:12:59+05:30 Adobe Photoshop CC 2017 (Windows) / saved xmp.iid:bbd78974-8b2f-1549-815d-0826f8b3bc60 2017-09-07T17:52:51+05:30 Adobe Photoshop CC 2017 (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:5ab35a71-c342-d34b-9fb3-1720f3b46c4a 2017-09-07T17:52:51+05:30 Adobe Photoshop CC 2017 (Windows) / xmp.iid:bbd78974-8b2f-1549-815d-0826f8b3bc60 adobe:docid:photoshop:a4aac0af-93af-11e7-8321-faaca42d34d8 xmp.did:cbcb7732-5a7e-ec46-99c0-f764c125fa81 3 FC66CAA93D5C680ADB5FFA52E47F3E84 adobe:docid:photoshop:b89b3a6e-93ad-11e7-8321-faaca42d34d8 adobe:docid:photoshop:dc6a5712-9303-11e7-b8b9-ba0d33c5b76c uuid:910D615EB3A2E31197D3A5FD277855F5 xmp.did:033439ef-1a55-dc4b-acaf-863afdec4862 xmp.did:1f1e5444-26b5-4d45-809b-1ed347e348d9 xmp.did:4af9eff7-f371-ba4d-832a-781b7d20cd68 xmp.did:60A30CFC07206811822AC969FD0ECD8C xmp.did:6eb93b05-61bf-6440-836a-59fb8d7dc66c xmp.did:88df21db-7639-de49-8545-50683966a692 xmp.did:BE9C3033082068118083852301ED3C3D xmp.did:e91bab63-a7ab-db44-99f4-04f94a6c1389 1 720000/10000 720000/10000 2 65535 1139 626 ž †Ý cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF€fIDATxÚìýw|dÙ]çÿŸsseåØ’º[==Ý=Ñãqg Ø€|1l‚wmÀ†ÝÅ€ ,› öﻆýÍ»6y ØãÅØkc‚glÃäÔQÝR+§’*ܺáœïÕ­Ñ´Ô=-u•Táõ|øñ°F­’TŸ*Ý{ß÷œó9ò¦¿}D€†ts.)„˜)kaTýÌáLÂ6är%\ðë=ªÛµ{<;ÖúôZ¹aŸZ¯gw¹v¨ôÙõ2/4€`PZŒiH!D¨t#ÿ’ÒB˼^ZƒE ®‡"çXÛòLiÈÚŸ´•X£x¥ÅZSpÀ ž¶„ ~>©þzä*$«6âšÆPÒuêySM ᙆgŽ5[Öزê$çX¦ÜÓD³F >€$«ºóLc$åUSU9RÅ(®Ç˜’”"ašiÛ4¤Jº³å DPsiÛH8{üC“–1U¬P|$«ö%…Lº†Jë™rP¨çPÒŠˆÃN9Žaô'œr¤¥x µU‰U%V{¼º©À\ $«6—s¬ê$ÀzǪª@©Ébå`Ú3¥ìñìé·÷5*=Qð©Ô½¯%c›BˆRïÙͶHéÕ B¤m“nI@³`ÌêZ<ÓB£gfåu:V‡k×<ò”ãx¦T?.†q·kK!lèÄLHVM®Ú`=ÚÔ²¢Óµí:Œ%Ù†µ`„‘Ò›cVɪ…léXŽU9ªÍü@ËYÛlèØ+¦”5¿y§õ³nDÉ ×¥Å ~X“o•°Œj²`x¦1šöêq;-C´9:Xì³|jËÜûÔþÄ/ëµI0“Ø´9FKö™«y?ˆ•ØØ€8Öz¦˜†ði_¨µRŸ[÷k¾Ÿ•ÒšÓ’öÙJåʹk!³)õ(‚ Ö˜ $+Øo̬/)DÊ2–aûbc­+±*„1q µ)­E÷”0eõWåå@²ÂsIYf_ÂqìÌÖ—+•pÑ9—@« •B8¦aH©õnškBˆP±ä É ×ÔéX} §úq¤tÐgSJ×4¤]®°Ì©bE1x­¨ÅB)D—k-ÖhÆÚ² ™u,!D!Šy½¬pUÕÑ*!D¨ô\9(6ÌiÃ2d¯ggm+a gºTáÅ€Ö*]ã´mv¹¶«BØXéÅ”r8éJ!´l. €d…kÙˆUç ~ÜHãB‘Ò3¥ öD§kel3i¥ˆiЂæü ayÕ “¢|±Þö”dH!ÅM\7¥HYf—g[R !ü d¡’®&aÕµUó~7ät»?HÛ¦mÈœm•¢€— ZO¤ôd±2œtmCæ+çXBˆµ0š)›3UÂÉÚûs1°à‡[wt€æE×õÚKZ¦"ÖºÑf_lÐB¬‡‘"a™¼^Ъ*±š(øË•pcUmjÓaß6ähÊÛ—XUŠâ ¹òh%ŒYÕžiHq¹/Sà ”BX Þ‘pc”Ö ~¸è‡½žÓéZý”e&SJ!Äj•öj=p¬E+6ÿ@²Âu©ž·ü¬QýõÈUд›ÃL—k÷zvõó³å`@²jF9ǪÞ#Ü3ëaÄú`€B9”t3¶)„ˆ”¾Xªø1}Œ€dÕ„Ò¶9py“«=“´Œ©"ÝÕ¢«J‘š.UbfåɪIUbU‰Õ¯njØF€}±D å@?·ä”+}qÓ&‡ÃI×2ä${Êɪ1…JO|êØcÕá)-Ä\9¸bs^×” Ó¦° ]îo”¶Íê?•#’¬€Bˆj› ?V•«/¬’[>¬À3´yz@=±S0Ü(Ƭöš)eÍXh-Øu Yµ Ï4FÓ^=æ¯ÏnY‘ haYÇJZfM¾•Á²* Y5CÖk“`΋Ð&”ÖBHKJË”µþÎTHVM¢ÅçÖýšïg¥´ö¯Þë ÐJæÊAÖ©ýéÛɪ™J„ Àn•cU.Ô ½€d$«Ö£´ ßR¢ºì™ÅÊ@M°ÎªöB¥…ŽiRªF] 욆"T,ù€ÖÔéZYÛ2¤(FjÉéNõƘUí£X!…èr4¸Ú†¬ö•*D1¯´ž„Óç9ži8†ÑéX#)—Í9 Þ³ª½PéB§m³ËµýXÂÆJ/¦”ÃIW ¡…`sah: ÓØÚu]k±„—&MFα„¥(•Î9–kYÛZ "qéÆŸ½uÿr¤ÖBN @²j0s~°¼j†ÉQ>Œ‚Xo;ÃBŠ=º‘hJ‘²Ì.϶¤B,øAÈB+h6ý §:£û RŠ¹r „p/ï <] b­=ÓpMcã!iÛìñì­ïpDq-fÒ ¬K¤ôd±2œtmCæ«zïp-ŒfJÁæLÕŸp²öþ¼ ~¸RáÞ$4Ÿ• êØ:f%ÄƈStù®Y·kW”rLcó'K‘*F±)¯¼©ÇNÁ@²jP•XMün×êp,CJ!DÊ27þÕ6äpÒÝö¦c½•¢xÑË1½+ )åƒèÚs¹Ë±*G*a——ûÆZo<$ÖzªX¡Œ@²j&Jë?\ôÃ^Ïét­Ûƒ)ËL:Õû…«ATÚ«6±A¬"nI@ÓÙá´ñ‹¥JÂIÛ¦¢«¹rÀÁHVMO ±ù|ÖåÚ½ž]ýül9X£‡àê”Ö†”–ÜY´Šµž.U¤Rìfÿ¹‚¬Æ€ëG×õ½$‡’n5VEJ_(øÄ*Àµù±B¤¬Ýœ¯µ»ÛV±:}]³í!¬´ÖRdlSQŠÔDÁ÷Yéx.ëa,„HZfÚ6÷æ'Z†¬.Ð*„1cV@²j\+A4Uô7ú/RŽ¦½á¤»ùk†“îXÚ3$Û:@»ËQu‡ŒÁ„“¶ê®ÃI¹¦”ZˆE?¤þpýXgµª9J 1W®hèäš2a–!«-q-CVoLº¦,GÜ-€¶¦…˜.UFRž!åpÊ-GªÕe×))EÂ4«M/„óå `* ¬Mu=•«ÊÕgÊ-P=}LýÁ¤ë2a «¾óM”ó~g%0¬‚SàFÂÕÄz9çXYÛrMYéâZˆ V…(^©Dl $+Z“b5ˆV¹Ol!…èrí¬cÙM¾H] *½DË•Û$+`c•#I¯Þ³d÷,":†ìñì”eN•|šs’¬ÚBÖ±’5jÐd°¬ `·º»5bÕf Ëètì¥ ý9IV-Mi-„´¤´LYëïLuv&ë\ºš]ª„K~sO¢“Bt{v·kWŸÉŠdÕâæÊÁÆp ù±b¹0ÀN9—çÿ¬Tš~³-ÄJ%ª&+‡yM$«–WŽU¹P€F‹%< ì/ƒÉ HVÐäXgU®•µ-CŠb¤–üîÉ ;3pr—û:Ž‘4 EözHV¸,a[»®k-V‚0TZáF5V•¢8T:çX®idmk5ˆ„Rˆ.׶¶´Ñ,Gj-Œ(/@²j ý Ç5·Yœ&¥˜+B÷òÂÓ¥ ÖÚ3 ×46’¶ÍÏÞúðG×b& $«¶°D[Ǭ„ØqŠ.OûëvíŠRŽilþd)RÅ(6å•cVì ¬ÚH>ˆòÁµ¦í•cUŽTÂ2:ÝKµµÞxH¬õT±B€C×õë wöåK•õ0Ö—ƒÖd±1´4Ƭ®EimHiÉE«XëéREJ!…T;ÏTsi'4 Ƭ®Å•"eí¦JZ µ«¡ª”e !´¡R¼ɪ魇±"i™iÛÜ›Ÿh²º@«ÆŒY$«V¢ê.Uƒ 'mÕ=\9†1’rM)µ‹~Hý€fÁ:«kÑBL—*#)Ïr8å–#UŒê²ë””"ašiûÒfXóå `* @²j~¬&‹þ`Òu ™°Œ„UßQ>¥Å¼\»±;jÈ”²?á¤,S ½Z‰–*ÛL’BôzNÖ1¥ka¼àÛ.ÜèríNÇ2¤,Fñ|9 A4É W†«‰õrᲶåšÒØa«Àë¡…bUˆâ•JÄ–Á{i0éT[ˆBöxv¬õê–ÛÜ=ž½±[i‡cI!fËÁ_ÓáX½ž]ý8c›¶áž/ø”—d…+“Ïj­2”ÐZlC¦ž½œ¾Ã±¶^õu8ϺlÎ:Ö\9¸âvxîÙ_㙆c,ñht°’°[¡Ò¥(Þü™mW¼çƒg}ÍZém¾æYôcÅ€U[a6 ÚÚt)ØÜÁbe»dµàBŠ¬ýL‹­_³D†”ŽeJYŒâ¹r@mIVZ™"çXÛòêÖ‘¥«"YM"ÖzºTyγÛ|9˜/?Ç·Z®„Ëv%%Yh®i %]ÇõûRÏ4<Óèt¬Ùr°Æ”¬´Ï4FR^5UíÁÎ׆”CIw¶Ìm€d UH!“®!…Òz¦ê9”´""Ç0†SŽcý §±„7Ä5¤¢¢˜\ YØo9ǪN¬w¬ª ”š,V¦=SÊÏ~Îùëhñ“”Ý®ÕíX½®ÕåX9ÛÌØfÖ2²¶™±Ì”ed,Ó6dÒ4<Óp ™² ëš‹#­‹‘ ”öcUŠU¨ôz#µÅka¼©õ0·ñr-T¢¥ Z¢` Y¸qÛB”¢¸°W Ÿ"¥Wƒ¨ÛµÓ¶iHÁemË3¥ô쑤3œ°ÎpÂîsíÏîq­Û¬yTËíð{®†ñb%šõÃùJx±Δƒér8Y¦Ë!­V$+×Ë3 !D1zfV^§cu¸vÍ{Y”ãx¦t©Ïl1Œ»][ aF%fB`Ké÷ìñ”{$펥ܱ¤3št$Kʆý…;l³Ã6¤Ý+oh=U .”‚ó¥à|±rºP9S¬Ìù´ö¬l§Ú`=Úto¾Óµí:4 ´ kÁ#¥7ÿ8Cò 4·´eË$Žg½›3Þ‘´7žvsµ†Ú·¡”SîÁÔ³W>ŒÏ*§ þÓëþ“kþSëåBÄ­É À†-“žÊ±*Gµ™h2k[BbTkD©ÛsÉÛr‰[r‰ÙÄHÒi«—5g›wu&ïêLnüÝL–‚'ÖÊçËæËäK-É À³“U/ÔhâSÂ2ªÉ ÍH q$íÝÙ‘¸³3uG.q$í1Ò¸¹8£Ig4é¼n '„PZœ.øäË®–Z).ø¬Óp  f6fª-Ð  1™RÞœñ^ЕzAWêîÎd—ÃIáºRÍxG3ÞwèB¬Ñ×VJ,¿º\|zݧ¬à†ø±š÷ƒX‰+ËXë™R`§}E#K:÷ôdîéI¿¨+•m•åRû¨Ó±¾¹?ûÍýY!ÄZ?°\¼o±pßRa¢Èf@²€]Y©DW|f-Œ(K#HšÆË{3/ïIßÓ“N8¤N²¶ùÚþìkû³Bˆ‹åàþÅÂ?-¾¸¸^d]¬Ík$鼺7óê¾ì »R6 §öÖpÂyËH×[FºB¥X.~a~í ë“—÷$¬îXÆ{Ý`î[ús[·oÂÞ³ yOOúžžô¿ât¡òÙ¹ügfóO®ùTHVÚ‘"e™ Ë° cß™XëJ¬ aÑ-`“Ûr‰oÈ}ë@n,É|¿u$íI÷½g¼ï|)øÌlþ3³ùGóeÊ$+í"e™} Çi°éd} ±R ý°ÍÓÕ‘´ûCoì!P5±¤ó#‡{äpïd)¸wfõSÓ«§ t¼vOò,@²Ðø:«ïrσHé@íÿZ|SJ×4¤]®°Ì©bEµßàUŸk¿a(÷Æ¡ÎãYwióI:ïï{Ïxß“kþ½Ó«Ÿœ^¯„”¸N¡ÒÕE¤®µÔä7Ú¤®µñ¼xqIVZMu´ªz”Ÿ+Å(n”ã—!{=;k[ ÓH8Ó¥v¹ßïò›ú²ßu óe=iSr³uÏzdz?}sÿ 5µòùùµ€K+à¹äƒ¨Ç³…Ý®ÝíÚ[¿`=Œ¯q‚ÈØfÂiÀci> ³.É @ËÙˆUç µj¤ôL)ˆ=ÑéZÛLZF©Õ[Ïzo9Ðõ†¡Ž›Pµ.SÊWöf^ٛɇñ½Ó«1µL¯ àV‚°ºøÙÉ1Œmg[dms0Ùˆm~Ê‘Z »&Yh- Ó¨®­š÷ƒ¸!§Û-øAÚ6mCæl«µf?kÏ4^7ûþÑ®;;’¼'ÛGÎ6ß>Öýö±î‡VKraùïfóì¸ l¥´˜,úÝž±-ÛØ~ìiÛÏfmk°ÁÖ¦j!B¥×Ãh©íד¬´ ¤e !b­ aܘ¿¡b=Œª«­Z¯þSî÷t}×N©ÚÙÉ;;’¿p|ð¯¦Vþtry¢H£ àÊÁ¢.úWòÎ$®¶_α.¯”š,Tè4 ’€ú2 )~mu-ŠÕBÛàJ!^ÒþáC=¯èÉ°»/.]Úæ;õüÐÁžZ\ÿø¹Å/-¸ vù×D¬É À¾\â !üŒSýõZ#€¸†|ãpçuÍÐîÛ0¤xUoæU½™“ëþïŸ_úäÅ• ].€èp¬þ˱ª«Éb%&Vd`ßåkû)­‡Q«6¢ÍÙæÛF»à`w·Ã‘ÏíhÆûÏ·ÿÔÑþ?œXúã KùF¯ «@²€ç¶ÍÙ{&iS-·È¤ß³ßq°ç­#]©«÷¶¶ÕíX?y´ÿ]‡{ÿ|rùc‹³>ÍÄ€«Ú¼7#± $+ ¤«J¬öxuS¡µnÌ$ï{óP‡Íj*Ü€”e¼ãPÏÛǺ?1½úÑ3ó“¥€šWÆ*×êó.Å*?VSÄ*¬4ŽPé‰ÛììÒhÒy÷xß›‡;Øêµbò»t~çpÇ'¦W?rzþù ؈UŽ•»<ÑÚÕd±¢ˆU Y@ dª?Ò÷Æ!2ê”ò»†;ß4ÔñÉéÕß"_B!6bU9VSÄ*¬ Ùõ{öé{ËN2ö _}çpç‡:þbjå·NÏϱþ Vd- Ã6d¼÷í£ÝžI ìi¾úÞ‘®7uüÑ…¥ß9³°Jÿ@´s¬ŠÔT‰X’€¾n«yç­E+íØè™Æ;ö¼ópOÆ2yÃ`¿Þ„ï<ÔûÖ‘®ß;»ø±‰E?VÔí¦©‹%Ÿ½ß@²и—k£i¯ÓÚfËA>ˆš½>Rˆoìø™›†6ï컌e¾÷hÿ[GºþOÏþŸ™U®0Ñ–*aŸg—"5SfKm¬40CÖkµP t QWêg ÞšKð>ACJØÿõΑy¸çWŸœùÊr‘‚ µåƒ¨îÓd õ•¢øܺ_óý¬”ÖM=[i(aÿì±Á×äx‡ aÝ’Müá‹z6ÿkOÍL—in$+û-P*`ÉÆe®!ÿÅ¡ÞïMЦÍàõ¹W÷f>zfÅWPœþ ¾©/û©—}ïÑ~bšˆgï=ÚïËnú¦¾,Õ€ĘÜÏþ¥C¯íçÂÍj,é|ôùcŸ›[ûOLÏ°ó¬ÔCuëo)aÊ꯺÷?W¾}¬û½Gû“ŒS¡ù½¶?ûÒžô‡OÎýÑù¥˜=`ç¸p-¡ÒBÇ4 Ù¸éÊ5 !D¨öt¡È-ÙÄ_¼düŽ«Ð2’¦ñ Çÿâ%ã´µ’€+F±B Ñå6è·mȬc ! Q¼GAÎ?}tà/_ÊÕ'ZÓ­¹Ä_¼dü§op[` Yh¡Ò…0Bt¹vÚ6í×3¥NºR-ÄÞlZrgGòoî¹éGÇ{MÉE'Z–)åîý›{nz^G’jÀub€ç0ç Ë«f˜|åÃ(ˆõ¶Ë0 )¤Ø£¼aJ‘²Ì.϶¤B,øAXç…Vži¼÷¦þ:ØÃ}|´‰ñ´û§/ÿý‰ÅŸš£-;¬Ü¨HéÉbe8éÚ†Ì9Vα„ka4S 6gªþ„“µ÷ç²à‡+•úXÝšK|èö‘ñ´ËûmÅâ‡z^Ñ›yß#“åË®ṳžS%V¹ªËCU)ë™™¶!GS޾ĪR_(øË•:ö‰6¥|Ïxߟ¿dœX…¶5žvÿü%ãïïc,\cV®‹ÒzÁý°×s:]kãò*e™ƒI§z½µD¥½j#kÄ*ªso豤ó¡;Fîd© ¸\ò'ö¿ª/ó¾‡'Ïo¯¬ì†bs˜érí^Ï®~~¶¬íI‰=óæáÎËMÕ wv$?ñ²›þýãÓsq…jÉ @MÈ¡¤›±M!D¤ôÅR¥•¸§,ã—O ¿y¸ƒ—¸BÒ4>xû{zÒ¿òøÅBD[ x÷bìêØ!E5V•"5Qð[)VÝšKüõK«€kxÓPÇ_ßs[ºÉ @m¬ÑTÑßèÀnH9šö†“Ïêô0œtÇÒžÑ$ ßß>Öý¿^<~0E³ à9Œ%?{ñøÛǺ)T1ÀÎTs”b®\±9¯kÊ„iSX†Œ”BX†¬î/ìš²éF~^IÓø/·ø¶Á/1plCþÒ‰¡»;S?ÿèT‰ ¯¬(€©¶©ðcU¹ú…”ÜòAƒ;šñþÛóF3TìÜ· æŽe½ýà…“ë>ÕÐΘ `g´ù ª´Ðýéoìø‹—Œ«€];œrÿâ%ãß>ØA)¬ ™RþÛc¾s$AkuàÆ$LãÃwŽüÛcì& €dí%g›¿{÷Áwê¥@­¼óPïïÝ}0g›”@bÐ•´jsd4Ï­ê£ï#w&Þ@mÝÓ“þß/=òžoœgÙ’€v¡´BZRZ¦¬õwnè'þŠÞÌoÜ9š²´êb4éüÙ‹ÇÿÍCþiaj Yh}så ëÔþ àÇjc‡«ôƒcÝ?w|¥ @]¥,ã¿?ìWŸšýý‰Eª€d Å•cU.íó|M)éÄÐ÷vñÒ{ó÷ ǧÜÿðÄt#ßm€Za2 €¶²Œß¹{ŒXì±ïíú»Ç˜| €d­ ×µþèE‡_Þ“¡ÀÞ{yOæ_t¸×eš ’4³Ã)÷Ï_2~K6A)€ýr"›øsöã@²Ðæ:]k,íÊx} §é?ÜÕ™ü³—Œ'è®ì³á„óg/¿«3I)¬´£„Óç9ži8†ÑéX#)·‰6­zUoæc/8Ħ¥@ƒÈÙæÇ^pèU½ÌËК˜ô ´¯„ilíº®µX ÂPi!„c9ÇB”¢8T:çX®idmk5ˆ„Rˆ.׶¶$­r¤ÖÂhߟÝw v|ðŽÝÕ;ì|äùc?ûÈÔ½Ó«TÉ @‹èO8®¹ÍÀµ”b®!ÜË;O—‚XkÏ4\ÓØxHÚ6{<{ëÃ;Q\‹÷·Éò÷vÿÒ‰!ƒT4à•‡”º}$c™ra‰j Yh+AÔ±uÌJˆ§H]JGÝ®]QÊ1ÍŸ,EªÅ[W^íûNÁ?:ÞûÓGx}†eHñïoÊÚæoŸ™§HVš^>ˆòÁµ¦í•cUŽTÂ2:/·KŽµÞxH¬õT±ÒhOê'ö¿g¼h|?u´ß3察œ£Z,€6³Ã rK•õ0Ö—ƒÖd±íëxÔµýÌÍÄ* ‰¼g¼ïgnf„@‹`Ì hJkCÊvtˆµž.U¤RHµóLµ1WPÕ9ŽI!Þ|ð{x¡æò#‡{mCþê“3šZhrŒYí•"eíæ¯^k¡v5T•²L!„"Tª®±êß"VMê{~áÄg¬4‡õ0B$-3½Wû;Y†¬.Ð*„q]ǬÞ|ðƺy‰æõƒcÝï?>H¬4|Uw©L8i«îáÊ1Œ‘”kJ©…XôÃúý ÷Ý<ÀhÐÞq°ç}¬¹ÐÌXg´ -Ät©2’ò )‡Sn9RŨ.»NI)¦™¶/m†5_‚ºMü×7õ¿ëp//.ÐÞu¸7Pú7NÑ-É @cóc5Yô“®cÈ„e$¬úŽZ+-æýàÚÝoÄ÷ýÄ:-åÇôU”fŸ+$+M®&ÖË9ÇÊÚ–kJCÖ~Ѹ"ˆU!ŠW*Qý¶ þþÑîŸ:ÚÏ ´žŸ:Ú¿Æra‰R YhhZˆÕ Z­ÛPÒxãPÇ/ž`±;в~éÄP!Š?9½J)4:Xh2¯îË|ඦ¤E3кW'R|දéËR $+¨‹;:’¿~ç¨m«€gòÃwŽÜÑ‘¤HVPccIç¿?,aràÚBÂ4þûóǦ\J€d53àÙáá.‡Õ¡@ér¬?xá¡ϦHVPËü½»'¸ºÚ΀gÿÞÝ3õßßHVZœ)åoÞ5z4ãQ  =Íx¿u×(}k¬à†üâ‰Á—t§©ÐÎ^Üf¯$+ؽëþþÑnêàûG»è`u@²€{M_öçŽs—À%ï?6ðMlr€d;r4ã}èvð SÊÞq€U—HVp½r¶ù[wÑ À2–ù‘»Ær6$+x.¦”¾st,éP [&_¿“VHVð\~ææ—õÐ ÀUÝÓ“~ßÍÔÉ ®êÛ;þå!ÚxÿâPφ:¨’lãHÚý/· S×ã?Ý:|SšnHVðl)ËøÍ»Æ&Ç%×%a¿y×hÊâ €d›üç[N¹ÔÀõ;”rÿËm¨’\òcÝß6˜£vêõ¹ë¦HV nÍ%Þl:ØŸ=6xk.A¬´µ”eü×;Flƒ­iì’mÈ_¿s4Í‚+$+íìWn>Èò*7f4éüû[è, €d ]½y¸ãìH Þ8ÔñÃÔÉ @Ûã3€šúå[†@²Ð^L)?tÇH’Ý«ÔNÒ4>tûS²nÉ @ÛøÑýwv$©€Úº£#ùcã½ÔÉ @[¸5—ø‰›ú¨€zøñ#}4a@²Ðú<ÓøÐí#ÓuÔ‡%å‡nñ˜l €d µ½÷¦þñ4KÌÔÑxÚ}ïMýÔÉ @Ëz^GòvSõöƒ»ŸÇbN$+-É5ähÛ`O˜R~àö®ÁÉ @Ëùñ#}‡ÙjÀ^9œr‚9HVZÌ-ÙÄ»Ó Àžzç¡ž[²ô @²Ð*L)ÿÓmÃÌÀÁ@«²(€=ðö±nn7‹ùåÕ/?ôÄýßx|vq¹\©Hi\•Ö™ÒZhLxÃý=/{þ­/¼íXg.CYjå–lâƺ?>±H)¬ð¤]®u,»É/´¡ÒkA´\ 5¯k ðì÷e©Cs(û•‹³‹g&g.Î/.,¯a$„$«zý´B¸Ž£…>;9s ¿7•L86çèšùÉ£ýŸ™ÍÏø!¥P?f÷ÛÞMš;VI1’òrŽe6ÿµ”2i™IË\"ÂUËøàí#7g<êÐø*Aðø©óñ™ü§¯>²V()¥¥”Ī=9’K)e¬T~½xúÂŵbi°·«#›6 &í׆mÈ‘¤ófò”É WÕíÚ9§ÕîkÚ†ÔZ”cÅëÛ^Õ›ù7 X5ƒÉ™ù§ÎMþïÏþóc§Î!·ö÷M«åÕµ¥ÕµÎ\Æ4ŒT’i´µq8í>¹îŸ-V(€:a¦AÓË^ŽUK•pÉoîItRˆnÏîvíêóZªpm×ô\Cþâ‰!êÐþþ+¹pñk=M)öÝz±|ÿƒ§Þ‘±áïúæ—SZùùãƒÿ¼°^QL‰PL3hzÎå=W*M?}N ±R‰®x^hjï<Ü;’t¨CSøâ×ýÆ㧨CƒˆcõÕGŸþ§¯>B)jè@Ây'{? Yázb Ï e(aÿ1Ícu­P®Ô¡q¬¬æ–V¨CmýÈáÞ¡„MÔ³ÔËÏL˜Ü¾iQW;Ô5š±ƒ·ïìÈ !”ªÙòK)¥mYk…ÂÅÙ…¯<øh>q¥T…Iѵ–0Ÿ=6øo¼@)¬4‡v¥^?£M¤aÛÐ öö ôõtd3ârwòZ±-+™ð i4f²BÌ‹®ƒ×äþ¸+õÀr‘R YhtRˆ÷¤Möª5jwõ—Þ}Ç@_išõx£öõvùË¿ý/J[yÿ±ÁÿçþÓÌ?P[LÔP{oî¸5G«hÔFwgÎ2M)DÍÿ'6}€¶rk.ñ¦áê ¶³Pcži¼÷èu@­<}öüÁCÕmTíúeK)LÃÂp­P¢Èmè½GþnvÍgãD$+ ë{=Zo¡fþùWV׺;;„±Šk—¬¤mYëÅÒÅ™yŠÜ†=û‡öüö^}$+ )g›ï<ÜCPC“ÓsK+y׶…¬å˜•!¥4d„e¿B‘ÛÓ»÷üé…¥|S $+ çGÇ{3–IPCQ­­¨j.c™?:ÞûÁ§f)€š ƒ€šé÷ì·vSÍâí£ÝýÌ^@²Ðh~âHŸÇÖÀš‡g?q¤: Yh cIç»tRÍå»tL¹ÔÉ @£xÏ‘>“]M4SÊ÷Œ÷R$+ a,é¼q¨ƒ:hFoêK:ÔÀ ¢7 €x7Vmàïÿÿ¥5ôšúiŠÐ L)ß}¤ïýLQ $+ûi$鼉+ÍìMC¿uz~²ìÙO”Bt¹vÖ±l£¹ïKi!B¥×‚h¹jÞI Y¦”ý 'e™JèÕJ´T ·=ôzNÖ1¥ka¼àÛîØÙåÚŽeHYŒâùri³­ïÝã Xhúóà{Æû~îÑ=¶’RŒ$½„Õ ‹2¤Ž!{<;e™S%_qÚGc„b0édlÓÂ’²Ç³;œm"wgwº–)¥!e‡cõyÛLIïp¬^϶ iH‘±Íaº-µ~ÏfÀ @ xãPÇÀ^ímÕåØ­«6KXF§Ãæ`hkŒYA؆LYæi5ˆ¶¦¦Íÿ™u¬¹rpũܳ¿Æ3 Ç0¥(r û{lƒ+­p6|ÇÁž<5³?+{ùt¹T —üæžD'…èöìn×®>¯m§½m‚1+»—³Í·ŽvQ­á­£]9Û܃ä\¾!µR‰š}öœb¥]ñ¼’ÚT¨t)Š7&¿eÀJ‘žõ5kÁ6'ƒ+èÇŠ«Öö¶Ñî¤Éa@‹HšÆÛF»÷8–´–V$+€t$í¾¬'C¬ì…·±Â @Ëb)’€½0–t^ÙË ]-ëe=™±¤C¬Ô×÷v³g €V¾<’âû™@²PWži|çNê µ}×p'í׬ÔÑër¶I´¶œm¾~ G¬ÔË÷ŽvQíàû8Ü Y¨“cïyIê ÜÙ‘<–ñ¨’€Ú{Ëwp´‘ïá €d æC¾q¨ƒ:hoêpè… àúX”Àuzm6Gï í$g›¯íÏþíLžR UI!rŽ•±-Ï”†¬ý}-D%VÅ(^©D±Ö$+Bˆï¦ÙzQZ¢ødÁÿúréLÑ/FJiq#çĉç½8£k|Á{¾q¾5J§µH[ÆhÒ¹½#y[.Ñåp*ÄsúHVhU®i %ݺÌJ!<ÓðL£Ó±fËÁz“¬´»Ï~YO†:4ŽBÿýüÚýK…'Öü¥Jj}ƒ·Kݽ×þ_Y*¶LõlCö¸Ö#ùòkú²ßÜŸíq9âª^Ö“ðìY?l´_Ì”²?á¤,S ½Z‰–*ᶵ½ž“uL)ÄZ/øÚ˵;˲Åóå jõTy¦1’òª©ª©b×cLIJ‘0Í´mR%ÝÙr"’€¶öƒ¬5hÅʧgó_˜_?¹î—bU£‚}í_ZêFãrZ÷ç+á¬~Ë@öæŒgIÞâ؆!Åw vüÞ¹…FûÅ“NÊ2…†=žk½ºå‚µÇ³;/ß8èp,)Äl9¸âk:«×»ô矱MÛpÏ|^÷–'…Lº†Jë™rP¨çPÒŠˆÃN9Žaô'œr¤¥ZópÁ«•þBx¨Ÿ7л¢1DZÏW¿œZùí3 ­–j«Ú’âÉ5ÿœ[ø“ ˧ Åmz4ÏÐ6d5VmH[¿ìŠOfkëy6÷ì¯ñLÃ1¸>l}9ǪN¬w¬ª ”š,Vb­¥=žÝªUå/§é…—¯:]«Ùc‰bãÖZÈ5N#9’vgÙÔ¥!L–‚?›\ùìÜZ™LU³ó½þ»™üÿ[#¦âjŽg½#i—: •dlSQŠâÂ^-|ŠÔ¥aÕ´m¶ê,f6½|U£·kw»ÛÜXãéRåWý Çl¼90-<·1`Õ8þÏLþÓ3«Å ¥¨¡õ(þÜ\~4鼶/›²¸çˆíƒ>9×8¿O¨t)Š“›†­¶=o惸sÓ2µ ÒÛp½„³ñŸ~ܲ3µ°™gBˆbôÌkÝéX®]ó+ÂrÏ”.ÍA-†q·kK!lè´âÍ,ÎMo%Ë‘ºö=‰« ëgms(é6`¬*Gj%yq„â;IVâ³³ù³Äª:8¹^ùôLþ$ËKpß1ØÑh'ËéR°ÆJ‹HëE?\Ù.Y-øÁJÅZ+­WƒhÞ¶~Íj-øa¤´Ö¢Æ9´‡jƒõÍÝJ:]Û1¤]ëÿem˺LÍc6`+ËQ>ˆ¨vá`ÊNÐY¶1œ°¦Ü‰b…R Ý$-Sk]t©¡b=Œª«­öþ§3f`÷t3`W?H2ª¶dR6öT¨@i!„µkÅIV¸h€$¹ý„¶T + ¾r¿úëíK.f¸’)%ýÖà^Ø•2¥¼ñu&­Ñ€•6²¨Ê9–)÷ôí°F 5€F²p¥›3^Ö6©\MÖ6e¼Ç×Ê»{x¨´mH!D§k-íß®¦µŠU®µñ¼xo´­´mìù í¤eL5ÒŠG’€+1`Ïé]©]'«|õx¶¢Ûµ»]{묇ñ5vãÉØfÂÙãÁë|^¼1ÚV%V•Xíñê¦Fk¤A²@²€Ý*?>±¸»Ç®aÊ2Wßo'c›ŽaJmý§¬m&Ý,H9R+AÈ£m…JOü6/É À³H!žß™¤pmww¥¤»›ý¦´˜,úÝž±-ÛØ~ìiÛÏfmk0ÙX[bh!B¥×è٧5$+5v$íu:ZÍà'þÌ,o3m)ÊæÖNÜ^:8¾õŸì•åÜ#_÷f§·6Š2¹õc·ÇnsRYËçùzbêÂ6?+“-Üt¼pÓÍB^yŸÞ*²|#yþìö:r¬8~“¶ž=cJk³\Ê>úPêÜ©m•J+>¢\WuÒa›7e¼“뻼I¯…XôÃEÿÊAžÃ™„}•ùT9ÇÚXÇ(5Y¨Dš,4º®x–;;¡õÈXmÿJI­®vá'•Ú¾·®Š¥ÚþQ²ú¨«ü,¡•Üúý´ZK_ã7”W¹z¼Ú£¤ÖR+Á5'ê쎎½á'V;Óž¬:YdÕ‚´q•ûh†¡åÕn±ImÚ0¶IJ†©¯²t^ ©¥!¤Ü&’¦¸ÚÏ’R\m-þµ~C!®ò¼´”ZJZA£îÌŽä_L.ïÁêp¬þ˱ª«Éb%&V¡ñ˜RÖ¼…Ö¢‰n"¬\q¡À˜U+ºÊ©N_#|È«>RKqÕ $«ØfùIõQZn«®õ›Èí%„òªºFTší€I¬BSðLc4íÕãÈ;[š¥í$³<#c™ã)Ö¥ÀuOy«¾»ÿu«Ð$ Y¯ZFóÜ(cÌ À3nïHÜèG}H!„ÐR‹+ žû2QKÍš)4楤¸½#qßb¡^±Êµú¼K±ÊÕ± ¬ÅçÖýšïg¥´ö¯¶T˜d ‘Ý–£ßz‹^ÿ…ÛÏ£0¢ðª½(”–Q´m‹ã*ŸÕÖQ$¶ëŠ!£HÆWiS¡µoÿʸú(½í£äµÅ%(öä°Y§dÕéX¹ËZýXM+ŠX…Æ(¨¶®É À3Nd™ Øš”eÛ¥eÙW[¤¥Ô¦©MkkªQ–}¾Â4µinû³¶o¤!¥RW}”0Œ«.»ÊÏÒ¶£ ƒØÇëvØ܈UåXM«’€fKV´¯hM…£Ç Rl$")„Ð:öAG×öaÌK”LJ]=B©DtùQ^ØÙ½í£b×- sB«ÍéKj{‰ »wÛ¦‚ÊvÊ#cQ&+´ò™ëR)•HTº{µilÍcÚ¶ËC#q"¹Í£l«’€æ“¶Œ‘¤CZRéБêL¼`Sý?m˜Ê±·OV®[:`D‘Ðzs’BhÃPöUå8þàp¥·_^ñ(­µi*{û!2e[~ÿP¥»÷Š–‚ÚvˆLYv¥ èêÞöQÚ²·Îjk$é¤-£Õe T9RS%bHõÝØàK²MYýUIVöωl‚ÉS­*Nìx6 ízÊÝáä¡\OìæQ®pwø0)•ã ÇåõÅ>’BœÈ&X.Öü;—"u±ä+RI¨´Â1 CʆÍü®i!BµK¾èºà’ãL€«í<ê¥J¨´.„1± ¨ÅÕ ]nƒÏ؆Ì:–¢Å{ÿÓ³pÉÑ4÷þ`ÇnªéÁ3DͲ)*ÚP¨t!ŒÓ¶ÙåÚ~¬ aÜP¿ž)åpÒ­Nß—¿#’€KÆÓ4žÀµÌùAÂòª&Dù0 b½íNk†r¯š´šR¤,³Ë³-)… ~îǘ/É À%7e³žÀµDJO+ÃI×6dîò®kka4S 6gªþ„“µ÷'h,øáJe~Yg@!ú=;cÑH v,c™ýžMÐ>*±š(øË•p£‰EjÓ%„mÈÑ”·/±ªÅ þr%ܯÊ0f@ˆZ¯@ûÒZ*%•ZkãÙ]×¥†¹ýfÁBÈ8–J ñì^íJkƱóG]ëg5w$íÎù!u@ûPZ/øá¢özN§km‚S–9˜tL)…«ATÚ«6±A¬¢ýnWH² ëP#F:‹óVa]h%6oB¥µrÝ°£+ÌulÝÒJF¡»0o­ç…ÏúW­”ë…¹Î(×qeLÒZƱ³4oçW·y”ã†Q¶ƒ-­°7§Üû ÔíF ±9Ìt¹v¯gW??[ÖÚ¯ É €BŒ±G0j’¬ürêÜ)ozJl¹qerÅ#7GÙœ¾"YimV*ɉ3‰É‰­ß0Êd‹ã7ÇéÌÖ(# ’çÏ%'Îl}TœÊÇ“)’öÆ¡Ãþhsr(éflS)}±TñcÕ†U YBˆQ’jrjÕZF‘Œ·™þa„TW™¢µŒ#¹Ý®ŽFJ ¡·T´ý£dÈ8ì¡Àž0¤¨ÆªR¤¦K•X·éñ—d€ËÔŒ–R›¦r똕¶¬«.|’RÛ.i³º\J^í_¯òyKæ^5û8„B±D å@?·ä”+}±TÙøšá¤kr²XQ­˜¾HV„)å. Prãÿ¶$+!„Zn«žë;n÷¨K”Ïõ›{á@Ò1¥lÛûôhgÕ·½b®\±9¯kÊ„iSX†Œ”BX†LÛfõŸÊÉ @+J\ÚY°›Ë))‡öä¦ý|€6QmSáǪrõ…UrË­ŠŽ´ÄV¨‘«ß‚”B¡åÖ/xîÛüÛ= à@ 4ÆQ?D•¶ìWA²°Aö¸DH­e ½Ý)6Ž…ºÊ©Wë«5·*–»y”JÑÁ{i(Á Y YqA€šE«küÓn¦œ^š¿¿»_„)®ØË)·¨€¶Ç:+bˆ ÔHìxåуa¶C ­7í,µŠ½DÐÕ£·Æ+)•ã”ŒEéŒÔbóH¥âD"èéÕæ6÷µíøÃ#q"qÅNÁR©Øó‚ž>mrŽÉ Ø™¬c%­Úìh´ßí-Î:ÄcV¨í8å¡Ù7(ų3’ÖÚ0•mmÛ PÙŽ?t ÒÛ壔Ҧ©l{›žìR*Ëò†+ݽW}Ûƒ)pÝ”ÖBHKJË”µþÎ$+mcÐcá5j”¬ C»žpwø0)•ã ÇÝù£áðîR æÊAÖ©}4ðcÕ>¬ˆ—CÜ^¤hråX•ËìpCè`´;Û6“¦à†älÓ6蚬´±.‡û¬ÀáÉ Àa p8pã8펛¬Àá¸N®•µ-CŠb¤–ü°}ºS¬<·.€Ã)pNîòûÜqŒ¤i\(úŠlE²P•¥}p8EÛK˜ÆÖ®ëZ‹• •B8†QU¥(•Î9–kYÛZ "!„¢Ëµ­-}\Ê‘Z #’€¶áR8œ¢íõ'×ܦƒ”b®!ÜË;O—‚XkÏ4\ÓØxHÚ6{¼möËîpDq-n“Iƒ$+ Ýe-:Ù‡S´»• êØ:f%ÄƈStyÚ_·kW”rLcó'K‘*F±)¯³b§`ít)ÀMVàpŠ¶—¢|p­i{åX•#•°ŒÎËm0c­7k=U¬´y ¹¹p)À¥Ô@ÆâpŠf³ÃÝ­/–*ëa¬/­Éb%¢7à&ŒYmŸ¬¸€šN¹Q…æ¡´6¤´ä΢U¬õt©"¥Bªgª¹‚­ÚN1+ Ým,HÜÐáÔàpŠ¦áÇJ‘ÚÕâ@­…ÚÕPUÊ2…ZˆP)’€ä &‡S4õ0B$-3½Wc­–!« ´ a̘€Ö”¢™p8E›ÉQu—ªÁ„“®ÿºÇ0FR®)¥bÑ[µª¬³ÚØ „Bi­XŠ §hZˆéRe$åR§Ür¤ŠQ]v’R$L3m_Z{0_‚ H² <ÖY5Û¹u"w¾˜àpŠæåÇj²è&]Ç ËHÔyÐUi1ï×nìN²ÐÜl.%!„ Sv:œqÉŠ1+4a¸šX/ç+k[®):\h!‚X¢x¥µü–ÁœB€¶¿`ÉuS1IÂu“µÌ›Ò.uÀ®ÙôDÒB¬ÑjK%í®¨ ™ÜÕ‘¤ÿX=älóÅÝé;:’”@²€Ö÷íC¹»;Sl›S[¦”/ìJ}ë@v$éP Àî0šÉËz2–”kQüðj‰jÔÊ g¿¦/{GG’À YØ v_i:¶ùÒît ´-å×VŠäÆÝ–Kü?:_Ù›¡1 n\Æ2×£˜:$+@ÈÚæ7÷g¦1’tžX+ÏW¢RG7ÜoI)¥¯ÙÔÝ4®k+I)„bo@RH!åΛÑ[Rx¦ÑíX'²‰×ôg^Ó—M²z @²°kÅHQ„f”0oîÏÞÙ‘|`¹ð•¥â´ú±Š´–b÷£.O½E×ê uëÑÃ×™v”+At±uÛyW á™ÆPÂîv,-„Ö×®´Ð†IËèw­Û:’/ëIH°¶ 5À@²4ŸnÇzeoöù©@éb¤B­„»WïÿÛOåׯ5½ðçßtÏu&+)Ä©Bå3³ù˜_ê“­L)û=û»t½¼'i­v’¬li$LéšFÒ4ÒLˆ¬ ÍR¤­šeƒd~¥¼ºv/¸-—¸þïv0åHØýžý÷sk3~X§ç~4ãÍx¼$+@kJšÆó;Sž³ÌOL¯ÎWÂPÕxðJik* hÌ‚Ú³Ô õ2è9oëþ±ñÞñ”[Ûï\m’Qó´ÜÞ@›cÌ hûK­™M…:1¤èu­×ög{\ë/'Wþaa}ozûÂWܨHVÚùR ÖŽ¨§nÇú¦¾lÖ2»óþ¥âÅr@MЪ‡SŠ¬´¯€›¬Ø/èJ %ìÄꧦW'KAÄà8œh-¬³Ú[ZaÏ xöÛF»Þu¸÷X–)¨àp  Õ0f´;`ϘRv9Ö7÷g¦¼w:ÿ¥¥B™*h!¼Ÿ’€¶VaaöVÎ6¿}°c(át;æ?/æü· ZäpJo@€d ­E1EÀÞ»-—ôú<ûϧVæê°•0°‡ÓÃ)@²À¥°Ç§)<û»Gºº]ë¯/®>¼Z¢&hvëܨHVHVÀ¾ôì7wv9Ö§¦W¿²\Ìón‡S$+Íz)@3+쫤i¼n 7œp2öÒÿ[+FŠÝ„Áá@3¢ë:ÐîֹɊpsÆû‡z~p¬»ßã–8œhJœÀ€vÇô4Ç7¥½Äcгÿúâê×VŠÔN¬4“Å ¢hÎ[Fº:+i¯–Xv§š³v·Ì¥Ìkû³ÿêHß«û²9Û¤àp €d 9,T¸@c‘BÏ&~äpï;õL¹N4f펛¬h@Ž!¤ÝœÝ•³Ì{gVÏ—+Š†àp  ¡1f´»PéUV³ !õºÖ[G»~äpï==™¬mJ*‚–ãü¬´¹Ef° QYR¾°+ý¯nêû–þ¬grÎBãb* ÎRÄŒP4¬´eÜ’MüðÁž>ø̲+)„!£Xh³~H€6Ç:+b¶ÌÝÑŒ×íZ½®õfòO¬•Ë± ”Ž5“¯Ð(fÊÜ¢ÚcVÄ4·ZÑ ºëûG»ß=Þû¼Ž¤!E tL°Bã$+¤@ÛcÌ “XÐ4 )îîJÅZôyÖéB¥«XkS2+$+$+ `šÙ€hIÓ8”rnÎ$ʱNÐÓ“¬8$+J`Šåh*Sî¿<ÄÂh,“H¶ÇÝ>bºFt€ÝŠ´fðÉ €ˆµž*q·véb9¤S%’!„¸@²€Ý:_¬P$+$+à €d ÎsY»uŽ1+$+Ug >E€Ý9K²@²PuºÀep@²pcfýp=Š©ìÔzÏù´\@²pÙ©uî¹ÀŽ1`€dàYXj$+$+7ê$°s§Ö¹-€d`“'×Êvê žHV®¸8ÐTvB“¬¬\¡©Iö Fm/:µVJi­µÖuúþ»ûÎ5ÿ•êýLÑ°&KA!RÔ€¢6<±VM:Ô5Qò+Å’¯µ²,Ë2d³L³–÷Jå Œ C&\Çu®÷}«µ.”|¿˜¦‘Jx®cßøoEñZ±†‘i–iz®ã¹üµ‹Ç°@²°]²ò_7£¸k…âg.œ¹0½º^(•}­µeš¦iºŽK§º;³#}‡G·4ZëõbéüôüâJÞsìXéþžëH)…J©Ó¦OMLÍ-­Ëå Œ )ž›M'ÇG†Nˤ’ÛþVq¬NŸ:}azq%Ÿ_/ah†cÛÝÙ±áþ›twdwúL•R§Î_|òÌ……•Õüz1ŠbË2Mð-+“Jtå2½ÝGF‡:sÞ-ìÉ5ÚW YØâÑ|‰"`×*Apvröë?ýÇOM\œ+W*A !¤”†”¦i$<·+—è½å¦C·ÞtðÐ+ÆšâXÍ-­~á+=yæ¼ç:q¬î8vøÛ^ùâAÏc5qqöÑ“g;5qêüÅ¥Õµ(Šb¥¤–ez®spxà®Gžwü¦#cC›¿­RjrfáÑSç¾þøɳ“3«këe?PZR )2©äÞc‡F^xÛ±c㣩„w=ÏTk}q~鑧Î|í±“OŸ›Ì¯Ê•@k-¥”RV‡Ñ²éÔ@O×уŽèéâÂaɪ¹I!rŽ•±-Ï”†”5ÿþZˆJ¬ŠQ¼R‰b¦×£É=²ZVZ’J`Ç¢(~ìäÄÿþì?=üôÙ²_¹"‡(!¢8®áêZáìä̃Ožyå nû¿¹·ëYÉJi],•Ï\¸øô¹Éêg\×~ÅÝ·Ç]g'§ÿús÷ýÃù•+WFqìW‚‡ÖN?uö£'Ͻåu¯¼óØË2«¿Õé ÿÏ?|ùþ‡žXɯ?ëg !„Xɯ¯ä×}úìÓç&¿óµ/{ñ'Û’×ýOüý—\\É_ñLµÖJ‰õ¨¼^,_œ[üúã'Œ¿í ßD²jIJ‹GV™  =’•kCIשçu¢Â3 Ï4:k¶¬‡1ï*4¯õ(>SôoJ{”;Žå'ÏþÕ羸5VUÇpâøYKü C&<×4¯ì¢$¥Hx®c?3Q0ðLË<;5ó7Ÿ¿ï¾o<º5VmæW‚GOž3 C ùü[ !;uî/>óOOœžÈ¯¯ýû?}nêo>Ÿe™Ï¿åèµWIÍ-­~ö¾¯}æ‹_]/^yImšFµÅO6™àoª5)úëç}m¬<ÓIyÕTUŽT1Šë1¦$¥H˜fÚ6 )‡’îl9Èo,4¯‡VË$+ìH«åüú¾òÐ7?Y Âê'mË:8Ü` ·«#k™¦_ òëÅ…•Õ…åüüÒJ.:zðÀÖ#¥tÛ¶žit„Ñ“§ÏŸœ˜úÒCOT“ŒëØýݹŒe™~%˜]X^Z]Û®¾þø©Þ®ƒò…â¾òÐiÕ&EÐúÉJ 1˜t )”Ö3å PÏ¡¤9†1œrÃèO8åHŠ¬hÚ …•â[pˆ(ù•/?üÄ×{&VeRÉç?ò’ç8<2ÔÝ‘5 áZ±4»°=>:tË‘ƒÞvM,ªí.6þóâÜâç¿üàéó ¥²ë8½ÙããcÇÇÇz»<Ç^/–ONL>üÔÙsS3Åò¥Fa=øä龮饕}*ŽUÒsG‡úo½éà‘±áî\Ö±­åµÂäÌ܃Ož>5q±Pºtq¬”úêcOŸ82v` 7›NmýÝ¢8>75󥟘_Z©~Ʊ­ƒÃ¯|Á'ŽŒ õõ8¶Åq±ì/,¯Î,,é¡'<Ç~ñ'z:i Óš^e‘€6HV9ǪN¬w¬ª ”š,V¦=SÊÏž.Uxo¡Y/òÜ‚ÅάŠ_~øÉ•µgV1ÝuËMßÿí¯°LccÍROgîÐðà n»ù…·7 Ù™Ël]Î$Å¥Ï$«ùÅéù¥X)!Ä͇|Û+_tÛÑý]9)äÆϺíæÃõÙþƧ¢Ëó²f–ÿ÷gÿ)ŠãµBÉuœ;ùÖ—½ày'Žx®#…”Rh-”>qÇÍãóùûþá‡7Ïß{âôùÛŽ~Þ‰#[ŸiÙ¯<üÔ™¹ÅåÏŒ ö½ñ5/}å ïH\î^(„èÊe†ûzî8¦o½é`%û»;]Ûæ}Ò’"Yh‡d•±M!D)Š {µð)Rz5ˆº];m›†ŠfhN§ÖýÕ0î°MJë´°¼zaz®:`eFOGö®ãG ]±Œª;9}nr¦Úý|ãŸÆG‡¾õe/¸ýæÃÛþ,Û²î86>=¿8·´¼°|©ËßR~íÂÌB±ì§“‰+~\Ùf—7wÑ8Ðߓˤ®ö\¤”µÝ åkËEn¢xÖ «eŸ˜”BˆhÓùµÓµCÚµþ_Ö¶¬ËW6~M«ÑÔX.R\§JV‚pcnž: ãêÁµú™Tâ¥wÝrDZÃ×ùqg|tøÀ@¯¹)´†qËMï<~ä¿L:éÝzôÐ@O×Æ7cµ¼º–_/Æ[VÌ*¥6&V·®*û•ê`ÚÐW9Tx¶VßÏjËÉ´«r¤Z†ÌÚ–‚’Ú–kÛžë¨ËÑE)}afnââì‹ï8±í|¿]èÊeNŒuf3×þ²Îlº¯»óìÔÌFòééÈèïI'½kD2)eogGwGα­Eß/”Ê[ó˜iOªú¯ç¦f¦fðNàP V»=ár/øaM¾UÂ2ªÉ h1O¯ûkaœe©®ƒiýÝÙTb­P¬æ Œþùk&Þ n½yd°ï¿¿aݹï½Ç”"Jôtf7v„¯6ÉèíêxÎ5NÉ„ÛÓ™M¸îF² ‚°P*«-ëe“ž{` wââÜÆž]šøëÏÝ÷M/~Þ-G^c$ZÏZ?Å"+mž¬jhãn¦Úòfæ5šY¬õ,µÂõ‘RövßyüÈÊZa£ïù©ó׋噅åß~|¨¿'—Nîz«\Ë4²éä5Ö2mpl;éyR^Š7RÈ„ç>g«ÊeÒžëˆËÝ £8öŸ½^ëRxK&^pÛ±‰‹s§&¦ªŸYZ]ûÜý_ϯ–Wo>4’I%ÓÉ«|u¥s²@²ª?Vó~+±qlµž)¦!|ÚW ÉÝ·X Yá:eӉ׾ôùç.În´æBÌ-­|ê _úê#OÝqlüî[o>>>º»=¤4LóºzëR†ñLÇv)ŒëëÈ'…ð{óÜÅ8VAmMV ϽëÄM>}öôù‹ÿêW‚þú£Oœ9Ë‘±;¹íèáÑ¡>W´¼/.(’U-­T¢+>³F”­¬–¸hÀõrlûèÁ¯{ù ýJpæÂtõ“ZëJNÎ.¬JOœ9ßßÝyëM‡î¾íè‘Ñᇫë^Í*宾J) y=áMJÙ™M¿ö¥Ïϯÿékl÷¥oLLÍ®®6RÇêzau½pæÂô©óSg&§o?zèŽãGFz¯‹§­›\íõ¦ƒJ)Ïu=ynfaiãŸJe¿Tö§æO¿xúÂÅãc/¸íØ͇F\‡m‚[ÍÅr8Q¬P$+×å‹‹…·ŽtQ\§l:õ-÷Ü=ØÛýO_{äë=½œ_£8ŠãYs ËùÏé_üä7Í.¼îe/îoÒ)sRÊ;Ž÷tæþá‡ïûÆcS³ a‡Q¤.wi÷+ÁƒOœ~ð‰Óg'gÞøš—Þy|ܱm6 n%÷-®S$«œ;…HYfÂ2lcÿ×"ÇZWbUãˆõ² Y¡aÏ(–yâÈèÈ`ïóo¹éÁ'OŸ¹0ýô¹É†{Uùõâgþù«¾_ùž×¿j¸¿Ç0šµÙÃ@O×_ó’Ûo>üГ§OŸzâôùåü•WÛ>yºXöýJð‚ÛnÞu4d²b* ’ÕuKYf_ÂqlÇß¾„X©„‹~HºÂøç…õ@i‡}¯±®ã¸Žó¢;ŽõÏ-®œ›šyêìäɉÉéùK³æ´Ö…Rù‹ßxÌs·~Û«w×Ö¢˜¦‘I%o;zh §ëù·˜š}zbêôù©§ÏMm¼zìÔ„a¦i¾ìù·òöh ‘Ö´¯@²º^ŽÕwyyI¤t ö¿ÑŸ)¥kRˆ.×NXæT±¢¼B•bõÀrñe=iJ²-kt°ot°ïî[žœùúã'¿üЧÎ_ÜhËž_/~á+Ýqlü…·wš|cÀÞ®\oWîÄøØÝ·}ìÔÄW~òÁ'O/®ä«ÿª”zèÉÓ¹LŠdÕ2¾²T\bê€dõܪ£UBˆPé¹rPl˜£§eÈ^ÏÎÚVÂ4Ît‰µ³¨»˜_#YáFH)ÇG‡ ôÞräàÿúÛ/Ü÷Ç6þ©:žsðÀàþžÖx²}ݯîê¸ýæÃó¹ûîý— ¥ru™a<Ç›¡e|a~"Ø»n95^ŽUç ~±‘nJEJÏ”‚jŸ÷Œm&-^;Ô?Y-°J5à:öÑC^ý¢;OŒm,¬ £øüôÜJ¾¥ÞcRÊžÎÜ+_pû+î¾Í¾¼A–Öz9ÏŸF$«6“0ꪒy?h̽Õü TZ‘³oDÝ](g ŒŽ¢l˺ãØøíÇoìÞ«µ^^]+]žØJÆG‡žw⦎lfã3šùÛ­âL¡r¡P$«ç–´L!D¬u!lÐ)ÔZˆõ0B$,“× {à3syŠ€Ú`=·¯«sóV¾ªE‡aÙt2“b›àôY‰HV×É4¤¢:(Ô°¥…Û°7Éj–ËÔF¬TEÏìú+…kÛ–Ùš§¡(VW´›G«Yd€du}ªa¥Áo¢V=röÆ“k>S_ð‘)VëÅÒs~ÙÌÂògÎoô5•Bö÷tfRÉf{¦åè¹–àJås“3k…gjÒ¤{"ã “¥à‰µ2up5¬ÕÙœc™rOÍz5øÚÁgçòï<ÔKp5Óó‹÷?øxWGöèÁÙtÂsmëY'—J,­®ÿã?üÔ™ €®cŸëïîl¢gZ,—ÿñ‡c¥<0ЛNzŽmËMç…(Ž× ¥}êþ‡/”ž¹?t`€÷I `v4’Um¤msàò&W{&iSEú`ŸýÝÌÉ WS ÂÇOŸÿ“O}^kñâ;Ž?ïÄMz;³iÛ²,ËÔZûA8=¿ø•‡Ÿüâ×]]»´¿ª”r §ëø‘±Žl3µõ_\YûÄçï??3wË‘ƒ/¹óÄ¡ƒ}Ý®ãØ–)¥ £h%_xâÌùÏÝÿõ§ÏMn<ÓtÒ»û¶›y«´B²b* ’Um®bU‰Õ¯njØFh+æK“¥`$éP l55»ðÈÓgJ~%ŽÕ—~ò‰3çÓÉDg.Ó™M;¶­”ZZ]›^Xʯó…âÆ£zº¾í•/Úv'+)ÄæÉR C^×Äu)…ñìiòºg[¾tëc‹eÿÔù©…•|«§ÏMÎ.,'<·3—éÊe’žkÆZ¡4¿´²²¶¾¸òÌõ·c[/¾ãÄ=w±MpÓ›,¬–¨’U „JO|ê€6¤…øÔÌê»Çû(¶ZZ];39ÇJQ(•7¦À¹Žmš¦Öºì_9ð~pxà[î¹û•/¸}ÛEVQoîýP ²_Ñâ¹çEÇJW°^zlÅ• ¬þbÏõו ô7ýÐ0Š¶.¦Z+”ÎNÎTW”U‚p~yUq~zÎ4êœÀ²_¹¢Ùag.óÒ;O¼þ•/::v€·J³ûÔÌ*³ó¬Ü¨{§IVØ^:é ô®JŲ_ ‚0Š«é¢„B<“Uªñ#鹃½ÝßüÒ»^ùÂ;²éÔ¶ßPJé:¶c[RBhÓ4-Ë”××µÇ2ͤça¨µ¶LÓumÓ¼Îñ.™ðœêUJy®³õRŠl:5>:´´ºæW‚0Šª±-ŽU9®lþV¶ez®›Nz/}Þ-¯Å‹XdÕ2‡AŠ€dàF.Tž\óg=J+Œ¿ý¯=75ûÔÙ Oœ9qnq­PRêY#E®ãtdSGF‡ï<~ä–#czS‰íßK†” ×=t`pq%ï¹NÅÕÿ´®c?×±‡úºo92V,ûZ Ë2ÇG†®§÷ i½]7I'žãJåûrÃxV¸êéÌ}óKïºåÈØ“g/5½(–C¸.Ì°>¹L´?ã €d žZ÷Z-QíàáÕÒSë>u@²Ú ¥µhø–¦¬þª¼\Øz;¸8ÜÉêšB¥…Ži²qÓ•kBˆP±ä ûãÓ³ù|S­-Æ;›§HV»TŒb!„¢ËmÐÞ¶!³Ž%„(D\Úbø±¢ý:€–÷WWhÞ €dµ{¡Ò…0Bt¹vºñZK›R'])„‚Í…±þäüóQ´0ÍT@;G×õ+ÍùAÂòª&Dù0 bëm®" )¤Ø£Iƒ¦)ËìòlKJ!Ä‚„\Øbÿœ/_\\Eo†RhI_\\Ÿ(V¨’Õ ‰”ž,V†“®mÈœcåK±F3¥`s¦êO8Y{ª·à‡+¬°Ï~b‰d U}üÜE°SÌÜF%V¹ªËCU)ë™™¶!GS޾ĪR_(øË•×ûî‹‹ë§ ÜÐЂN*_\\§vŠ1«í)­üpÑ{=§Óµ6æü¥,s0é˜R !Vƒ¨´Wm$b-‚XEš€hZˆO,þ§[‡)€óñ‰EN·HVµ¿vÜfº\»×³«ŸŸ-kô@{ûäôêOíït8Œ´‹×üÐOS´¼• úäô*u° ̼Nr(éVcU¤ô…‚O¬üXýþK´”?8¿D³u$«z–IŠŒm !J‘š(øsª?¾°TâÏ@«(ÅêÎsÃɪþV‚hªèot`7¤M{ÃIwó× 'ݱ´gHI¹Ðòaüglù UüÙär>Œ©’U]TsTuaÕ|9ؼ¤Õ5eÂ4Ò¶i—r”eÈ´mz¦áš$+´‹M,²»€*ý±s‹Ôɪ^Ö‚h¶œ/øù«/¬’[>ÚǬ²Ú@ øäôê¬Ï¾&HVu£…ÈQ…•$ÀÕ}ôÌ|Ì–šY¬õGÏÌS7‚vÉnÔ…Rð‰éÕïˉʲ®ãºŽaºv^ )¤Ã(Âb¹LÛÜ'§W/”ê€d`Ÿ}ôôü›†:Lz· |þí'ú»»¤”Q\³îR ˲|¿2=·ðÉÿûÔ¹ÅZôÌu@²Ú™¬c%-³&ßÊà¸ì|)¸wzõÍ [¡^|×íÇLx^¾ÿ`/ɪÍÝ;½:Q¬P$«ë¥´BZRZµnÜG_4@ñ‘3 o`Ø u0:4P¿X%„Ȥ’¹ÅZ„+$«™+Y§öÏ×k÷!ÄD±ò—S+o風­Ù…ÅŽlÚ²˜¾ŽºøË©¬¬v¦«r™Å©@ýæéù7 ux&MGQK<ô¸_ z»:MÓˆU-;µZ¦Y*û‹Ë«¹mù±úÍÓ´@²Ð`æüð/,ÿËC=”54¿¸|qv>Š"˲jØÁBa[V¡XšgsØöõG–æØÃ É @ú³ oéJ[ [¡vÉjiy~i™: æ ‘úݳäj5ÃÕ€ZZ ¢ß;ËZpMàwÏ.¬u@²ª—N×K{‡2^_¡Ë° ›Xœav €Æ6㇟`À ɪnNŸçx¦áF§c¤\6­vª«Ÿœ¥Ù‡OΖcEÔP­³J˜ÆÖ®ëZ‹• •B8†‘s,!D)ŠC¥sŽåšFÖ¶VƒH!…èrmkKÒ*Gj-d.ð,Ÿ¸¸úƒc=·æ”@z,_þäô*u@²Ú¥þ„ãn× ZJ1W„î儧KA¬µg®il<$m›=ž½õáŽ(®Ålil¦…øÕ§fþèE‡)E3½jÇxQÚƯ>5£(-’Õ®­QÇÖ1+!6Fœ¢ËGÙn×®(å˜ÆæO–"UŒâ­+¯Ø)ØÖËÅOÏæ_?£Í¢¶[E¡&—ÿuðéÙüËEê€dµ{ù Ê_³P9VåH%,£Ó½T–Xë‡ÄZO±G;°¿öÔÌ«z3 6n–óiJ)$iRJÇfs”+Çêמš¡ê¡Õ¯xvØâb©²ÆúòÁw²X‰¸ÈvkºþØ›G6tl›:4Ô+ÒÓɨoýÎÙ…é2ÍK¬vBi-„°vØ6=ÖzºT9µV:µV¾Pð+;ì´1Wé@Õï]˜*Ô¡)¼øÎwÜÌÒ¸r׉›î¹ëVêPCSå€ ÷ÔÙý¶w·äKY¦mRˆµ0ÞÅÃw—ŒrŽ•´L-Ä¢­!D¬ÅT)üŽ¡JÑø:³™ž®ÜJ~=¿^ŒéF½¯<×yÞ‰#ßþª—Üvóál:IAjåýN*0±Éj‡ )Ó¶iFE©`O†,C&CÊBï.Î-é\±r<›8œv)E£'«\¦¿»£+—]X^]XÎ !$»¥ï-)¥”Ò0Œ;¿åu¯¼ãØá®\†²ÔÊßϯý·SóÔÉjÇ*±Ê:–)eÚ2ƒX×;\9†q åÚ†¡/7mç½løÆJé­£]6o7<Û¶z:³ÝY!ÄÊZ¡ìsw¯“Uogîåwßöí¯zñ-Gz.÷#j¦«w}m¢1  ŽZ¶ébºTIy†”Ã)·©bT—]§¤ ÓLÛ—6Ú/‹g›ñÃ_?9÷óÇ)EãK&¼‘ÞCf—Ûª¡iÐÝq/(­=Çîïî<|`ðÀ@oÂ#VÕÒoœœ›ñi\ ¾äMûH ?=Ï4“®³'wÊ•ó~píÆî@Û2¥üË—Žß’MP {ìñµòw߆é$ê­ÅïDú±šX/Ï•ƒr¤T}©ZˆJ¬–*áÙõ2± ¸šXë÷èE®lìýÁçãà`/´þ„ZˆÕ Z%óûíñµòÿ8·ø#‡{)€=ó?Ï->–/S{€ÙóöÎÿÿÔÜÙ"M쑳ÅÊ;5G¬´šŠÒ?÷ÈÓrìXëŸ{dª¢8à YhE®–þ`b‰:¨·?˜XzpµD¬´¬3'@-V>Ì<@$+­ÍÕûžŒ˜ >"­ß÷𤳽$’€V÷h¾ü[§ç©€zøÈéùGé€d Müö™…‡Y ÖÉ—>zf: Yh±Öï{dªÄtµSŽÕÏtíƒlëB)øÉ/ÄšMð¬à¹äÃø=ß8¿Å”Àf…H½ççWCHVp}N®ûÿöá)nKØký¾‡'éZ€d;óùùµ_}Š¥.ùµ§f??¿F¬`Ç~bñO.,Qraéã4@²€ÝúOÌ|y‰V@[ûòRá?>1C42yÓß>B4¸Œeþé‹Íx”hC'×ýïûòYZÚ`¸Bä+c[ž) )kþýµ•X£x¥±³ÐÖ£ø_›˜õCJ´›Y?|ç×&ˆU¸~®iÌ$úNÒ2ꫪÉÍ3n×>œñ2¶IÍqéÁ˜€fq$íþÑ‹w9¥ÚÄj¿ý+giˆëç™ÆHÊ3¤B”#UŒâzŒ)I)¦™¶Íjn›-ù ¢ø Yh&wt$ÿà…‡&ãí@ë+Çê8÷ðj‰Ràz¯k…8˜I8†TZÏ”ƒB÷=s c8å8†¡…˜X÷¥x ÚW'šÉ륟zh’Ií@Ë •þ©‡&‰UØ‘œc9†BìA¬BJM+±ÖRˆϦþ Yh2ŸŸ_ûÙG¦ˆV@ ÓBüÜ£Sl]…ª.y*EñĪªHéÕ B¤mÓ¼íŽå šÏ'§Ws¶ù‹'†(Ð’~åñéON¯Rì”gBˆbô̬¼NÇêpíšGžrÏ”‚êÇÅ0îvm)„m•˜ $+h6x~)c™?y´ŸR-æÃ'çØ»Símš1ÞéÚvÆ’lÃZ0ÂHéÍ?Ž1+¬4«œ™wLùžñ>J´ÒßõGÏÌSÜ-óÅ˱*רq¿eȬm !ˆQ Yh)¿~rÎ1ä;õR  üÞ¹…_?9GPså(^¨ÑŽˆ ˨&+`+:Xhn|jöã‹ÔhvŸXüàS³Ô nc¦¡ÚòmkAæÐô>ðäŒ%åÛǺ)ФþðüÒžœ¡h|~¬æý VbcÿXë™R`§}ÉŠhvZˆÿøÄt¤õì¡@ÓùøÄâžœáv?šÅJ%ºâ3kaDY@²Ð:áê¿<9*ý®Ã¬¹šÉïž]øÐÓLÐ Xg u|èéYºŠMä£gæ‰UZcVZʇOΕcýSìs4¼ÿzrî·¹‚#…HYfÂ2lcÿ‡b­+±*„qDs ’ì‹ß>3¿Æ¿xbˆMƤ´øONÿñy¶FcIYf_ÂqìäÑ—+•pÑIW$+Ø|ai-Šíö–$]%Òúg™ºwz•R ¡t:V_¹ô.U:PûßèÏ”Ò5 )D—k',sªXQ ^‘¬`ïÝ;½ºÆÿíy£žÉ‚R Qø±ú7]øÂü:¥@C©ŽV !B¥çÊA1ŠåJݽžµ­„i $œéR…«‘qÁ eýÃÂúõ\>Œ)ÐòaüŽ¯N«Ð€6bÕù‚ß8±J)=S ª}Þ3¶™´¸t'YÀ>ùÆJé{¿|æb9 ÀþºX¿÷Ëg¾¾R¤h4 Ó¨®­š÷ƒ¸!§Û-øA¨´"g3ÝŒdûçL¡ò=_:óÄZ™Rû創ò÷|éô™™Ðˆ’–)„ˆµ.4ê-Äz !–ÉëE²€ý´P‰Þö•³_\,P `ï}q±ð¶¯œ]¨D”É4¤¢:(Ô°¥…MoIV°ïŠ‘z××&þôÂ2¥öÒŸ^X~××&Š‘¢hXÕ°Òà]÷ª¿¹ªÁ1Y@»ˆµþåÇ/N+ÿöØ€I7v þq|jöc‹”M-çX{|ÊX£@É „âc‹g‹•_¿s4E‡% nŠ‘zïCþa6€hniÛ¸¼ÉÕžIZÆT‘E‰$+hÿ¸°þÖ/Ÿùè]c#I‡j57Y Þýó'×}JfW‰U%V{¼º©Àf!$+h"'×ýïºÿô¯ß9zOOšj5tßbá½]XåÒ-!Tz¢À=\/&ÃhSù0~ç×&þç95ó±s‹ïüÚ± É ÚK¬õ¯>5óÓO–c—7¤«Ÿ~xòOÍÄš•÷HVЖî^}Ë—Îœe¹0°[犕·|é̽ӫ”@;cˆ“ëþwßú?ßvàõ9ªìȧgó¿ðèT«Ð¢L)kÞÀBk1ºK²€VUˆÔ¿yðÂ×ƺîø ÅnWÀuˆ´þÕ'gþàü¥@«òLc4íÕã”0[òAD…[ ³àx~é{¾tæ|) Àµ](oýÒbZüBYÖëN›Á¼VĘ<ËcùòwÞwê—o~ÓPÕ¶uïôê/?~‘€hy¥(>·î×|?+¥µOç$’´ƒB¤Þ÷ðä}‹…ËPÒdlØt¡«_y|ú¯/®P ´‰@©€„ëÃlïo.®¼é‹§^-Q  êáÕÒ›ï;M¬’ìÌùRð½_>û§æhâ„6iý§æ¾÷Ëg'ØŸ®‚Ù€hnRˆœcelË3¥Q‡U¦ZˆJ¬ŠQ¼R‰Øþ²=ÅZÿÖéù\XÿÐí#ãi—‚  )TÞ÷Èäcù2¥@KRZ‹†o)aÊê¯ÊËÕгBsMã`&ÑŸp’–aÔ§yÂ3n×>œñ2¶IÍÛÖcùòwÞúcç9«¡Í®8ÅÇ&¿óþÓÄ*´°Pi!„cÖëZ¢V׌‚Xo;ÆBŠ=º­fJ‘²Ì.϶¤B,øAÈÍ’PsÕ%O¥(Þ³K‘Ò«AÔíÚiÛ4$KH!Ë—ßò¥3?0Öý“GûÙó ­¡«ß89÷ç—h؃v)=Y¬ ']Û9ÇÊ9–b-ŒfJÁæLÕŸp²öþ\9½úÙ¹µwìy×áÞ´Åâ+ì§B¤~÷ìÂÇXR\‡êMU-Ä\9¸bs^×” Ó¦° Ympe2m›Õ*G$+’ >üX}ôÌüÿš\þ‘ýoí¢¹öåMøÇ–çì +ïëSmSáÇꛬÈ-$+¨»• úµ§f>>±øGú¾û@gµu/Po±Ö9µò[§çgÙ¥ Ø -Dž; Y×I ‘²Ì„eØÆþ!ÄZWbUcö¬hms~ø‹]ü½³ ?~¤ï Cä+Ôõ¨rïôêGÎ,L+THV@½¤,³/á8 ¶ão_B¬TÂE?$]µ¶ó¥àß>2õ[§çß}¤ïMä+Ô!S}bzõ£§çÏ—‚>V ÑåÚYDzæ~_j!B¥×‚h¹ÂÉ ¨›NÇêK8Õ#¥µÿ‹¹M)]Ó¨^Ó$,sŠæB푯ÞÿÈÔGNÏ¿{¼ïC¶A¾Â •þäôêGÏÌ_Øy¦BH)F’^¢%Z­H!CöxvÊ2§J>‘u¬¤eÖä[q´É ¸¤:ZU½™+Å(n”?ECözvÖ¶¦1p¦KLài JÁÏ=:õ§æÞq°ç­£]Iú[`WJ±ú³ÉåŸ[œ¹õT]Žh¹– Ëètì¥ ËÌÚ—ÒZiIi™²Öß™ê‚d…ö¶«Îü†Úò/Rz¦Äžèt­Œm&-£Ñ¹]ÌúážšùÈ™ù·uÿÀXw—Ñ×k9ˆþðüÒ_ʇ7zŸ({ù·T —š|Z²¢Û³»]»ú¼HVíl®dëpPõcÅÆÁ Y¡­%L£º¶jÞó€¸àiÛ´ ™³­R𒵕|ÿÖéùÿqnñC?8Ö}4ãQ\ÃÉuÿÎ/}rzµVûSm,=]©4ýŽiû$Tú«+Å/̯a~íB)  @}íðPw±TéO8iÛ”B”c5W"Æ£@²n„)eÍ/;µ±¿.”‚ߟXüý‰Å´eÜÓ“yEOú¥=™á„MeöÀÅrxÿâú?/¾¸¸^ˆØŠ ¨;¥µ!¥µÃ¦©±ÖÓ¥Š”B ©v~ÖÞ˜+H;A¬!„ðLc4íÕã~þl9¸ö<`o"õ™ÙügfóBˆƒ)÷žžô=Ýév¥²lUSëQü•¥â}K…û L"ö–«¤e¦,cyç|Z -v“R–)„ÐB„Š($+B²^»1ý h¢X™(Vþøü’)屌÷‚®Ô »RÏïLv:œvc%ˆ¾¾Rz`¹øÕåâSë>ëÚý²ÆIËLZfÚ6÷fkËÕZ…0fÌ œD!„(Eñ¹u¿æûY)­ý˜;Xh\±Ö¯•_+|bQ q$í=¯3ygGòö\âHÚã¾ÀÕÿ´Å™¢ÿðj¹Ú2äÔºÏÐòAÔåÚ¶!ÎŒ Q}ÕcÃ)Ç”R ±è³ HVÀeR!mL qªàŸ*ø>¹,„H[Æí¹äm¹Ä-¹Ä‰lb$éÈö.Îd)xb­üøZùÑÕò#ù릀ÆüS.UFRž!åpÊ-GªÕe×))EÂ4«M/„óå `* HV€m"uÿRáþ¥Bõ?Ó–q,“¸%—8švd¼#i7cµò­õ(>]¨œ^÷O*åËO­—‰R@Sðc5Yô“®cÈ„e$,£®?Ni1ï³ $+ÀN‚Ö×VŠ_[)n|¦ß³oJ»ãiï`ÒM9# ç@Ò±dólEZO•‚Érp¡L”‚3ÿT¡2ÇÄž]1¥ìO8)ËTB¯V¢¥Ê6e”BôzNÖ1¥ka¼àÛ®NéríNÇ2¤,Fñ<]°±Ãp5±^Î9VÖ¶\Su8.i!‚X¢x¥±´$+´£j+Õ_:RXÀ*X4¾9?œóÃ/.6_U'ìá„3èÙà { á xÖ çôºV®:æÃx¡ÍøÁ¬Í–ƒi?œ)‡Såàb9ä¨V“NµOš!dgÇZ¯n¹—ßãÙ[²v8–b¶|å_ŽÕë]Ú c›¶áž/ø”;J>«A´ÊPHV@„J !Ó0än6¬Ø®i:·¢9ÅZ_(Ûî„k²Û±z\«Û±º+g›ÛÌÚfÖ22¶™2Í´e8†L˜FÂ4lCf/¯^¸ÆeÓZ‡J—cUŽU t!RÅ8^ãµH­…ñzçÃx)ˆ–‚h±-QÈ‹:³ ™zöÑÇÚziÛñì”YÇš+W¼6¹ggŽa°ŽÉ hÅ(BH!º\«1{ø؆Ì:–¢Þ팀½¿¯1뇳»ý»óLCA§M@#3(ÚêÚ®º»E—k§owTSÊá¤+…ÐB°Ø̱ª)Ž±¥gßÚöP–žõ5kA¤·ùšèŠ7VcVh/s~°¼j†ÉQ>Œ‚Xo»ÄÂBŠ=Z’eJ‘²Ì.Ï®®þ_ð¦-hFÓ¥`s‹•í’Õ‚)ª>«,¶~ÍjRv:–)e1Šçʵ@²K¤ôd±2œtmCæ«:•-Œf6­ 1¤èO8Y{þ:üp¥Â€€¦k=]ª\ûk´óå`¾üßj¹.WèЀd4°J¬& ~·ku8Vµëæ%׶!‡“nµÄ+Eñ¢–™ò@²š‚ÒzÁý°×s:]kcÎ_Ê2“Ž)¥b5ˆJ{ÕF"Ö"ˆ»µ¬€æ£…Øfº\»º}Šb¶¬ÑC$+`'äPÒÍئ"Rúb©B2¬€1¤¨ÆªR¤¦K•˜Yy Y»³D å@?·ä”+}qSŸ«á¤kr²XQ¤/¬€ªêð”b®\±1¥kÊ„iSX†Œ”BX†¬î/ìš²‘¬@²„BTÛTø±ª\}a•Üò@²ž¡…ÈÓ7Ì @²€}Æl@´”¬c%-³&ßÊ`YHVh7Jk!¤%¥eÊZgª ’ÚÃ\9È:µ?û±bã`¬Ð.ʱ*—ê€}A ð ɳ’Øðò¢ÒN×jöX"…èt­+žÔ³€ÈQg !º]»Ûµ·~ÁzO—*W{xÆ6ûŽ)e>/^\$+ ö:]+k[†ÅH-ù!Ý) j%S–™°Œkd'Ç0¥¶þSÖ6“n>©r¤V‚É ¨±„“»Ü?ÐqŒ¤i\(úÌ!„Òb²èw{vƶlcû±§m?›µ­Á¤ÓPÏE *½FK~È1É Ø™„ilíº®µX Âê${Ç0ª±ªÅ¡Ò9ÇrM#k[«A$„Bt¹¶µe{àr¤ÖBf’h ZˆE?\ô¯ä9œIØWÙ==çX‰K±*Pj²P‰˜ €d4µþ„ãšÛLb‘RÌ•!„{yáéRk홆kIÛfuÁ:Q\‹™4Ä* Y¡-¬QÇÖ1+!6Fœ¢ËÓþº]»¢”c›?YŠT1Š·®½f§`ØV‡cõ_ŽU•XM+-¬€V¢k7€*Ǫ©„el´âµÞxH¬õT±B€X»Ã~Vhf;ìî{±TYc}9hM™¸;ÖI¬€í0f…¦¤´6¤´v¸qJ¬õt©"¥Bª_l̤ €öU®Õç]ŠU~¬¦ˆUpcVhJ~¬„)k7o`­…ÚÕu@Ê2Å¥f¾Š—@;Æ*çY±ŠÑ* Y¡é­‡±"i™iÛÜ›Ÿh²º@«ÆŒYhO[V'T+b¬ÐìòATÝ¥j0᤭º‡+Ç0FR®)eu³ê •c5E¬€-Xg…¦¤…˜.UFRž!åpÊ-GªÕe×))EÂ4Óö¥Í°æËAÀT@í«"5U"VÉ -ÄÕdÑLºŽ!–‘°ê;«´˜÷ƒk7v€ÖVŠÔÅ’ÏŒh Y¡ÃÕÄz9çXYÛrMiì°UàõÐB±*DñJ%b¡6€ö´T û<»©™r…X$+´&-Äj­2”uóœ[±,€d$+ YHV@²’¬€d YÉ HV@²¬€d$+ YHV@²’¬$+ YÉ HV’¬€d$+É HV@²’€d$+ YÉ @²’¬€d YÉ HV@²¬€d$+ Y®ßÿ7ÿY÷vQaèIEND®B`‚inc/images/ajax-loader.gif000064400000001323147600022000011426 0ustar00GIF89a ôÊÿÿÿÑ))Ó22ÎüøøÿÿÿôÑÑãê  ×HH÷ÜÜîµµáww霜×DDöØØýúúî±±ÎÑ++ÌòÇÇÐ''ÌØLLÝaaÔ88Í!ÿ NETSCAPE2.0!þCreated with ajaxload.info!ù , - Ždiž¤  âÊ®@ƒ8Ì5pÓ{ÞÛ¸Ÿä‡´â@È .s®Ö E­–B!ù , $`a`ž¨i‡‘¾ÀÚ©ìÒ§çì½ë»X/(œ;‰!ù , 6 Ž‹a,ãˆ$ " c¤b¢(ÉÏ´ë2À—À‚½[ñÈKÍÑÓ¸N™ÂU *–NÂ!ù , 5 Ž¤ETã4b$IÑê<Ïuyç;š §È„>b°GúÌ‘s9y«Ö‹º*R!!ù , 2 ŽdižÖ²XæDQ“¸HÒbRUEÉ´]â:^í–ÛfÃ_Qè#ÈæÈcžJ©Õõ!ù , 7 Ždiž$q]„¨²b¦iÙ…a—h㢶mš] ìý‚·aà.—M$˜4_-66Ë ¾àR!ù , / ŽdižäDQ“¨²îªr%R´ à5¯û·p— öŠÄšq…ú^-4CY¯¤!ù , / ŽdižäDQ“¨²îªr%R´ à5¯û·p— öŠÄšq…ú^-4CY¯¤;inc/images/wpweb-menu-icon.png000064400000004600147600022000012273 0ustar00‰PNG  IHDRVÎŽW pHYs  šœgiTXtXML:com.adobe.xmp adobe:docid:photoshop:49090d88-6fc3-6441-bdcc-7e8768d2e103 ÔJ”!¿IDAT8­ÔKˆÕeðß÷ýÏÿ\fÎ\tÔÔIja.Êja«M”í"ˆ‚j”‹6:Ñ"h£ ƒvÙ"’hÝÈ°V!A«HZÔF¢A̵QgL3çœÿåk1:8­|à]=ð¼Ï{ )%wÁ¾owâu•³¢Os«lQ±u‚»:LœcÝ572·¬ ¬šØÇ Âݪ0i9΄Awmº„DÑ\&PÇ[ìv¼–yàÅ¡{ŠYþÞtYø;c¡±K;SÖ=ÝfG·µÛÈâœf½"xc‚¢M¬á~mŽØ1|Ðæò¤JËTµÝ£] c6ätǶ4¾S¶é=ݳ„x»×}؃'¢Í%cÕ YË•ŒfýƒG—–L” ó}ÚŠÈÒä~)lÃJ‰Ò4Žà3 ¢‡úÔ¾P!âFܦUï5…Åþ!7zä &.ÓÌ´)ZÄú››®BÔ®)Â%Áa¥WTõÓRšt¹Çèu¦.QÇWÊ|¯X?Œ¿ðÛŠPàM V&ŸU7¿“G®öiœ¡]!vÄìcÂG$x÷V³nï\-…åzcÄ­ä5©˜U-Ò ”9§Ê—UÃͲ,IŽHÖ냪Èü㌵éן«ó·tÒe³#œ2X$k~¥Ê—TUCÔ¬¬Æèòy½Éã×3RÒ]O3µ®äzxÃéœN`¡G¿üÀôYîým³¢ùQ«qaŒ…ÖAŠ"ÐN_zlyÖÆ"˜;j9ï²1o|þ„Mç3ÝkŒ/h¸0ºæôÄò'…gôÛ÷é\=lC †á9cÅ%;ò ÎŒ¼`‹¦®0Ìw)×ñGC³²‰º8¦®©ý˜´ÓIíþ;î>nºý¶FE>¤hìÆìþ‘¹µ‚ÓŠì%…QëzgŒ QÇOñ>žú÷øÿ)ÌègO*âŸxþ&ó5„;õØþ½QéàM¦‡IEND®B`‚inc/images/wpweb-schedule-emails.png000064400000223577147600022000013465 0ustar00‰PNG  IHDRsrÈ;¿ pHYs  šœD Adobe Photoshop CC 2017 (Windows) 2017-09-07T14:49:58+05:30 2017-09-07T17:53:01+05:30 2017-09-07T17:53:01+05:30 image/png xmp.iid:66166af7-1f24-ec4b-907f-07f0d0e77523 adobe:docid:photoshop:4553fc2b-93c7-11e7-a2d6-d9d78fb57e71 xmp.did:f51fc77c-7bde-8c41-b856-d99d0a9508a2 created xmp.iid:f51fc77c-7bde-8c41-b856-d99d0a9508a2 2017-09-07T14:49:58+05:30 Adobe Photoshop CC 2017 (Windows) saved xmp.iid:482c0215-7d93-dc4d-b608-81eeb2a1a10b 2017-09-07T15:55:38+05:30 Adobe Photoshop CC 2017 (Windows) / saved xmp.iid:19609106-427a-5f4e-84c0-e397a91fb87b 2017-09-07T17:53:01+05:30 Adobe Photoshop CC 2017 (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:66166af7-1f24-ec4b-907f-07f0d0e77523 2017-09-07T17:53:01+05:30 Adobe Photoshop CC 2017 (Windows) / xmp.iid:19609106-427a-5f4e-84c0-e397a91fb87b adobe:docid:photoshop:b89b3a6e-93ad-11e7-8321-faaca42d34d8 xmp.did:f51fc77c-7bde-8c41-b856-d99d0a9508a2 3 FC66CAA93D5C680ADB5FFA52E47F3E84 adobe:docid:photoshop:dc6a5712-9303-11e7-b8b9-ba0d33c5b76c uuid:910D615EB3A2E31197D3A5FD277855F5 xmp.did:033439ef-1a55-dc4b-acaf-863afdec4862 xmp.did:1f1e5444-26b5-4d45-809b-1ed347e348d9 xmp.did:60A30CFC07206811822AC969FD0ECD8C xmp.did:6eb93b05-61bf-6440-836a-59fb8d7dc66c xmp.did:BE9C3033082068118083852301ED3C3D xmp.did:e91bab63-a7ab-db44-99f4-04f94a6c1389 1 720000/10000 720000/10000 2 65535 1139 626 KÇá5 cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFâ½IDATxÚìýyl[vÖ îáÌ>{ w|÷¾1ß”ÃË9SJR‰2Sh 5@’°B4˜ª0QÕ”¡¦i ¬é²îªn¬¢ª0µYAµuu­¦Ú (LBJJ e¦HIùôrzã"n >ûñ3îݬˆýÎuðp÷˜Ã¿Ÿ={7‡ãÛýl_ßYk}‹æ—ï3Ç@` Ê  ¬Ê  ¬@Y”@Y”(+€²(+€²ePVePV ¬Ê  ¬Ê ”@Y”@Y€²(+€²(+PVePVeÊ  ¬Ê  ¬@Y”@Y”(+€²(+€²ePVePV ¬Ê  ¬Ê ”@Y”@Y€²€3À‘‚ÛRZ’sÎÏþÙµÖ¹Òi®²\á½o ÞÊêRâÙÒ±ä9ç\HnK‘å*L2¼#â Ä@Y]îmNësÙéöß)× clvâ Ä@Y]„àf›K²<É”>­ŽsnIáÙ’1f aK‘"M Þ@¼”ÕeÁ-lsQšŸ×ah­“,×ZûŽÅs,‰@¼x€K¼cLŠ½¼¸ÙæçŽ%Ϭ­Ô±„%öÞ‹4WJëâQñâ .8ÈYííkŒ1µŸ‘猕=›6 0ÎÔifê9ckÓ¦6ˆS¥4cL)-$¶9ñâ .Ï9Ž%`ŒéÃwÀ²gŸÞµÁy©øøz¦£â Ä@Y]Žo¥æÒQɵ-yò %8/¹¶Ø¯xìb®ˆ7oeuPZã4W{[OàXŽu’ke QölÚå´fÃ8ÍšGĈ7€²ºrŒm@žm¹'4×Ï–"p­·T Þ@¼”Õ$Œ3cEêÚ’†?ÇdrÊË•Æ©ÒØæĈ7€²ºêŒ’,Éòý}Jš}j\[zöÞݳ\ ã»oeµ,Diïž°¥(¹öRÌ粒 “ Ä@Y-q–ö÷&)xÙµù<ƒýüBOjñ¡oeµ\¤¹ ã½J^v-1ÛfWrm{ßGµx9 ñPVËH¦Þ-Væ3Ìõ»M±„ñPVˢÁNñúÐøâòÇ®3moeµì(­‡Qšío[¾cMnvRð’·WM›#fóñPVà14cq!Ïî;–[=A~>&mŸ+…Ù|@¼”G 8y¡ºÖÞ\?[Š±Žu#ÿ€xñ K°Ø6gFLäJçJ9–¤M aúGÓ\)­Ýý?1Æ"¸ôñPV€=~‰Hi=ŒSƘҌ®·¹½!šQâÞ±$ç“%€x€«ªßær¥QJ?'ã+þ3Îò¨0O},q€x€+κ·¹L½;ÅHs¥“Ì‘"SzlˆýÓTE3Ç•$ ÞÊjq-iÜx²\…mUY®²C&H$Y®µ¦Ò–‚»ÖØF €x€Ë ªgÛæìw·¹ômîHÞ­„fÌÂô¤p‚pα€xñ@¼euñlI~;Œ±$SÇI¬wI2üÁ§œ Ž%|GNΑ€xÄPVçŒïXλÛ\¥ÇM©gù»ÓûsÓ±ÌàØg2çž-]˲„ðléÙ“ñâ €xÊêmsFŽÇi~RÓ!2¥È;•> %×ƇÚÝKÒçˆsîXÒ·¥ñäà²ãHîH|žâ ÄñÆÅ^",ÁaŽeíosQšÙï“\éaœ®Íœ—]kgJk,;˜ Θm GJ1±©YRpΓ,Oéràl¿yÝ _4}Y÷EÅeG”^vDÙ¾ÅËŽ°ómîZÜÜ·¹5õ«:Sz”êTé8Ó£TgŠ 5Êô VƒD =HT?Q‘jòöHu"•)ì±ñâ €xÊêì·9ײ„Ùæ²$;ùÏ mv%ÇæœqÎK®=ŒSlv`vçŽ%l)»)÷l)O2…8¤`ë%y£b]+Ëk%ëZY®r­$¾¨º'\"a ^qç»JÚ‹U{¤¶‡ùN˜?ä†ÙÖ ØÏ·†â€xÄPV'&Ä'¾³÷¶¹Q’žW{W’,Á9çŒsÆèÓˆíV ÇÖQÍ£”©œ'™Ê‚Gp’¬ònݺ[·oUå­ªu«j]/KëׄT]QuÅÝúø_¦ôæ ÐËô²½üíNúv'Û s¼Åñˆ7 ¬æFkÍ9/ ñaœÚR¦yžŸrõˆÒz§že)­ÍsÑ‘ d²y1[ [ÎQÖL™zž³ åP`Q›?Û´Ÿ]qžjXO5ì;5«â^‘N]KðÛUëvõ±/Ä~¬Þéfo¶Ó7ÛÙwv“ï´Ò0ÅÙoĈ7 ¬Ž"SÚ–œ3æX’ê›s¥suF“õ´f£‚œ>ÁÈÔƒIö3òrÞ&d)¸ÇeÂyŠÊ@0³”zqÍy~ÕyϪýÜŠ}£b-UøUqÅËëÎËëÎÞFÍØF?ûönú­ô›;ÉkÛ „@¼o Þ€²:€4SäÉãÙRk}Žx–471vÅÖàrŸ®³eäƒsîZRrg§~q\F8cwöKköËëî‹kö“ux4?¶87+ÖÍŠõ=Oú¡¾ÕI¿±¾º•¼º¼Ý†Ìˆ7â ÄŒæ—ïãÄwæQZŸ‹Æ有ý@Fi=ˆR¼/À|6l)¨‚ùø–+d9rW€1&8{¦i¿ÿºûkÎû®»u£8¡©ß{ÿîfò{›ñë­.â €xc9ã («ÂfWðç9_”ÖÃ8Ó{Á^ìËKØÖINóÑš¥yŸ¥åVÕúÈM÷÷ÜÞpËÔÔI2HÔ×6’¯<Œ¾ú ¾ßË° ñ@¼±<ñ”Õc¼+ÓÏ¥F3¥u–«8ƒ'ØC îÚò”¾ƒéÆÊÀ%Á·ùGoy½å~ä–w½,± gÀæ ÿêÃè·ïÇ_y¡/ Þˆ7 ¬çtrΙ‘׌±Ç.ñYŽST^enT¬O>á}ò ï•ÎE¶D¿ÚdJm#ùw÷¢w/Úè#‘@¼e8+(#ïXG'´fšé\i¥´Ú/éàŒqÎ¥à’ü¼E¦*¯Ï4íïyÒÿô“þäø&p¾¼ÝÉ~ã­Ño¼5úN Í-ÄPV€Óĵg‘+æ*Í÷¶8þøþÅö.DI[Š#-S*NQxéyaÕùô“Þ§ŸôoU!¨.:z$±¢oì$X â (+À‰ž3gäéÂOœííq‚s)¸Ø¿\¤SJçJ«ý¿º¶´²OÝËÔC]]BîÖ­Ï>|îÿF‚êò±ÑÏ~íõÑ¿z#|»ƒBAâ (+À±œ»–´fh…ÑŒ%iNÇRpÇ’–8`oÔšeJ%Yž+Í9÷fØìPx¹X äçžñ?÷LðlÓÆj\¾ÓJÿÕë᯾>Ú á+@¼eXˆÙ3òŒ±$Ë£4gŒ9–t-1½®Yi¥y–+)¸g[³<*/8¶äß}Çûç‚ÞòàIqõPš}ùAô¿|;ü_߉Ò§!ñÆåY^|Â8_8c¶%¯¸ å*ÉÔþ6'9ß»ð“å{¹x)¹#e¦mU®%=KŽ´Î•Î”’âè.UKáð$ËÓ êêbñlÓþ#ï)}î¿âbÕ•EpöñÛÞÇo{ýXýÚë£þ­!¼.ˆ7.Ç"#gÀ¹†P{ã#fŸu¥Y’)K ß–œómL¥àJï÷ŽeIgyœæ–ž=³­ªfi®’,Geà¹ãJþ=Où?úBé¥u«±„üÁVò?cøoÞÅHao\`³àüN?)\kÖŒ<‘)•åšO9çZë$ËÓ\1Æ,!lKpÎÒLÑoh'¥Ü=õ›*¥•Òb¶éêœ3ÇB°$SÙþ‚3ævÍú‘çK?ð\€$Õ2óÒºóÒºó?^û_¾þÿ¾9¼ß…Ññ”`±åyÙïXbÏÕ4S:Ímdž³wqHØ\iM©y±_-8œçjîl»%„°yÂyšájù~BûÐM÷'^.ü¶ÇÑIcŒU\ñ“ï-ÿÄËåߺý“W¿ó0Æ) @¼eÀR3Å]çHh§Ú» ¤uš+Íç¼hœº·©1Í“œóÂØ =66}6ÈDHpŽÊÀ3À‘üóÏ?þré©ìþÀÁqÒ'žð>ñ„÷f;ýÿ¼:üÕ×Ã=ˆ7 ¬XBl)lKXb‘Ê.½_ÊL×…”Ò¹RŒ1ÁÙaÖ©æNçœ-–AeàPqÅ{±ôc/•ë ÿÀÑ<Õ°ÿò§êî#Õ_ùƒÁ?}mØqbo@Y°pÎ)íÅ®±ww+z(ƘÒÌl|cF¨æJy.¥µÒš./-¾_˜L}ž#wu‚¬ò'ß[þ¡çKÊ?0uOüÙU¿ø¾Ê?ûæðzu°=Ä ,o Þ€²àJ#·¥´­>Tx=ñ³©1Fö·HÊ« q¬Ží› ÎÒ\aàÕñ¹Q±~ê•ï{Ö·0— ƒÀæ?ùÞò^*ýêwFÿøwû}X\€xñ”Wt›s-iÉc—xqÆ×ìˆý%Íeñåþµ¥4W™ÒœsKŠãÛ!pƨÌ:Î0MxqnV¬Ÿz¥ò}Ï¥ाÑÿÁ÷ß÷l𫯇ÿøký‡ÐW Þ@¼eÀC.¥`ŒåJsÎÞlLž’ï|"óÎË”"÷ºf:Ëu’åZkjc=æk¡±Rp)„H[-¨©~æ•Êç ©Ài…Vìž >ÿLðk¯‡ÿú Ĉ7 ¬¸RhÆ4cœ%YÎsæœ)ñîNWè%Ýßnx®t®4MåÓZ'…~Jé8ͳ\iÆl)ë¸2¥’LqÆ|ÇÚ¯Ás°ÈŸy¥òGÞS‚¦g ¯¾ÿ¹àsÏÿü[ÃôµþNˆþ+o Þ€²àjíxY®r¥KÚr¼ t¦3Vð”óLéL)[ ×’Qš“*M룞QÚì²='n *V^|ŸSZg¹¢mÔ–‚M[ƒéT]ñ'ß_ùÂK%WbåÀ™ê«~¡ô}Ïÿß?þ?¯ßƒ ˆ7o@Yp•PZGi–+±ÀÅ$)„%Tš«4SRpK ¿0öApnKÁ8K²½ÒgÁ¹%…½_@IüyŸ4WïN^óâJþ“ï-ñ}å’ƒD8·áßWþáçƒÿñ÷ÿÓ×1æ_€xñ”W‰t¡‹Iœ3[Š\éL©8e®-¥à¾c±½üÿþ‰í­ß%¡5Kó<Îr­é.rƧÓZ§û—Žð–Í gì{ŸöÿüGjëe‰ÕçNÉ?ûáê?_úï¾Òýõ7F8¥@¼xÊ €«Ãb“,)­ã,Os¥´¦ûNn–f`ŸÒ:Íó$SŒ1ÇÎÌ->HU‡Wn¸?÷ÑÚ{Vm,¸P¬—å_ÿLóO¼/ý¥ßî~m#Æ‚€xñ”W‡ÂŤY+“K2Æ“,Ï•%¥àç‚øäJ“S)g̶„cÉY®WÑ5'¤ªŽ\Ï<åc)À…å¹ûÿöƒ«ÿúÍÑ?ørwks o Þ€²ઠ´Žç¼˜äXB ždy¦´Òš\€„3&w,iÍöÐHU-Œ#ùoù§>Pq-ØT€KÀgžò?yÇû¾ÖGóˆ7o@YpuÐÅ‹I³N—‚{Ž¥µÎr+E“öÌI9㌠Á%çRr9Û$t¤ªŽÃwÝñþãÕnU±©‚Ë„+ùÏ~¸úÏ¿ôÛÝß|'‚€xñ”W„y/&ÑÄ Çâš ¦i³z÷O{ÞlO+gyŽÑ¿ó³V’?ÿ‰ú§îzX pI¹UµþŸ[ù_߉þë×Ù¢8Ĉ7 ¬¸,p1io_㌱EFHhÆÒ ©ªEœ}á¥òÏ~¨êÛ(ÿ—žï¾ã}èƵ_þÞ?}m€r`o Þ€²àŠ ´Ž³gPÌU9CU-Às+ö_þîÜÿÀU·ù_üxíûž þ«ßlk'Å‚€xñ”W­ùœÚRØ–<ñÝ©ª…q$ÿ™W*_|_Ebö/¸Š¼gÕþ¥Zÿ}½ÿßÿ‡~g o Þ€²àj+MF¦'{1 ©ª…yiÝù«ŸjÜ­cóW)ØŸzå»ïøÿ—Û~u+Á‚€xñ”WÂŤ9*¡§>ZN¥ÕXÛ¹ µŸx¹ÌÑT–ƒ»uëïýѵòêà—¿Úƒ-;ˆ7o@YpEØ¿˜¤¦_LÊ•žþW¤ªã=«ö/|º‰TX68g?ùÞòÇn{ÿ§ßhsÉ+o Þ˜º¸4h­Ó\Ei–dlUZë8Í£4‹Óü ¿²$Ë£4KsȪù‚ýô+•¿ÿCkU`i¹[·~ñ‡Vúô€xñÆ4(pÉÈ•V:˵p仓ŠƒÌs•+ýXôÞ¥#ÔÿÍÏ­ªõ Ÿn¼´î`)À’c þg?TýÄmïïüFûA/€xñÆ$¸úÀåCk¦ »V–«8ÝÛæˆ4Wqšgû¿ÑL+LÕÜ|ß³Á?üÑuÈ* /­;ÿðG׿ïÙKâ Ä“ gÀåÖ{s'¨=ô@'ÓL)•jGk[JKnó8{wïÓ lþ—>YGøÀ$¾ÍÿÚ§¹åþÝßì„)®Ø€xñ”—ι#…c ιÒ:ÉT’å‡ÝXi§¹Ò̱„ܳeÂyš#}uϯ:ý3ÛUlÊçŸ ^Zsþö¿†­ˆ7o¼ ª¸<§+çž-][rÎ3¥¢4Ÿ²Íš±$Ëã4Ï•Þ»»%\Ãç /•þÞ]…¬àHnU­_ü¡Õ/¼TÂR€xñè€Kr® áÚR ®©Ð9ËÕÌ ¢4žÂ±¤%…c ÁYœåð³÷ù_ýTã3OùX fÞ—øÏ¢þþkîÿù߶G¨ ñÆÒÇPV\t8ß+tœkÊÈçù¼ ö\é(Í%KXRÁロÞ婆ý7¿·y§†-€¹ùÌSþÓMûoþzëÍvŠÕñÆ2ǨàbŸ¢œ»–ôlKpž+¥yœå‹mOZ³8Ë£4W”©w,×’•Œ}ïÓþ/ýðd s§fýƒ^ûÞ§‘òñÆRLj$¸¸HÁ]KZR°ýŒüñSꔩw÷2õRp¾Ì•‚³ÿÍGj_|_6Ž‰kñÿýgšÏ­ þáWº¨5ñÆrÆPV\Pl)\[ Ω+4ÉNÌc‡®E9û•Ð‚óh) R+®øŸi~ä–‹'ÅßW~¶iÿ­Ýêǘñ⥋7P À…ƒsæÚ{y¥u”dqšŸ¬u)¤Ž’Lk-÷mÊÔ/Ñ"?Õ°ÿ›Yƒ¬àÄùÈ-÷¿ù‘µ§6–ÄËo@YpÁÎIνý}'Sj”déé\ÝÑŒ¥¹%y®tqo]†EþømïhífI{N…›ëïýÐÚÇo{X o,U¼eÀÂ’Âw,[ ÆX’©(9õŠä½Í4SŒ1[ ß±,qÅ·…{©üw>¿Ø°îà lþw>¿òã/£‰ÄKoà’-ΘmIÇdug*Íó³±(UZGYžkíZR î92ÉXš]Á&S)ØÏ¢þ#/`°)gàì/~¼v§fý×ÿ¾“£ë ÄKo@YpâîXÒ–‚s–+Ÿy§Ö:Érµ¿Ù¹–%xž\­ñÍÿæ÷6?z åIœ)?òBéFEþÍ_o…% â«o €sÆÂs¤c ÎYš«(ÍÎË6'ËU”fi®8gŽ%=[JqEJæš¾ü»d ² €s᣷¼¿ûGÖš¾ÄR€xãjÇPVœ'¶ž--!´fqšÇé9zÈ•Ži8 c–ž½W„}©¹S³þþ¯=·§2ÎçVì¿yÜ Þ¸Òñ”çwîqîÚÒ³¥4ì<£üø¹˜Ò:Ió(É”ÖRp×–—ztú{¯9¿øCk×˸XÀ9s½,ñ‡ÖÞ{ÍÁR€xãêÅPVœÅÄäÄ/N‰1¤FIžåÊìÈ—1Sÿ‰'¼ÿòûW+.6:.Wü—ß¿ú‰'P— â+o@YpN[È^FÞ²¥ açÑygä#S*Êò$Ëõþ1[R쿈KÀgŸöÿög›®wu.®Åÿög›Ÿ}&ÀR€xãjÄEPñ ÀÙÁs„p,IÃΓ3´:] ¥t¬s¥™c )¸g˘±K‘©ÿÑJé“uUÀŒ<ÿß}ºQ¶ùÿü!VÄ—:Þ€²àÜp¤œsβ\ÅÙ½t4†Ö,Ér¥´c ê1¥âì‹|èú•?÷á*>o\Ü°³ÿô»êeWü?~·ÕñÆ%7 ¬8·ƒ1N¥ÃJk‹w‰¦k¦s¥…Ђsy±¯!ýÙUú• >p\|þ܇«®äÿ÷ßéa)@¼qéâ (+Î þXF[pîZ’ñËæV§Yq‹ãŒ³‹·ãýùTÿäû!«¸4üô+K°ÿî+W Þ¸Lñ”ç·Eh–)e6¾¿q\:ŠÕšé U±Íû¹×~òå2>o\.þäû+–äÿà·ºkâ o@YpÎÐ8¼«÷º.NÙ6gì/~¢öc/AVp)ùÉ—Ë’³_ü÷W Þ¸Ðñ”çÖ:G¼pšüÜÇ!«¸ÜüØKå\³_ú­.–Ä—̳\nþÂGQÀUà'_.ÿ…Ö°(+8þ£U¿ø>È*®_|_ù?úF& ¬àlùÓ¨ü Ö¸ZüÌ+•?ýœ×(+8+~ô…Æp%ùs®þè %¬Ê NÏ=üü'ëX®*é“õÏ=`PVpŠ|ò ï?ÿCuÁ±\Y8gÿùª×K€²€SáÅ5çÿð‡›tWKð¿ñ™æ‹k–e'Ì­ªõw>¿âZU,®ÅÿÎçWnW1{e'ÇZIþW?°Z÷°k°DÔ=ñýÁÕµ’ÄR ¬à(9â¿ø¾•keDW,k%ù_|ßJÉAÄ€²€cîSœý­ïm>Ý°±,'O7ì¿ýÙ&ú+PVp,~þ“õÝt±,3¼ábÖÊ çÇ^*cf(€1ö£/”~üå2Öesó]w¼ÿäã5¬€ø?VÃ+”ÌÇÓ û>Ý@gàݨ…³_øt]—(+˜•Š+þÖg›pŒQrÄßþ\³âbs@YÀ‘gã3Í[ 8ˆ›ëo|V(+8Š?ÿ‘ÚGnÁ p(¹åþ…¢ e‡ó½Oûâ}°ÿÁoù³ÏX”ÀݺõW?ÕÀ:fá¯|wýI¸Y ¬`ŒÀæë³+®…æ ÀL¸ÿ[ßÛ ll(+(ð—?Õ¸Sƒk`ž¨Y‰n”~ì¥ò~ÊÇ:æå3Où?öš3PVÀØó«ÎÏ}¬Šu,ÆÏ}¬úüªƒu@Y–šÀæý3 ³i‹b þ7þp W(+ÀRóŸ}Wý6†ŽÇÍŠõŸ}W뀲,)ß÷lð9L¤œŸ{&øþç°Ÿ ¬ËÇ­ªõŸ~²ŽuœéÈ ¬Ë¶ûpö Ÿnøè‹œ¾Íá{hÛ@Y–ˆ?ýÊKëðò—½(XºsáÅ5ç§>PÁ: ¬KÁó«Îϼ‚Ð\ítÚ’ ëâüô+˜° ¬WWò¿öiجƒ ¤£.²®ƒ[Kð¿öé†+±É ¬WšŸýpõn-æàܤËUÒ„§ÇeÓïÖ­Ÿý0æ ¬W——×¹Œug)B°'¢â.ÝKøñ—Ë/£™e¸’8’ÿÕ?Û.pzK±*8û«¨á &e¸züÌ+•;5Ô*¨¬3âNÍú3„YÊ pµxnÅþâûâ*¼ gÊŸxoå¹oÊ pUöÎþʧ[8Ñhë€7åH¤`åS(B@Y® _x©ŒËÆà¤bwh*¼GsñÜŠýc/Á8e¸ü¬•äÏ~öÇàâu¬ÃåzË.ÎÁüÙU×Ko Ê p¹ùKŸ¬û6jq4Þ»s÷ùϲŽwe¸Ä|â ï»ïxXpyãò¥¶{‚ xã»ï`/@Y.-Žä?ÿ‰Ö\Mu² ºë¢‰äÿäãuŒ·@Y.%_|_ùF¬ÀÅ ÁÏQí,¡è:÷—v£"¿ø>XY ¬—õ²üSïÇ+pá4ÕÅ×0Ètêý•õ2¬,PV€KÅÏ}´æZ(¼³j‰3“+'%rÎ¥Û겋®s?N×â?÷Q”( ¬—‡\w?ó”u3J… "¨NC®\Ñu¡Ô×¹Ægžò?pÝÅ©€²\8c?÷1 °çdϨ%ÎWxœ½º rëÜÅÕÏ}¬Š|:Ê p øü³Áó«Ö⟋ ZLTœqàyÉ­%ùø=¿ê|þÙ§!Ê p¡q%ÿÙ#aŽåÏ^ªÍ.Ž¯jNIweIáeü ÌÅÏ~¸êÂe¸Èüä{Ëë%Xoõω?æ¼Y¬³ôÒ8‘ç=¥¼Ù•Oa­—äO¼ì(+ÀE¥â Œ‹S‚õ³×T³’ %;/”â:í*Äó]ð?ù¾rÅE 810Ás©áœ[‚Û–BpÆ´f™Ri¦2¥°8`1þÔû+%‘ 8õ0zºdºÈÑü‰¼XÎùI=Ú,¥µ>Î3^XJŽøSï¯ü·_îâôˆ¾À‰€hY%µ¾cU<Ûw,K¾wª3[ŠÀµ\ ¥\`Vù…—JXpªzfJåÈ?]™ò¶ÓèÝZxÙ/5_x©´à+ úPV`~¤àž-Ëž8–-}÷][ZŸ 07æƒt„ƒÓ–UsÅý'ÛttŽ‚Ï@kͨ¯.ìgc1\ÉÿÌ+8I¢/ef~›9w,Yrí’k;–3uø6*EÁ|ܪZ?øV`î`ý˜5ïïQ'+Æ.²ÖšÅíãŠ}Jð¹Òí*¾ò¢/eŽÂ–"p¬²g{¶”bŽdçÌøx€9øéTp­ œF~šêŒeÏy)®ÙŸëHó«ôA•‚ýô+H[D_à€2¾šHÁm)mÉÓsl["KÐL fâVÕúÜ3» NEVÍþàóNþ=›—°0ñéô|#ŠÏuسL1®8AO‹‹`ñÙ§ƒôµþƒ^†3 úDzøj½œ»–,ïåÅ1¿«ì¹.³€å槰'­I¦¤¤f¿ña·œÞ”uªxçz–³Ék-l r…böS@Ú úÇ9««åŽm)N¼ñÑ’"ÍqáÁŠõy$¬ÀI˪ãüò˜y²/gz˜uàãO¹Ëžés­ÏxXZé*¹±þ™à}­¿ÑGÚ úÇÙX‚Ë­Œ¥ð«ì9¾cÍxbg¹%Ùßåjâ— @Á  Ã œ‹¬š1‡s`¶ç,3W d«f¿ñ‰§³æJ²+”¹B·@ô ¬–)¸[°ïœå‚¡Ò:Îòaœ†I&øÀQšãtò‰GRLc5ŸÖÇ:€ ² ëÓE <Út•uÆnésÉ­Ynv‚/äŒÅÕ‘gŸÆ_+!¢ˆ¾À1T7–àÁ9·¥°$ŸÝ7F3–å*ÍU¶ŸV¶¤pm9ù­–d9mc'³m‰8ͱøà0þø{ËjÂÁ©…× ­yê˜e„绌‡•áM¿Á,·ÑZ·Ûío}ë[÷îÝ{ñÅ_~ùåâͬô»Úe–à?ùrù—~»‹Ó úPVWú}’{…¼³qeJ¥™ÊÔcIfÎYàð¦‡É^eyš©±3ß–8·Á¡T\ñCÏc†8YuJšjááT Dc'¾¶ÇWYcÚ)Žão|ãŽã<ñĵZmò^cyµÅÕ=_úÇ¿ÛïÇhqˆ¾À" ðB36´{¦¼³Òqš¢4Œ³4¯Ý {ò.q–çjïvÉDǤà.5à0þØ‹%ßÆÇœ¼0[@•ÀøÏyý/Ú¤à#göŠA¥Ôh4ÚÜÜ|ë­·¶··_{íµo~ó›½^/ÏóSR§—ßæìE\-Bô…è ,ªÆ±QïrN—If?©´ÖY®Ó\eêÐ+mŽuÀ¸:Ú {¥ÆòÝŽ%G ì’À8®ä?þRëN¼¥g–Z¾Ùo?»š:ñ×8KÞ‘7žñ¨¬Ü›ò×8Žð¹HDYy4Ì¿µ›âìFô…è Ì rVãm‚.“Ìþµ’+M‘j¶°æÀ;J³É»§¹òã›F+€±¯¢Ÿx +È*}‚÷·êl¬Øoa=Æ ¥ƒÅR:­uš¦išrÎ-˲,KA2RŠô€‚íg]Œ˲LẮÉÿð}g°ó3ó&fyu“÷RJeYöÆoüú¯ÿú›o¾yëÖ­÷¼ç=¾ïÛ¶mYÖ`0ø•_ù•{÷î}ÿ÷ÿsÏ=W*•Žô´¸’üÄËåöÍ!’Vˆ¾}yAÎê<œ;–ôm˱¥œmf·Ò:ÍU”æTž;ã¾ïÙrrÞB¦TtHs¤ãÕ½œ3œÛ ÈGoy?ù^(+ȪӒU §ª¸£ÉAi­³,‹ã8ŽcƘÑQ¤H>ñbÚ¾IV™.&Ƙ”’~IB‹RXEI6íâÅá]@ÞÐ]HV½óÎ;¿ök¿öúë¯ß¹sçå—_vçÕW_ ðÙl®®®nll|ík_ÛÙÙY_____+ <Õ´ÕÅ‘muO¼º•>ÄÔ`D_ˆ¾À¼rKpöpÎl)èJÉì÷J·ïœC= ~àȹQ|èwF’åc)iKŠðöâ /¡É²êüeÕŒšêÀÇWûP9I)Šï)=eRU¤£Œj2ÊÊèb *±ß/Qü+ç¼X7HÚŒn<=aÅ&<ýæU#ô¤a¾ùæ›ÿæßü›wÞyçÆ/¾ø"cì­·Þêt:õz½T*EQT*•c¿ó;¿S­VmÛ~þùçé7æqf´ ¼ìüÄË¥/?ˆp¦#úBô ¬.ðr“}§˜7ùâvR:Ò„I¦§>éähGŠõ¾€1ÆØ­ªõ‰ÛÖ²êŒeÕñ5•6Å)ÒBRJ­µ¶mÒEJ©1EJÌè¢Ã$QJ¦ÏŠz–Ší[ýÉ$¾Æžî°r Êš.oò<¢è­·Þúßøï|ç;wîÜyï{ß[*•¾ùÍo>xð ÙlÚ¶½½½}ÿþýk׮ݽ{·×ë½úê«Y–}á _xñÅ}ߟKJ]¹õÑ[Þ­ªõ ‡´¢/D_Êê‚!ÅžÛÌìç4åÓ\)u¬ ¾cM>ç,W_Ò\¹_k±-œÛ`}¡„éðÐT\Vh¹žeY’$&C%„pÇ躋ؿH, W‹‹€ãÛµRFØPañ^*"r¦8L2(eYÕβŒ3J,¥T†¿ù›¿ùÖ[o=ýôÓTøõ¯= ÃÕÕÕr¹üàÁƒ·ß~;ÏóçŸþ}ï{_Eÿâ_ü‹/ùËœsÏó^xá…â N'¥£.”ãœýè‹¥_ú-L Fô…è @Y] ²ï|wÆÜñÀ–žHyk­g1ñL³ñs›F+ä )éeÇ•üûŸ °ÐTg&«Ž¯©LzÊdŠd±h¾¨Žè¾ÆpŠ¤1ʪø'“€ShE Gy°,Ë8çyžgYVÔWÇ—XZën·ûÎ;ï|ík_{øð!j­©°Z­zž·µµuïÞ=¥Ô /¼ðÒK/]»vmww÷îÝ»›››_ýêW›Íf¹\¾uëÖXÏÕ%’I‹ñÏ¿ü•ì×}!úPVç Mì¶ç)äÍö yOêÔáœùS~yÙ&WzlW²¥ÌJ#–Ï<íW] ‡¦:ÖƒœRªê0Me ÐÇ’BEÁc)¹Yà¡û})Ø~¾kLA -Œ.*ú²ýV.V(54©*ÆX–eäF˜ç9'‰™ãH,­õƒ¾üå/¿ñÆ·oß~Ï{ÞãyÞ7¾ñÕÕUß÷Ûíöo¼AÙªüãõzýwÞyøða³ÙüÔ§>õµ¯}íK_úR©Túñÿñz½nŽÿ”ÒVŠŠ+>ó´ÿ/¿b@ô…è @YRp{ϾsÖ/˜\i:«ÕI·'9ðûH’,Ûl)"LøXz~øyxW@PëqŽ)«fIUQ7ý‘J±mÛ¤\HÌ<Í(Eù¢4Mã8&mCEzEÏ óôEáD¿!ÌÏFn™ÛPÕßXI¡qÔ êD’s$±è°IªMj§Ã¡x›<Ï[­V«ÕªT*wïÞuçßøF¯×k6›•Jeccãí·ßN’äå—_þÈG>Òh4677ß|óÍ<Ï××׆Öú·û·¿ò•¯Ü½{÷ŸøD¥RáËT ü#Ï— ¬}!úPVgŠàœ.“Ì5´;ÍU–ëÉ;O2ËÀïY.äL^‰±¤È`ºÄ<Ó´_^w°Rg)«æMU‘""e¥”2²Êˆ6$¥HG%ûÐÏ&gU4ñ+úL}Uô«0y-3MØüÕä¦Ì½Š…‚F2™ßP–RŠìÚµÖ®ë’Ká,–ÅÛ!VVV*•Ê·¿ýío|ã«««Ãá°\. !677ßzë-¥ÔK/½ôÁ~°Ùlnnn¾óÎ;£Ñ¨^¯ÓÑ®­­=ÿüó÷ïßÿµ_ûµjµúÒK/U«Uó,W>mõÒºóLÓ~½…¨Ñ¢/0›ÎÇ<«…9ÎÐî(Í3¥ÕéØhÎ5ðûˆ‡š­À0Za©ù©T^\ƒ²º šç\û4«ŠŒÔÔp8L’Dk-¥t‡4Iq•R*ŽãápØëõ:N»Ýn·ÛÝn·×ë ‡Ã8ŽI’qb’Q$ÒÈŠþi~(&¬Æ”IyÑÏ$™L©^Q}Y\ÐC‘뵇Mš)f8ç¾ïw»Ý/}éKßøÆ7Ò4½~ýz¹\n·Û¯¿þz–e/¼ðÂÇ>ö±f³¹±±ñï|'ŽãF£Ñh4’$év»ZëF£áûþ[o½EuóæÍÞ}ÆiWÓö¢}ŒsÅ~ë>ì×}!ú3œÕB«&„m-`ß9ÇÐîã0ûÀï#I35>ZA Î&+,'¶äŸÞË®—~iÇ‘U³¤ªò<ã8Š¢,Ë\×u§X'¥¤’¿Ñh4ºÝn¿ßF&ÁetWQ#Í6C~ÇXÙCŽ‚¦°˜ìbû#‰éöišÒs !H˜íÇ MY¤ )…5HÚ‘ŸáØ"LÑ$¾ï_»v1¶¹¹éy^£ÑèõzÝnWJùâ‹/¾òÊ+µZmccã­·Þʲ¬ÑhT«Õ8ŽƒÖºT*F£8Ž›Ífš¦÷ïßÿð‡?¼TçéçžñÿÁ—»)|,}!úPV'~5¶æ¶ï¤BÞ33uñl9yx™RI¶È¥ŽL)­ÙØãÙR&0]J¾ûŽWwÔü¯÷4«Š5]IY– !|ß7Ù$R5J©(Š¢(ê÷ûý~8ƒ(ŠŒ­ÅŪ?z|ó¶_bWÔKFÛ˜¼ý@ÒˆÒ\æ.¦«Ê’ 9ZúÁ<—”Ò¶m¥+®ëócì «"®ë~ä#©×ëqß¿?˲jµúÜsÏ}øÃ^YY¹ÿþ½{÷’$©×ëAdY6 c¶mƒV«•çù /¼p÷îÝz½>ö.,ƒÅwßñþõ›#leˆ¾}(«“Á±„-å…¼·™³<Î~}á$ÏÇÓ–çörò0[‡”šÿ…ŸxcÕdª* Ã8Ž¥””ª›F•e%©¨öo8NÎËPuÛÏ5' «òŠuƒ&eíC)&:0’XæfÔèEÌö=0lÛ67cûî…œsÒfœsÊ )¥\×µm{¬8pL_Ñ?Ã0ô}ÿþÑ?ºµµõõ¯ýë_ÿz¿ßo6›wîÜ)—Ë;;;o¾ùf–e+++Õju4õû}¥TJ©0 oܸñÁ~ðÎ;A°Œ›À>@Y!úBô ¬Nb„ð9ûe’L):«Ï%²Z`à÷‘$™;·¥à‚s…œô’±V’»åa ¦ÎLVÍÞU5\×¥T•q<§ò¿0 ûý~«ÕêõzQј`ã'á8ÝÅ貋0î“cl-&Œ$Y’$űÂB#®|ß÷|¸¹¹Ùl6ïÞ½[©T¨·Šsî8Îh4ÚÙÙ‰¢ˆ²UÏ?ÿ|4tkòM¹ò>윳Ï>íÿ¿?ÀÉŽè Ñ€²:ÖÙrD<ÁX’åI¦Î=º:ÎÀï£/œäÊã)iœÛK§¬à]Aµ¦:Y5v3¥T¯×#ùQ.—IZ”eå©vvvÈ'4 •ç%@…v&_DI!£©ÆÚ¨Š¾|t›âÌ_#iH¼…™É8%IÇ1cLJI™+ß÷)ƒäyžé­¢ñÄuŽyžg´“™/ìû¾"I’(ŠÒ4¥Û+¥ƒA¯×³m»T*eY¶±±ÑjµǹqãÆóÏ?ëÖ­/}éK¯½öšÖúæÍ›qF#¥”ïûJ©ÍÍÍ(Šnß¾ýÊ+¯<ûì³¥Ri9³UÅ Ê Ñ¢/euŒ¥G÷JrÆç–àJ3¥Ïí?æÀï#IóܳåãÏÈ-!Ni¸€Ü­[Ï6m¬4Õ\JiöÏØXe¼úý~¯×£ä%pH‘=`»ÝÞÙÙéõz$ŠfF{˜‘?Å ë¤èó<§ÌÝŒîbF÷šû Aê•¢b?óttGz¥õJ ‡Cª,•Jår™ÒS¶m !hT±Ia9Žãû¾ã8F}‘<³m›2WišÒ#±EQÇ®ëR2jgggggGk]«ÕHÔݼyóƒüàh4zûí·¿õ­oݼysuuÕuÝN§³»»;nܸñÊ+¯Ü½{7‚…³RW&£õlÓ¾[·Þîd8ý}!úPV‹ åL_ær…f,W*W:Ïu~¶iéãü>ê«‘e¹²¿*c["Kpn/ ŸC šêD5Õ²ŠÌÇûý¾”²R©!!”$ yTPWU–eô{Ò*¬P­gæùšt“ã[ÌbË jŠ¢ˆæSsum !Êå²”2Ë22úsÇó<3D˜€Ôã8lßrS¤¯Â0$“‰ Œ¾2mWY–QbŠþj| ‹¯èq8ç¶mÓ*Q•ã8išYU¯×›Í¦”’ªþž}öYJU}ë[ß"3Àr¹Üï÷Ó4½yóæ+¯¼òÜsÏ™^6)uà6øË_ía@ô…è LûcRð”“VÎSü°EØ–p,iI.8猟v4æXÒ±Æ3ËÕÉæ‹5ccùn)8/xv¡uÁ%ÙZIþÊ ñ€è Ñ€²Z!¸% %9g‚sKîŸç‚‹½¹('}‡ üÖ{-줞PiíXrì[Oi šeà…5ç‹ï«@Tà…_SGV‘ àp8´,«\.û¾oJòÈnass³ÓédYfò9F„˜WÆ©‚RI”D"§‡V«Õn·)cÃ9ò@õz}ee…TŠã8ׯ____·,‹lÜËåò /¼Ðh4HÝÑÞ••ê‹¢ˆ *Ò4 Ýnw8æyN†$üÌÔ,:B²å ÌO±‚Ñ’š*/6šä õr'Š¢­­­ÝÝ]ÆX£ÑX]]¥†«0 ³,£zEJju:{÷î=zôˆ1vçÎ}èCÏ>ûl¥R1ÏeÅ«¸â·îÇ;!‚ZD_ˆ¾À¡ ðPÒ\{öq>çæÏ9³¤°$s™ÔZçJgJSæúøy˜yŽ\ Él™+MV¤Çº4Wc—gK¦9RÒWŸïyÒ‡ºÀ‘Ïòøse·fñ«0I’ ƒ0 mÛ¦Ž#JÎäyÞï÷www;Ma*:þÅ•J)Ûív»ÝÖZ7›Íõõuzê0 ó<§–­Á` ¥¬ÕjýèGƒ ØÝÝ­T*O=õÔ“O>Y­Vgÿª[{@âÓOú¯m'øR@ô…è @Y-:dJY§¤)ÏkK!—BÌ>½nÿ<ç–ä–dŒI¥u®t®T¦ôb…Áü>ð$w-Ióȳ\/Üø˜æùØ¹Ñ K§Ÿô–ðôÇÁœ¦b34V‘žiµZÝn·\.—J%ÇqÌèÞ0 ©ÚMäg´“i”"]dYTõ×ï÷ij0ù¡S¬R©\»v’Tœs*™£²CJ(Q§“mÛ•JeuuµÑhP—ã8ÕjÕó¼Z­fÛ¶ëºårÙó¼7nÔj5JUåy^.—cÃá°ÓéPò­V«‘7 ÑŠföqEY–•J%²Ä0uƒ”‚«T*ÔÐEkeY–ïû¤Í¨ 1 C)e£ÑX[[ ‚€Ô#eÞ(6•Ržç½üòËÏ>û,uŽÑÃŽMû—™¼ÿöË]¬¢/D_Êj¡Os¦,g¬qPFižæ*Íc¹àœNrKp1çy.8’Sù,çtmcÆSå°ßSžÎ±¤cÑžEçù|; ÛØnbK£Þ÷JólÓ¾YY®â•ÌÅÌ’Í^ÝwⲊ´D»Ý&÷pãG ×ëQ¶ŠºƒH5‘ýºqÕ3Æ}TþG¾|äÉ>’$©V«kkkÕj5Žãn·Kê˶íF£A ‡ ÷,˪ÕjJ)J—‘²RJU*E¥RÉóyß‘ ÚÙÙ¡ä µ ™qº”Ò1öèTH¶ ” Êóܲ,šÑäû>‰+ÊÞP¥ç¼T*Y–Ç1勨lϘòÙ¶RÊ$”La‰œz½N{ô˜$̨†”!e±è¡È!ÝqœR©Dê‘æ_‘¸"+ùJ¥âû>Ýž¬&¨ú1Ïó èµSêŒ1A†–eA@‰,J‘,¤U%OöF£AâÐÌ2FžêÈ-Ê Ñ¢/eµ Y¦ìÙÊ[;Ï·öÖsŸç‚;‚3&èBäÙãóø+íH1ãõÎß5-Í”ÊråjúIžäãç6íh¹BJÊ ²ê<Ÿå,ÚìÏ5{ªê0ÑÕï÷wvv¨H/²ÿβŒŒûz½‰JI™|Ž™=e²XJ©0 777[­–mÛ7nܸvíš”²ÓéäyNš„ª)óCò©R©T«ÕbÖ‹TµE¹®K“¦¨¸ÎTå”é2Þî&£å8 -ª¬×ëJ©ÑhT¯×oݺE6î¤ÖHbQoÕde é.­µWZkÛ¶«Õª¹#5Vi­IVC:€jµJbÌȺëÃ{Ñ¢/eµ IžÛó—·*¥¥Sl¯ÖVHÁ-Áç½¸× ɘ9ÏÓ\ Χ üN²œž‘Ê‘gýa vdÏåÕÏŽ%G †'^MnV¬»õeÙ%NUœçÁ/B^kÞc8,UÅfk¬"ƒÁÎÎNÇFÃ÷}J¥iÚív[­•ÃG ’UI’˜‰UE;ròñ Ã| ‚ X]]¥ª?ªˆ#)EI!3)˜4µl]ò„äHù%² (zf¾ ¹¨“z)ê®jµJµ‚yž“¥!ùîìì„aX­VÉ»‚l-LòŠ:µHËQÑãh4¢'¢ÛÓRxžW­V»Ýî`0H’„RaäYOæ¥R‰²jFV-y™ßìÜ­[7+ÖÃ>¾õ}!úPVósüòÖ\é\å…sUЕy¿Âèv¹Å6Æ_ùƒÖÑ¢/pÀ[‰yVGÂÙøh!x’-âñ¢5Ë•Ns•fù^}-güØöKq–˜"×lÿéò½¹ä³_¸œK!lKØ–\0¾÷(­K…c´ÂÕåÏ~¨z³zõc¯S3'Ø­tã\šj^Y•eÙÎÎUîU«U2(7ãwûý> ¤2™¢,˨h‹Þ“[4;¸Óé”Ëå»wïÞºu+‚4M©{ŠÌÓ]×¥Ô±k§Ìã“Ž25‡¤¾ÈX‚JïÈÙíW G³ýÜWqõJyžGõ„[[[=’R¾ç=ï¹{÷®ëºTI–èƸ D¦ZGJ¸™i]TïgjIãÑ"à4Â/‚F£A¥•‡ ž:ð÷³´:ìç#¾j/OÆLrþ«¯‡ø‚@ô…è L‚ëUG“žBy«¦âZÅXÆ8g’ KÎç6cPJÇG üÖš¥¹JsÅ“RXBÐòOrÇâÛë¹L3•)mËÇ/#Y£®¾Í?pݬ:Ç<©ŒÐÅ\ÃY4Õa²Š:‹:M­-•JäÁ ðÝn›"@3ÔMD5~äú«ãÅ9ÆU¤ŒŒÊ’R†aEQžç+++wïÞ ‚€2o¾ïß¼y“16¢(ÚÙÙ¡¶+càA.œsÒŠdÑAVìTjHø(åU­VG£Q†išzžgF`A;-9 þÑ[î¿~s„¥@ô…è @Y-B’å¾c]'ˆNÎvÕ’bò’I–«$WÖÔ¡xQš-|Fí]¶a¹Üš¹çòÀÙ–8òâ ¸lÊÊÅ"œ¥¦Ò—äÛqz]ßì²êÀP¢f8A@mHBˆ8Ž{½^¯×˲ÌȲV§4Ž©ÓËó¼ßï?zô( ÃõõõÛ·oW«Õ~¿†!YAPyáÍ›7=zÔív© ÐH£bæjRc˜[fŠ®ñ·˜ˆ„xñšñÄ0YPj6›deÑï÷ó<÷ Ã¥“‚lñ¢(¢RCÒ$&5ý…ˆŒ±ÉöªéKaô•ÖšL,èAÒ4B˜Á¾¦Œœ6â8VJõz=£iÈeÞˆ+zÉq²¤Wíû>‰«š,§V@Anɵ²¼]³îwáyè ÑX2eE™V[šÏ¨%ÙçdšŸÛ–œ³cHBpÇžcSÎ@•ŸnX¦µN ÓÍKNä䥜NW‰£ðòcÞß_@Åx‚¯kFãuªlµZŽãP{%gƒAE”±1ÕtÅl•eYäÆÞétcׯ_/•JY–…aÇ1Í’2NƽV«5 “A2‚Lj«ÃðŠ¨ÆnvD¸É9i<£ÍÌ-ª¤×8¤”·o߶m»Óélmmíìì¤iZ«ÕŒÿa’$¤-É¢2]Q š»Ei+Ïó|ߧyY¦ÌòÀŠÇ >rÓ…²Bô…è ,‹²‚ÛBØÄö+‹ÒyãlßÍéñ '2ÉŽUÞ8¼á…ýÆ9—‚Y¬Ks”ù^)®v­Ë‰È¹dƤÈÎ~­æÊkéºÞëõ666Ò4¥ºdâ†! k22ÀXV  Jv%I²¾¾^¯×ëõº±V§äµ'ÑÿM™§˜tbS½Å”"eUK3~6Æ|É!½R²P·m»^¯—J%ÇqÈ{}0Ü¿8Z–E#­Ò4¥ ^†FGÑü«ápHëC……žç•Ëe2 ‚`}}ÝóPÏvpÝœ!a€è ѸÊÊJ^rí#o¶`±o6~n Á…à‹=ç̳åÄ—‹Òó¼dB¹{kæ©átbg§pµx¦i—+;Üýørå˜æxg©pÎ]wÍâH «n·KjÁu]rùFI’ð YEù¥”I@%IÒëõÈ:,òƒçyÍfS>Ž‘U“-RÅÞªYäy„bwÖ˜‰Å/òc„I™ú@òBdŒÑØ«,ËnÞ¼9F£Q¯×£?ÓNFi:¶?›˜º°Â04Y;Û¶ƒ  Ãáp0T«UšA ù´eG<Ó´¿½›b)}!úWVY¹3Œ{‹Ò|1¯ÌG+8RDj‘ '‡9Ҝץ&:¥go™TZ§¹J2¥qÁäÊñëh²:SYuz“…ÏRy.<Ì*Žã­­­~¿Oy×uM`’$T,GóšŒk‰4MwwwÃ0¬T*7nÜ S cSQ4Ç#ku6á‡>E9L?~“õʧ–âé‡1vHtä$é‘)‘E «f³Y*•Ìríîî®­­™N3òÀ Ì„«Ñhäº.ÍJv]·T*yžGêÕj£Ñ8ìÏXD]RÁöë.”¢/D_à*+«©ßú,S*Éòãtû¥y.Å㣤ŒæŸ$`I1é­™)uÆ—8ç4~nö«$…Yà¸ReuEtÑqî~Mu‚æçø;× ØyÕn·=zD£™*•ŠmÛ4Àªh\A²Š’3Æ °×ëíììH)©½Êó¼ÑhDž{F`Ùº™X5©ŽT³ú$]èNp=‹Nt”›j6›Zk×u©Í¬Õj êÅ¢ž4­5‰+’a”좱WŽã{år9 Ãn·»µµU.—‹ì碩.ûVùO^`}!úWVYMzÈ0Ʋ\¥¹ÊNÂ?%Í”gÌ’bÞsòàK&gØ:iïçg¿Ë .#¸ÈpÆÞw MV§+«Žo²w)VãHMÅK’dgg§×ëU*²BDQ4L-u ™„Åý£ÑˆÚ«‚ ÐZF#2,–üQ>§hú7ûK˜ò‘qà•Õ1sѤrGSµH½g´F^&IÒn·=Ï#EGe¬éÿTTéº.ÝŒ¬/Œ•E¿ß¯×ë¤]¡¦àý×ξ}!úWVYeJEiæZ’sž+MGu‚ó@Ër5vJ8sžÛ³ŒP8%(ïlK1û—èi,#¸ÈÜmØ5ïj6Y¬™Äb²já Ï…]½yåÄd‡U«Õ¢©S4f*Ë2JËÐ-Mj(MSÆé rÃKÓ´Ñh¸®Kë$?Œ¦*šUv¨‡Õþù¦ÐÁ›‰R“£Íã“îšR…8©úLû½*¤”IÆqÜl6ÇI’„æÓ ä<ÏÉäÃÍ›š@rø ´UµZí÷ûÃáp{{›F]Íòî!”c¬êŠ§öm"úBô®¨²bŒ%™J2%8?¥Ïb2qnSÇáŒO¶À…ã#ø^!ïS>³øX}&4?ÓËw]·ÑhT«Õ â8β¬Óéôz=Ê×}Í/ι)§$§u²tçœF£ápX«ÕhéÀ"—¢Öö-LµBô…è \ueuª¤yî,•Õ7¦¬Ì)óÆf˜UTPô›¢¸"¯?)¥ïû¾ïÓv:ÍÍMª¥tÇqª¢¤2Eº#U$ÒJR·YZ–5;N³Ù$ †Ý&¢/D_Êê\Îm5vnKÁÌ€ŸÁ±_È;—}g†¼3ا䈻u '£@¦ËªÓ˜[u^•„G*ÆoEÑÎÎNE¾ïS %ŽãÁ`@©0deQœïD³˜è¯Nçí·ßNÓ”ÄÕ Rá”’¿IA5»²¢Ã Eê…ZÂÆ”Õa©ªß RPÓgj‘FbŒQÚh4ÚÙÙyçwZ­¹tP'•é­¢Ã39+R¤£ÑÈ÷}jÁ*•J¥R)Š¢v»Ýëõ‚ Bàt^€»u»äˆa‚<¢/D_ÊjQr¥•Öcçm‰xªèéPàœÛ’ÛRÎQÈ[p›Á /®Ù¸r}ÁpàŸÐTß$pFC‹)7 ›››Y–™ ¹I’% clÌ|r/Y–õû}¥ÔíÛ·¥”Q=zôˆr\d¼nÒ>f&Õ”DÍa¢Œå©èð²,#13i8£²2€ÅÌéCcÂA9ZÍÍÍwÞy§ÛíR§Y–ed“HC«è¾tH´n$Û(mEâªT*‘Åh4ê÷û4kRI"‘5Ã÷/{qÍþʃKè Ñ€²Zœ$Sc—@9íÜ>x„±O-*äµç²ïT{…¼H;ƒIž_½š~ë H‘ÓU ÛB\d)Åæï£Ð{{{ccÃØ3ŒF£Á`ÐétH`(¥â8Ž¢ˆ:¬¨Žª×¤”kkk•J…œñhrîp8¼qãÆêêª1+ŸLIe¢SVÔÁEQ†TÊHUvq“‰¹” Kz:ÀeYÖØ-M]_†­V«Õjyž×h4*• ¤<Ï©Ṳ̀­H—ÒÜazp*_̶̲mÏó¨5‹–t8ÒóBS-¶mBY!úBô ¬ŽEšŸÛœs)øaYÝ“½d²ÈÐn¥S¥Òüä«ŠÁUâ¹”Î$¦È†In¶Pê\ÔÔñ+gyê§j·Ûišº®kÛ6ŽF£8ŽIf÷:É*J¹¤i: ²,£ž"r_[[ë÷û4Vx0T*3\x¬ÉÊ´3M÷œ%‘¨̤ª(E‘QV‡­ÆÝV¤¦H Òƒ+¥,Ë")eD=5½ºÚ>t¯8ŽmÛnµZyžÓ¨eªœ¤¢JzprGLÓ4Žcê³ ‚ T*µZ­n·ÛívK¥’QV`.žmbÛDô…è @Y;þÈ”²/Lw,yà¼9Ï–'2BApnÍ?´›’ÎÚ  ¬NJ`Lù+õ·P-Öa³’NDØœ½;æ³-Ñ©¤1¶ººZ*•H äyNUj$'HÐ +Ò£Ñ(I’ êõz¹\¦ä I¬•••4Mé7ìqõ±ìD^é½ ÖÖÖJ¥)–¢ëú\‹FzŒ¬ÿL!µ‘>,ªAß÷oݺel©½ŠŠúȪžT–)/$ø>¤¬‚ àœ“¸’R’Cà¤,3òžUl›ˆ¾}(«ã_8É”åyž‡Ã$IÂ0l6›årÙX,L&. ¬®ð§î° Õ˜zI’¤ßï‡CÓìÄöç)Ó?ÇòNFY‘cŠ”2*íët:Ýn—„=¥L÷z19FLžçÑü«(ŠÈ¼âj^JŽX äN¸¤Îõˆ¾¸RÊê€Ámœ®5ŒÓ3¸´ ´Î•;K÷€…ÓL îXrÞ¡Ýi¦2˜Í€S}ÇIX™›I)=ϳ,+I’8Žwww©§¥T*#l|Ø€ w»Ý^¯G~AÐèaRV“ƃ¦ÏÊ|êÇi4TÈ9'UOä~AcÖÌœ+£ÙŒ÷ºã8išöz=jÓ‚­åb[è²)+D_\5e%÷ìCëc›wâ$Yî;G¯¤#¥°çÚ«öସ‹>E•ØXà+¥´mÛ÷ý8Žûý~§Ó‰ã¸Ñh¬®®º®‹lÀòpä{­”‡Ýn·Ûíj­Ëå2M”ʲ̌çËVM>…™œ¦”JÓ”|“$!zÊwUüôšÚ?˲lÛ&{@*#Ä{·wjöW,‹= ¢/® ²œ—Üi±à™Å/i®üYXÌÔâœæ:Ísò‚3æf¤šØQ «1}ef×:ŽCEV” ÂÊÊJ¹\6 )3¸šj̼¤¨…c4·ªÛíFQÄ9/•J•J…rG&³d&&ïX¬ B¿–eÃá°Õjõz=“ï+=åûÐíI¿ÑU×u©?]þéRçÅíê²l¡ˆ¾¸šÊʶÄQ3ή(6­0/TÈ›¢œ7«¨ÿYPzM†Ôï:ŽcÛ¶ã8TëµµµÇñêêj­V³mñë’ˆ«É_*¥¢(êt:4ÊqœjµZ©TÈñqõ"[ôÚõbÚòÝï?)¸%íA”}ÍC)­Ùì_FJë C»Á…A v½ŒœÕ’æ@y3‹æ1Ý/¶R8ÛétF£ÑÆÆÆh4ZYY©×ëäÞYuõ>Bc㧊€»»»a !J¥R­V ‚ÀØñ‡Oÿt B”ËåJ¥Â9·m;MÓ8ŽÕ~€K²ŠÔ—¹—±Y§¨mÛ4h˜†ãMœ—ëe)[†Ì¢/®¦²RZ£Ô³¥\i–æyš/Ò´ 8·wáœÛR̲YDi6K'%†vƒ Èzɲ®RŸ€3ù“m @–Ú«\×ít:½^ïÑ£Gø¢2ðªbÄe¢”R£Ñ¨ÓéPÞÒuÝZ­FãÎ,Ë2xGæ‹&"›š@’CTH +V¨?¤YÅ””)¤œ*ý•|¡¬ §_/YýìÊ¿RD_\MeE§w¸¨ÿ ßÏ;[Gå‘g zÒ\‰,w-yØe•,W‹í>œ67*W3au§Ûa–€ï…º/óO²Æ®T*–eY–Õï÷»Ý.MZ]]õ}ŠNæq)>fcjgl04¥ªz½yV«Õr¹ìº.%-²"åCâgÊû^ÌV‘x“R‡Ãv»ýðáÃ^¯çy^½^§=š‘R”°¢'û°ý9×$ÉÀbé2(+D_\Yeµ‚ï5˜ñ2ñìW8â4Ï•v-i.ÀÐÐî4W ygpY/-u)àq:f¹‰›ÉÙ‚Š²Úíöp8LÓt4­®®V«U˲ŠQïd`˜‹‰™=¦¨é‡(ŠÚív»Ý6€Õj•æ›™–§±P’OeR\‘4RJ…aØéthÜ0û]+T¡ûÅüÓ¸YZ–E‘±k p­„šjD_ÊjùNì²7ëÜ¥u”äsu7f¹Êr%8çœiÍÐ  ¬®†Êš]ŒhæFñ+õ´”J%×umÛnµZƒÁ€*Ó4­ÕjŽãPñØXÖW[/¸²b…:=#x²,K’dwwwgg'I×uëõ: ­2šª¨”Ì£™$%£¤”ÅÆžšªø¨½ª\.“7`¿ß§VY–I²Ç¾ã”¢Î.jdŒ1` )¢/eµl/صÞøô¾ çÂõ¸Jk†“\"eûŠ“Ð]GºPiÅÍd6ày^·Û¥Þ›ÕÕÕõõuêÈ*æ@Š17Þ‚ û©³”ÈóÜT2ÆÈW½\.“†1Ÿ„•9cŒD”½(P”dyž›1Ážç­¯¯×jµÁ`°¹¹¹³³Ci+²Ç ‡5Ž…”³2„̓˜|)ÀFŠè («™®šLùk®ô½˜\‗ZOAh°ÿìÛj›„ëºdȆáÆÆM®×ëÆ,{Ñeù$=K¨pwww4I)IVQ`1%u ü¦GHÓÔئçyN’dÆOÒ 6é„®ë¦iJâÜøUö)2:Êtaáó†ÑPVsåJ 9y‘õ¸`¹Lb9®jšSEµŽã¸®ÛjµºÝîÖÖÖh4JÓtuuÕˆ+V¨7›L[!9c¦d©Gn0t:(Š|߯×ëTç9YxØg#˲~¿?¥”žçyžGz¶m›š@Jxzž—çy†½^º¤Ò4í÷û[[[Ãá°V«õUüðGc™¬)#‰6RD_@YLœåBpš+§5Ë\8` _,ík_ šœkÈÕØJ°8çA0ÆlÛîv»½^/I’$IÖ××K¥’‰}õ^ÌONÑ R)Õn····ƒÖºV«QªŠ<‹3SË”ÎʲŒ´™Â÷}×u‹>ÆNpeeeeeEkÝn·ïß¿? †Ãáp8ì÷ûa/ÊÉ&+säæÑè‘‹î)`šK¼‘"ú`I•cl”d#¼ó˜]@𪋀àh•5ö×ã .sÎÉÒÀq)e¯× ÃðáÇ4M¸Ñh+‹AùAp6Ÿ“¢h‡f\•”²R©ÔëuÏó(39ÖuØGÈ8¡S²Ëqß÷Í#+ Ƙ”2ªúó<Òb¾ï—J%ß÷{½¦1V¶êÝVèñÇüÁ¼T\a ž!ý‚è @Y––ºYuA¹QD&›AAs©TjµZív{ccƒÆ¶6›Mß÷MÏa†ìXÛSbzñ½#Ãápkk«ÕjeYe«|ß³©8Ì£Ïü•¬ùÇY[[[[[ ‚À÷}SXœ@m„RjuuµV«¥iª”¢jÀ‡nnnJ)ÉâblHš9ìb ò¢'µî„”`YiPV‹H£c ›b1˜© dŒQMÉ«^¯Çñ`0¸qãM}eŒÑ ×±>™IÁ†wêTµ–ÑKI’t»Ýííí^¯Ç9¯T*µZäQA“Ó¨¦h6úH³Š¢wEQY›¦è6”n¢º>“%+vXMúUУÑÏY–AYÈv e”`y©{ð³:¥ÄŽ—8¢H4•± ÜÝ݇›››I’DQD!;¥ Ðs^Ÿ #«´ÖƒÁ`ww·ÓéŒF#˲ªÕjµZ¥ÚNEÅ.¬žN`…”—ù¡8D+ŽãN§Óï÷»Ýîîî.MТ)UG>Y_H›~ÀíÓix’±ë”`IA×õªé4TM1ymÛžçQeàöövE×®][]] ‚€Âß)-1]'òvLYÞ<σ©,•J+++ÆW½X¼·°¦¢1S4rŠí'3ÍÔ¬âL*ºKÇ»»»[[[;;;£ÑÈ÷ýZ­fYÖNÂŒ&“²2–î`Ae…í(+À2Sv œ?“ŽŒÊ²m»Ýn÷ûý(Š†Ã¡© B9°œ Ð2ùœ4Mwvv¶··ûý¾¢^¯“ 5D™TU±Vó8É«éRœ1FúŠ|ØËåòp8̨̲»{óÌé¾Ô£eªñvc;@Y ÌGQ,,NLïÊ1ÄâÆ¢€Œ°iR«Õ ›››”¼ZYY™¬ D¶á”>!f¶o–ea¶Z-šlYV­V«Õj$«Ìàé€'®¯(¯eÛöÚÚZµZµ,kccƒ>HÅc Õg”¼iÄ2ÊŠ *¡¬° ¬ ‡W3?ˆöTsÌË›êý¨O¦Ùlº®Ûëõ(UEQÇׯ_÷<¯X¾e¼ Šbrk–Å?lsQñÒ˜©ÝÝ]ª,—Ëõz”ŒmÛFŸ¬»(@'ß÷ƒ  48¸x3!¥Ô̽È÷¢8)ز¬[³À²m§(+ÀŒ¡.²žd¼[ô°.: xûÉB>—ÓVŒ1ÊPI)Ûíöh4ºwï%¯šÍ¦/Káuña'eÛØS°ånÊš\–⊙·€1ÇñÎÎÎÖÖV†œóF£a¦‹}Š“«}ä´´1t£èh&UQu³Â4*Ón7F£Q–e;;;$«ÌÝ©ÌòQÅO&}¢ŒU†ëºA8Ž³ÀJBÀc;@YXc‚¶»ÁIQ¬æ¢²@×u©íª×ë=zô(Š¢0 ©2ÐxLÉÃœ× ¹°LÚ “—eY·Û¥)ÀQ¹®k¦Û¶müЋZèÌŽŸUôEQ´»»; Z­Vš¦¥R©˜Ï4/§øé*Š4š£U­VÍdê飷°Q¬¬°eXêPå+ÇÖZ†žÅÈÂÙ!“[ ¹CBˆF£áº.Ùnoo‡Ã(ŠVWW©,‚ìæ]øº–0J.®Ïä‚›‰RŒ±4M[­ÖÆÆF¿ßWJU«Uò« T•05¦7\ðã¬sq,ÕaúʸkÄq¬µ&Õ7öÁ+¾dSqJY/3ëÀgYìàg¹×ûøa;Ê °Ô8¡ÀE ýMÉ–±Ø6A¼©Rët:ƒÁàÞ½{NçÆׯ_§xš*Ùá³h©¯*´hT#Çë÷ûÛÛÛdbnÛv­Vk4¾ï»®KZ·øŽœýbê–e‘c¤”2 Ã(ŠÌÓhce¢ô2ɃþEÑ wRj Û)Ê pEC ¡À±¢ÛÓŽ§‹­SC“¬"ã)¥™ ›eÙÊÊJ¹\¦ÊÀ±âÀäÔdnm9ßG!”çIÓ”ê-ɬÂ÷}šLk[4«0«w6K7™¼2æ~äQAU iÅ¢Û¤¤ésEùú¾O=ÌE€Gâb;Ê °Ì6NWw““:gJñÕdÛoÑZ;ŽS«Õ\×õ}Ÿ^½õÖ[£ÑèúõëFø„=Ët)¸<ù«—r8q·Z­ÍÍÍN§#¥¬ÕjÍfÓó+ ¬Ë @YÍÓsä¼×3x¢É‰´7{žGa´ã8ƒÁàÑ£Ga®¯¯ß¸q£T*QS u^¹VL7õ>¥Å<ã~ž±æ(“ôÓZ÷z½JU‘SÍÌ5bcú ªYjÙჇ 63;¸8Ù¬˜°Ê²,Š"ι뺔q²m›m)¥ŠMVôBÌmY͇Ýn7Ïóf³Y*•¦/à,‹¼äzÌØN€²p9¥ 1´ O )¥mÛTÀÖjµÚíöh4ŠãøæÍ›år™zoŒmàäcÎå~Xè<£KÇÉ*«¹بNk=ÚíöÎÎN»ÝÎó¼T*Õj5ò1õrGŽÍ=åOïcš¦ý~?Žc)e§Ó‰¢È(+êÂbû„&EÉ£‰‚î>É´”9N.€²€«É5MÚãSæ8y¾óÎ;T¸ººJåmcÞ&|ŸKíœT¢ï”´{ÜX=n­NéšGmllŒF#×uWWWËå²çyƬ¢Øq´ðàÅ^û¤yIÑ^ÒüœçyÇ;;;aöz=¥™mP~²X hÙ4YÑôªÑh¤µ¦ o6g“(+8™hþ̪ڦg~ŠcÆe›fu»Ýííí0 ƒI^±}KîbQ1—5æžwñgqAÌ„eVÈÅ‘¦"ÕÑjµ666h\U”ª¢jº¢¬:¾@ZLŠLΣ7(Žcú'$õב÷Æ`0°,kuuÕxW°ý~*º¯QàdvBŽƒÁ@)EˆöYyü+ PVÆ ìål.f;Ðq0•yÓÿ=ϳ,«Óét»Ý8Ž£(Z__o6›T6VXLgQ-Ù¥ˆ}§ä‘Lg‰%­õ`0èt:4®Š1V­VF¹\¦qU´nc~çþQ4*1I’^¯7<Ï+•JRÊJ¥BöBÇq¨¢¬ö)=e:¬h@0yJ)“$!¯vÛ¶WVV‚ 8fª 2‰(9b˜(¬PVN&P.zBÓôâÀ[Vœf2-4¡ˆjÿ„®ëv:N§óöÛoƒ,Ë®]»Fâ*I’¢Éy+/F„°BáœÉùôûý­­­­­­ápèû~­Vk44ÄI˜å]0oÁtEq`áå䧥ø±™œ\|gI:Ž³²²R¯×ÇÉóœ1f¦Q‘w­CÑ@’’™¶mSÕ)«<Ï}߯V«”Ú:)•€²,aª±‹éœ rx“ec…“7ÅÖ&%„ 4ðj8^»væ5åyNCŠã’Š îÅÖ#£©Š/^5•>ÆqÜn·)U¥”ªT*äH9½¢¬šWÌèرð+5Nñ为ºª”zøðáÖÖ–çyF#Ë2Êb•Ëecgb,MIdqŒ•Öš>ZkJÙ¨'Ç^ôÒ, a”€+¥ )P.ªÇq\×ív»ív»×ëÅq< nܸÑl6Çq'˲bªŠá 6U|cÞâJ©Á`°»»»½½Ýív9çÕjµÙl’¯º©—[LVÍ{Jëtõz¬ÿ¢(ÚÝÝ}ôèÕ|Öj5ß÷Ó45 Ù¼4JjQ“ü9Ò4 ý~߶íÕÕU×uÔ±óþ  ¬œ…ò9½Ç/Î_¢¤QT æûþîîn·Û½wï^¿ß¿}ûöõë×)k‘¦©xe‚f3W÷Â.cѯ´‡‘®ÈóœÆUmoo'IB ¤Z­ú¾oY–[´»{äbÖ®X^xRoýaó¬Ì³Åmš¦4Õ÷駟.—Ëo¼ñÆk¯½–eÙSO=åº.‰(­5õS™Ö2“°¢R@)åp8¤~­•••Z­VÛµ°¬…Ü(+¸4Zk1aV4´ "1Ƙ”²ßï“­E¿ßâ‰'VVV¨/‹ÂwVp-óygY´Ï5 k®x}²UÉt…ʼnÑ'f^S†;;;›››ív[Q©TjµZ©T"kuã 8Ý3ýÀf¹^ã1õI¬8ŽÓ4圗J%*h¬×ëyžW«U2®0ÏEÊʼSäoAËbüÖcõzÝ÷ýí´K!ÀPV€«FœkW"Ä9EátXFâl¤EÕEáA¥bŽãPòj0Ü»wlÉÎR:°OIÚ˜ÔÊ FÌcþ„Åìͤ¬b§ªºÝ.™Uôû})%™Uã¼i@*Ú^Ì»¢­E–eqS%g¹\N’$Žãz½nYV©TbŒ‘²2ýTÅ„É*˲èfÃá0ŽãJ¥‚RÀ“%Sè\Ê °Ì¡”Õé„ÂìqÛ·ƒÑŒæ§›™ÿSc̶mÏó¨ñ¦Ûíîîî>|ø0 ÃÛ·oß¾};‚±ÊÀ±Wgyl‚í¨ÄI5Å ”­JÓ”ÆUmmmѸªF£Q©T\×%ÝedÕXâkÌ”ïÀc8©ôÎô»±Gb’ì+È"?Š¢v»ÝétÂ0‡®ëAP¼—™XeÞ¶mÓQÆKÓ4 Cò®¨V«'[ ¸ìª2(+ ¬KL”é’ƒeXP·\"L5 Éü˜h[JÙjµºÝîh4¢Î«F£ASŒ¾2vädtaüÙOû˜'߈¢™x±«Ê²,Wµµµµ±±Ñëõc4˜dÕÂeÕØ(á‹óa#)ef7ƒ ×uËår†÷ïßïõz$K¥pÒ-IG‘u½qFY™%êt:œók×®x)à’«¬Ê (+À2“Â"xi0)3¼ˆâuÏólÛ&[‹wÞyg4]¿~}}}lcThÊçLÜ–²¶xÀÅæ(c/ž$I·ÛÝÙÙ¡qU¶m×ëuš{dWÕ©fÞ€•ñL7Ž®ëš9¿J)šaUt™§AÀd4oŒ+è^ô¦‡a¸»»;VWW›Íæô1V§W xU¶S ¬KM˜*Æä{QçŸì“žjqñ ¤Ê1Îy£Ñp'‚V«õèÑ£^¯7oݺU«Õ\×M’$MSš>lçŠX§zäE#xSºfä¥bÒ4ÝÞÞ¾ÿ~·ÛUJQªªZ­š À§OTs…þó¾ä1ËÁ0Ïó,ËèmF4{ª^¯ÇqLcŽ+•J³Ù¤ºMÒ̦pÌ$Ð@N‰­V˲¬µµ5ÏóŽŸ°B)àÄv €²,+ ÊW.­bœk€oQEGëRœ™€$„ ž·Þzk0ܺuëúõë4N7I’<ÏMŠ£¨p(arz/œ`û c¤”RÝn÷Ñ£G›››ƒÁ€RUÆpYu|58{ûœY´±&o`þD –æõz½(Š†Ã!Ͷm;Ë2zSȦ‚Úç¨#‹d§ñ®0f뤙WVV¦wX-°‚ÊBŸPV€åVV9B…ÍeÇ8ã™6šwäy^»Ýn·Û>Fq_»vjê¨,¢vÓé4Ý¥ã5=-efâ8ît:=zôèQEAÔëõz½^*•(]# ‡_ð7T)E³€éõÒûEQ«Õʲ¬R©Aàû~žçT¨If$¾ï;ŽCù.Ƙ©¤´džçN§Ûí:ŽsëÖ­R©!„íe8Iɲ‡WL/MW)ìñiÂô{ÓÏÃó<þïºn«Õ¢žœ~¿ëÖ-rèŽãØøF˜‡2ßcKºXì^¼»Ñ~æO¤4h\ÕÖÖÖƒºÝ.ç¼Ùl6›M×u©=Œ”U1Óu²‰©Ó{ƒèPÉÁϲ¬ HGI)Ã0”RV«UÏóŒ‚"ICºŒ«‡ Lÿ§’ÂÝÝÝ8Ž¯_¿^œ|à1-g\¸\`;@Y°ìôc4,"ºÆ5Ó•Ì”<²xïÈÃ{–éöëì .’+dÉM:„bt˲Úíö`0xûí·»Ýî;wnÞ¼I£“F£™RÏSûŒÃt¯‹IK÷¢5…±ï3šŠ20J©ÝÝÝlooF#Ïóhfn©T"-a²U¦§¦¿I'÷)ªo–ŠÆD1 úý>¥°c«««•J…í»’e…ïû”¦3ª¬XHïËp8ÜÝÝåœß¼y³Ñh˜Å9°Ëk„Xæíe0¡ÊWÎYÑ3 Ÿ÷¾c?kíH\‘dRJY–E*ÏóºÝn§Óét:>|æ™gnß¾íºnžçâ›Ç!û„±Ñ‘©?óƒÑTÅT¥¡vvvÞzë­ÍÍÍ0 ËåòÊÊJ­V£þ¢I_õéúyãøYš²&3‡s9‹Œ:šÌ•¢Z­ŽF£ÍÍÍ8Ž+•ÊÚÚ5G‘å:ÝØó¼b{•±² V´iš‡ÃÁ`Ðl6¯]»FNú‹ï l§(+À”Pàª]d½\©§ãTÎuÇcßbk¥­Ì„ÙN§³µµµµµÇqžç7nܨT*äú]lÃx]©¬Š.EuÁöû…,Ëʲ¬ßï¿ñƯ¿þz»Ýö»¾šwýǼ“$‰ã¸ßï§iêºnµZ-—ËBÊ2Ƥ”®ëR{ÛÏ’ ‰ëºTHB·Ýn÷z=×uŸxâ‰jµÊ&rSÅ8í„ÕÕÖ`ÈYe€²WGª¦íŠ¦*Q_*•F’$ÃáðÞ½{I’\¿~½R©Q„WŲÀé «197iŒNE‰J©^¯×ív[­V«ÕâœSžŠ®ò#«¤”ŽãPÕ¹W¿ßßÜÜìõz×®]»qãyµ/œ‰*þ «)ôc•)¸®eXnÚ#(«£%Ê•ÄÊišÆqLfQ1Æhöùª‰HRŠ~ ß“g ïûTøÖ[o ‡Ã[·n­­­‘ú"ÁfÄ%©Æ4©‚4M{½Þîîî£GÂ0t]·^¯¯¬¬U3X–Uôº ¤0Çq¶··É³!ÏsS2gú¸ÎW̥͔RY–K®ë”µ#›{3˜ÌmÛ¦eÔZ÷ûý^¯·²²rûöíJ¥2EÍå´>»[Nà€²°­av·~vƒ‹¦‚K7MÞå8“·?°(.I’^¯×ëõÒ4 ‚ Ùl6›MŠã©®Ï$=Œky÷‘ʪ×ëäÞn··¶¶Â0FfàUÇÆ¿Ž§hhAÉ¥4Mwww766Z­c¬Ñh˜͘ß]Q#™³m›, ;™³F£z½N0{Þé°ÁVsUNq<òqt*ô<¯Z­V«UZm“´m›d‰UWQíììt: îÞ½KÓ«Ølu€GʧãH©eaÛCØWe€²Z¦€`FÅr"šmÆiN‡=W±Xná;V6Ù8”¦)ùû ‡C’44—,éÌ#Œ†I=QÖˆ’NÜw»]éÛï÷oܸ±¶¶æº®eYišš)·l0=Í ÞÞÞ‡BˆZ­Öl6ƒ ð}ŸîK²ª˜=›t5t§ÑhP§ÕjÑ0¨8Ž)ÕSÌ•¦x|ØYtÑaŒÅÕ.¾›Å>«±|‘éO#ku³ÅqÀÆ z«L^n8RËYO?ý4É]6³#Å\å‚HXMòh˜a€²,½²,û¥Ö¹ì+fÔ]ÇL Mæ Ž™žš4«PJÅq<ûý~E¶m×ëõÕÕU“èS“É.#xHYQqZ©T¢øþÞ½{ƒÁ`4]»v´E¦Q*MÓN§³±±±½½$I¹\n4TÝ76‰MÍ™jC²)w]—*âÚív’$äoÚ&×ä°‡-*«3ÐÆ>Ѷír¹\.—›Í&¥ÝL–Ïô¶ôÆX¿ßßÞÞnµZA<ùä“+++c…—'h\qœ36R”à*ƒ"–dØab¬XÍUÌöPS<ŽŒûg—Uc÷âœçyÇq«Õ¢qU•Je}}FB±£¦`™?Ä>ô3µ‘__†ÃáðæÍ›µZͲ,s_ò¯ÛÝÝ}ðàA§Ó±m›Òeår™Lÿ( F~wŃ)ŠC*Vd…ö$ÒxTʸ½½½»»Ûív“$¡ñP4ðÊÔÎR›wØ?çR ‡%ÇŠ*šRA`Y©Dc­^ÔTf82­Àh4zôèQ»Ýv]—d•ÑÓë3®@ )Ê p0®D@pzSª.ïË9°_ˆsÇq¿ß 4*ŠRUµZr 3ö#uŽ(@nu¤‹¨*ïþýûa®¯¯W«UÇqH× ‡ÃV«Õn·‡Ã!•½Ñ'’UÆx°¨Ž èÍ!Y–U©TèHZ­ù –J%ò,Ñš.–ÎØ÷ÂØ$’× Ñ,ËHV‘C ­­)$;ÇV«ÕëõÊåò;wÈ,qJ–o.}5ýCŠlAYe…%lô—1 ¸ v'>ÚxºÍz–eY–u»Ý^¯—$‰ëº+++ä¿G70~g?Ä›®Šì=Ï+•JdÈÞjµâ8¦aS¤¬ÈÛÒeTóFšŠr2$ÆŠ÷¦ÏdÕ¢‚’T¾ïomm‘?G–eyž{žçºîØ„â‹óÉ4 HÙ*lÛ6¶©¤e¤"ÀÁ`P*•îÞ½K²jºš·𘋳¶¼“£¨8礣\×ÝÚÚ¢ô]–eõz#ÆÞ©y^KÀ#ÕËØàc’‚”¾£ò?3®J)•eÙ`0 ‘ìºîµk×(ó6&«.HàR ³y·PÄ@Y]q<[:–<Çàœ Ém)²\… ®~3åAÿäf”@çÒduJiÉ™¶cPWU†ƒÁ ×ë¥iêºn³Ùl6›år™q#§ªÞk¨ÒŒ3θœ ®™ÖZ+¥•Òû·: .§g1É«¢Â! TlE?¸zÓ=9¦¯|±,´šÛ¶½»»Ûï÷µF¥R)êÀóý. EJXQ\†QÑÿ9çår™¬G(ᶀ¬:í¹ÀË–ïš+g…x(«å’Uçò­j¾†,)× clvàìx»“.ç ?f“Õ”[Ç[î³£,¦?{QuŒyˆSrƒÌ*úý>™U¬¬¬¬®®_u*,暊jí±c¦ÿsÆ9œsÎ8œ3Î4gŠTÖä+1ñ½QP“æéc*ëÈ5Ÿ²þGÞ½8¤Øqœk×®A°³³³½½Ýï÷É3°T*QÝÝÏ5}´×aoâoèt3w“Í#yLvŽ£Ñ( C²sl4•J…šÇæÒ3ÓejÿŽÃ;ÝY·PÄ@Y]q„àf›K²<ÉÔ¹\°äœ[Rx¶dŒYBØR¤HÓƒ³SVøf]DŒÍ÷ŸÆvqØ,`*£lL†ŽãPr£\.Û¶mºªÆ4Õ¡u€ÔVÅ5šrT"×–”ŒY\)$¥µTΔÖZ+¦ßÚŠ¶æB­ãZpQ”(³Œ]:‘÷«h»G¯t”çyäZ¾½½EQ­V39½¢v=Õ‘eYÇQEQ”ç¹¢\.›ÉcÆãþH4ËÁ£ð˜¼Õži E¼”ÕÕÇ-lsQznÝ&Zë$˵־c1ÆKb§gÆö0&ªäˆKwä ”žÞ)É™àL3¦ÓšÍ^Ε›|E$ò<¢¨ßïw»Ý$IJ¥ÒÊÊJ³Ù ‚€ÄØظª±‡:\EhÉE˜ä÷[á뛽,×·›¥•J¹YöJ®°$’*Ò4U*¥µÚ{èwƒ9Á¸ì‹ôÇ0ó®%¯\×]]]uggg‡Ìèã8N’¤\.S=Þ”|ãŒÏu`~ò°\–Éà%I’¦i–eä¦È«×ëõz,7ŒŸáèÜë—a¢v™‚Ä@Y]}äþ³Í Î-)Ò¹ufX¬ œiM´VŒ1¦)«¾Sñmׂ3K .S,gZ)–+­µîòÁ(ßê¥÷[Ñï¿ÓólQ œ•²w§<{­tkÅ[«:+e«âK[Hnq΄`‚1¦s­´Òš)Åô¾•û^èÇþXÎ^ÆY\ü¢<-—¶íÕÕUÏ󶶶Z­ÖÖÖÖh4ª×ëähÐ à*&§ˆCÝ 7 ÛAP©T‚ 0N³(¨é>W jçUGßÞMo ¬¦O³aœ®e Áól‹³<ÎNÀÉÇ–‚ÜxhK=íÒjf•©Þèg7+Öå9Iõ?פÚÉ•¾×ýöí_mçwÞî|ìN =òY¬çÌ_Ó4¥TÕ`0ÐZ×jµµµµf³éº.Û/*›ì ¦¯£:»gš)ƘòëzÍ¿Õô+{©b®à¶L0‹i­X®Y®t–ë\©$UQ’ìt™fLZa`ËzɾYó®Õü•Š³^µÖªÖÍš»ZqËžSõ½²kK)$“{RTiz¤©°à48“ÖšeýDzv”â“RRM mÛŽãìîîRò*MÓjµJž³?ј²:ò¾œs˲Ç1O4‹1ýÉÚ¬/ÆÒê±~¦Çœ'Žx(«%‰5ãÌw,[ ƘkKÎÙ1mRKxöÞ²çJ‡IŠ]\¾½›^"euî‚-ÍÕë[ÃóÍÝõÚÎëÂ8UœQáÖ6G&Ê&o¦ép8¤)ÀRÊ•••õõõZ­f|Õ¬~œLUÍjXOwϵc‰õº÷Ôz°Zqî·¡˜¥HzqƘäܒ̵¨YJ+Åò\gš)¦“,ßèd›È}KŠ²'%ëfÝ}¢¬U½'VJO4ýFÙ)¹Òµ…oI)¹\ì¤Þu!*<~~õ° ÅTciYVµZõ}?‚G…aØn·ó<'q5VxRú¿(ÔUÖf}™Ó\ßÚ9™:jÄ@Y-£$ÓûÓKrÎGÉ‚­é®-Í,‹,Wa‚Ù¬àÂ)«ïyÒ¿ÂJiÞ©GG,×£á¿üý­¯¼ÙyØNçŒ2)úžeÌ}Ž”@ǽ^¯Óé$IÁêê*™†3Ʋ,›41?,U5Çú1­5Ë”v$«ùâΊ{­æÞï¤Zó±ä‘iÝàŒ Î„¥mÆ´f¹¹ÖJ1­X’åí¡ê²ÍNòêÑo[’¼Õðn7¼µŠ{½æÝnú·^­d[\XRìk(ÍÓ2ÏËgZ)½ç'ÈñÁ8ÌîªeYTHž»»»»»»4M˜†J±‰¬×ì‹|˜µ =µ”R)UÔo 6ë•ï´N¬CñPVKA”æZ3×–Œ1[ áÚÃxîÔ³-ÇÚ+Js5Â6.ßÜI–ä•Îå·>I'L¿µ9øW°óï¾ÓÚ$©:ƒ™ìRÀM©ª0 µÖFcee¥Ñh8ŽC=WÆC¼èÈ&lÖ W©fRûŽxrÕ¿»üÁÆ(Ít¦ÙaŽÍ\0Îö¦ä­mΔbJk¥t®YšëQ’gÃL3&ûÖæ î[%ÏZ-»·Þ+þõºWöì5g½ìŽíÛ–k .…eiKk¦…RZk+­ôqëBÍúË#iª ¼¢î5Û¶wvvÂ0L’$I’jµêºnѤh½ÈŽ7õøHK÷mÖBh©ºhÛ&â  ¬–‚8ËÕþ´r)xÙµ‡I6û×¹IñÓCÅç7y€)¼¶jÍ.E¬u^MVš±n˜~õ­Î¯ýÁΗßì„IÎ)UÅÙxÚjÅr¸¿\ñ÷J©$IF£Q»ÝÃ⬵µ5²ãœ“ YeâòbŸÕñ}Î÷†þj–k)ÄzÅ¿Ýê~wg¦JKëÐβw <8çœIÉ$œ“naZ3¥•Ò:S,ÉØÃn’µc!Â’-«Õ,ÙµÀ~r%xz¥´VòÖ«~³l׫âs×f\JÁ÷Fé©V'—w,ATüaL&Q»ç\JÁ­[·<ÏÛÜÜ$×<Ï+•ŠçyRJãfq¤¸:Ìù}Lí?ÀcÚ¬£ðô7öÚö »ª"ÞÊj)Hs¥ãŒÑâl>ÆX®¶9pYx³öbUuÅ…>Ïv,‹f¬¦¿õFçß~«½ÙIÆò/œ1Á˜bE‹ý·9_‹ñUî#„h6›kkkµZMAójMÑZ±¥jº¬:èy÷ÌÌ陥`–dTá'é•(Žt˜ªí^öævü­á×ïwßÜ<ê§Q®][:RÎNã­à…ÿ¿k "cL1–k­r–+6LT˜é\í Ð:PÆNw°˜Ñ>~Élš0Íó­T*$®vww‡Ãa«ÕJ’¤V«A@s~'s‰ó­Ãl™%Ôž½X½ÙNÏ`ÿA¼”ÕG 8õ¢¸–äŒEi>¶Í1Æh6EpI®üÞfò©»ÞUx-sN²:ì6ý(ûo÷þýÝx2¦$eµ'¨˜fZ\H© ¥Tš¦ƒÁ ÛíFQä8Îêêêµkׂ ‹1sðÉ„Õ„ãvÞûa\HKhËRœkÍu¦˜JÕ£^òúv²Ù¿³¾¾½¹;zÔ3¥,K”\i‰w…ϙ Îs­k¾½Rr^¸¬•-¦ò<Ï•Ò'(ÂÇÞ—bç9àgYfY–¿Ïææ&U’£`©T¢WcU´,>Wñ­\Ln¡ðìù½Íä D â  ¬®¾¬*¹{Û\®t®”™ë'…0¶hKÁ ›¸à¼ÞJ‰*;bI^ï”P{»Ÿü‡wz¿ùz·åìˆP˜1Ƶ–J‰\+ÍsóÛ)ÏH•cQõûýn·›$Iëëë+++4®Š<Y¡ÐôùŒEü…÷G¶—8ãŒ1¦•àœ:©2¥±ƺ“ä;ƒä^kôÆÖèVú¨—nõâ~’¦™ÖŒ;’×K¶-hh×Þ#jÆÎk˜4,S,SZJ~wÅûÀòºËÓSï,“²Å¢>ò ¤†«õõuß÷wwwwww»Ý.ÙâW«U>aõ1»Uàaù¨yë)“ «Æ$êõÖ)6Y!ÞÊj‰dU¦T?¶a¥¹ÒIæH‘)=6›þ‰Í\”f¿»™|÷²·vGßzÞkÇiÎ8?XjîWhÎÕ^ËçûŽ ì°þêzRJ ƒv»=9çÍf³ÑhT«U˲ȩâ±÷E)cYñX­Z±ÆL3Í4çLasaKf Î,ÁgJéLÕå:ɽv´fÛÃ|»Ÿlt£Gݤ«4S¹Öœq×RpK2Á¹80¤>Û0›Ò‚³$SIÆÊŽýÔŠ÷̪ëJžgJ)Í÷…ßèpz#hvpqà•RJJII*ÇqvwwƒA’$išV*ß÷M[ÝVìǯ& ¨xM2ʈ+²µX[[³m{ggg0Ï@WFÍ.iŽŸ•:Ž4‚¬:l“D¼€²Zh›³%5†²bA󜤹bIF›%Dɵ‡1S@OÂû«b,&cì~;êŒÒ™ò3{ó¬çŒiδØ7c‡šsh\U–ËåµµµF£A㪨°Î*¥Hhå3Æg”š’‚[œåŠE™ Ó¼=Êv‡ÙÃN²ÑMÛ£|£?êÅí0k²(ÕJiÆ™%¸mñ’kKS°f¤Ô»C|?ïO¶Ò,ʵcñgּϽPÿð•À–aš§¹žù/ìº~$ô>Û®H'I"„°m{eeÅó¼ííív»Ýív³,«ÕjÔ‹e O?[gŸ[5׋:½/_yx*›$â °lñ”ÕÒáÙÒÙßæ’LEéâ×~(ƒ8Û7ü ãŸJpR8–°¤H3•r-sEÑË6ùõ²¼€/sÆ­|^ËõC”U²;Ì«4"g¯PhÁ9çzï?FÚêÝÎ("I’0¶Ûíá0´,¹º²²²ºZ©T¤””ª23©LoO®´Rš3Mvî’k)˜Í9ç\p.—R+­ÂXµÂt®ýão˜™ž1Üq¸Î/ç×]1o‘ Önƒ(½q cã`žç+++++Ë­v;K³ãÇŸŸÕZ»¢È‹B­ßÓRñÕbéVGÑ¢•ÒZ´ÖZE%Ê•û˜»Øv¡~©•Ÿ_*^ZöK­°Ððç—;çWòåV±þ€µ2VKbÊÿÓ²ÖK­•½ˆWæ‹#“V‰(çU᣹õdõûnž{ÍÑL‹jÞ¯'9W{·ïR;qPo›Í§4·Ô ,“+kmyíª^¯¯¬¬”ùs­VK’d—œg÷s€}—¯`Ãj †qxSoYMcZÕ)|Ç ¦;„ ¡Ñ)ÊZd&KÇ›ýŒµ.W6‚¡Ô-ÒqÞïã†õƒç:S•Yí¨ãcùET*ª²r… 1ª¸¾á½o·Û+++KKKNgfvöÔ©SóGçmbs¡Üªzµ`P1j¥” ¢¢¥µ(QFDEU„Ø,ârÛ¯´Â冿Ô(VÚŹ¥üù…üâª_íøÂ…– yˆ£ˆÊ©‰Õ"ÚˆÈÚE©Ëº%›E"ªð!5_5¯¿¦úº“U¥ÕñE9b=fËÃP^„+On®É^ž 4Æ?~¼Z­^ºtéòåË+++Þ{ïýììl’$Ƙͫ=›>÷Q~½ïÍ+Òª]<<裀ĘæxƒÌj*ÔR»ñÖi>wƒlºWVP­e‰(¥Ef3Ûè¸Àd‡^#N¥«Sc´ÞY£E$w¾ïúϵ 3ÕÑÕñ™¤ãâîŸÍõÓ€J‰ŽJbŒåïÑJ¢Ä bð~¥^_\Xl4›FëS'O;~lnnÖhcÐ1­””?ŨUDQ•8 ëÐÌC+—›î•ÕârÃ]Zõ‹M¿Ðð˹ˋPïøz;>ú•DQ’mD‰(-å-°+÷ÞDËÖGÕv±’È®ÍÞz}õÚÙ̇»°y§ípƒÅ¸iëlãpàænÎƘ²¬E–e Íf³(Š<Ïççç«ÕêÕjZpp4¹èMTâ Ly¼Af5iUf­Þ˜æ\îÿ^)'»™4Q²¶’T0Ù¡{ë;òW­3f´Tc´ä.ôñÖjñÑ—ówÝMó _;—-µB£³w cŒ:]³×Ñ©ÕZ”mEǃó®Ón4ËËËy»]M“'ŽŸ:q²:SS:†¼ˆ!D­DK*†Bh{ßèøFî‹ :.¶r¿Ø —n¹íWÚáÂjq¡^,µýj;4óØ*‚SAGQ¢ÊvU֬ݛ2z=W{5¸â?ÇàM®”*wÁsãñ佷ͼét–YµÒŽ…zô²†òàæý«deÍÀ4M­µ FciiÉ{äÈ‘¹¹¹,ËvOŠöYµB±a58¼”7òEÄ Þ ³šÀD|븬Os­Ü /k+IV¿ZRLYàƒÃúè^¹#¿KxTîÔç.¸Ðó;ùkßmOyfu´fç2ÓÜ5Š*'ãUûž[fnŸ—j-ZTT1_tÚÕúÒâbQ¸#³³'NŸ?v̦© ÞwŠbˆÊåŠÐÎC'÷Þ‡•Žq)q¹XéøFpqÕ_j-:Eì¸è|ôëßÚZÉ´Ñ"FÄÈ«ñŽsÉØEË1ª¢óêx-¹ãúê;n¬œ3-—û·ìR§C}ûTÿ¿¼b'"Ƙ£GfY¶¸¸xùòå² {ÙM8Iue)‹þ^Ãþ³#Òª='Fâ o 6Þ ³š(77þ¤Ñ)c ?ôc£!ÆF§¨XbÜø^k—ùÁ`çÉK%F'Ƙ®WìËzñʹÞÞÐ÷·ýï?:Í£]Ku–èÝãL­Ôé¹ä=·Ìý½·kµóškIår×h6VëuãñãÇŸ8‘e•Õ\­¬4½w!ÔrË/6]+—ÅbÓ.4 iÕ_lºf CPm;åoªõ:rV+#e±õµ©K+Y+ç'b¥\Œ^)¥åÖ“•÷Ü4wãѪղš—“ey1m„2«-œ7Z•ÉÕÆYAcL–e'Ož4Æ”M¢½÷ιùùù²¦ÅöÄfÿçI–èþ}dVÄ Þ ³š|.ÄĈ(•ZSžoö!úp@õbT­M•U–òÌN=vâ7Õäé‰ÑR“‹½ìÔŸ¯»ç—ÜÍóS1QìØšãhÕÎff÷ÀC”:V³¯™O3+—‹¸° •Ëâêù†[®¯./¯ø¼˜™©”êLйo_Xn_¬w|ˆQ)ÕBÓ/5‹v—Ún¥\ˆÎÇÜÇÜG¢De´6ZÑF+]ö!ÖRö°Úx”÷Æî°ß.Cª”R;^)Q§ŽØwܽãte.1E %¾úïÞ3=¬Ìjã RJk­Ö[ —ÉU¥R9yòdY3°Õj-..Æ«ÕjY có+ßÿ9À^?Ì´»x~ɯ÷o€xƒÌjò.”5y*‰‰1â <«uÙÚO)5ŒÃÖïkw;ò»L™5¦Ç>_~®õÞ>7µc~¬–ÌdF‹Ä«çQ” êùÅÎbÓ/7ŠV+Ï’¼éÕ+ ßhw¼‹‰I³Ì¦/7£jvœ[i¹ÕŽ÷ëE‹}ˆ1lNDk©™µÚJDoôÛ$)µõw–LÈÚsù¯ðJå!Τúö“Ù¯INÔT¡ðkcµe<®–@fµ¹çïæt¨ÌÕCιòÎÕFïœ !XkçççËš+++‹‹‹Íf3MS©T*½¦UlXŒ¯<ß"ÞñÆ0â 2«ÉáBp>”o jj³x8çJDÔÆ©£ã`«a¼MQ‰Ñå æý~æ×køt¹–4噕Ѣ÷¼ô"êrÃ?z¾%QµòØÊ]Tª±ãbQÄ-Òp*ºƒѯ—×¥¢Ñk”±²”«²(ãÚcä*güâZn1azD© Tá•Rr²fÞz]öÚã6ѪYçwž >kï§AÖ– Wåÿ0Æl®B(Š¢¬xâÄ kíêêj½^!Ôjµ2³ê~“jPi9X7S"ñˆ7†oYM”fî6êóh9ä…ßc£ãø¡ ´¶#oVþÜh©$¶ð¾›>Ï,çëîú¹)+fR“%F´ì2N¢ÔjyТr›.–Ñ¿e´ÑZŠ¨b|y£WÄjmZ¯3!Z—UÑ•(YÛ˜ZÏ©”zõÞÔUÂü ½ !ÊûØ*Ô±ª}ëéê»n¨œ>’A|ŒQDËayì&÷ØžmôVWng…’$©V«åå«ãÒÒR«Õ*Š‚Ìg½Twg.Ä ÞF¼Af5qÉUǽš¦ÊLUˆÑùÐaõ›f¥,1Å£ªî»û}ù¹ö?xËìtŽÿ±{´jÖ1ìÑÒJE¢²ZæÒøêÊFÕs­Ê}]ß[žÊø Š_s,ýÞ«7Ÿ¨TRSo‡¨Ty;:Œvá©÷š6¶°Ê̪ܿŠ1Eá½/» [kµÖÍfsóFÆ$mÛÓ—žkäyˆ7@¼Af5 hs†‘ ÎzÛ‘//yô&Y£µ–N±ÇNý—žk{fµcuŠn|¼fç*&µ:ÝþB¸âçõjtyõçºåçÆÕñmijî£u´f¿çºÊ7ÔægR¥‚j#!Qû;þ×͉¾adV²ñÿ7ŸŒ1ÎÌÌœ–ZgIWí#|ˆåÂçÚrøæp-ZR‰1‰Ñ»<[Yÿ·\LÚq§>*uϳ­ŸzÛ˜Õ±èiŸêj-G«öxÍ,µÜÕ³úŽK h¯|³ù¨¢’c™¼ýZsó¬÷­ÆJ\ˆ1®ín¤"Ý$;>òj™ÕŽgð˜¥lþ2¹*ÿ¤LËkWå±ÀžÒ*6¬†ížg[l0ƒxc¨ñ™€Á&ÝîÈG¥ ç;n½[ŽÈz»µ¿ !úË¢O·,1É®åS­Ö:•NáÝN³ÝÝg›c—Y $³Fª‰žI­Gw†<þå[W©ÌêÛŽÛ·\›ž¬iCT¢E+­d[Ϩ^3«Ý×T ³ÚòÛœYi­CZkk­µvËi@ÒªCw÷Ù&ƒâaÇdVC‹dÖX»÷ÚQT*/|yóØhI­±z‡¹1FåBÈ÷!¶ ¯”Ú}²Ûe§þù%÷ÌBñºãÉD¦O»0"©ÕYÙ‚ž›ÞðÓ‰JkuýÑä7Ön=•ÎUMŒ1‰kùÔöæ¹½æ6IúûÚ-²ýÚUù‡efeŒé;­:àé”xf¡x~‰z Þz¼Af`Å®wäÕÚê‘WJ¥ÖdV_=üRå¾|»ð·Üùr©i·ëê;õ÷œm¾îøѱKöù-D”Õ’-{vµÂ`F^UEn?•½åúêülR¾]ã^ÑÿèTÀÛ3¡ÚýK¶Ô·è/­â: ÷°a⃊7Ȭì#S*±&Ýqh'·܅õiΈ¬íÔ;Ë…c$5Æ…PNU™5kZ1ú]Fï}KµÜ©Ï/6m¸çÙÖÿ®£“³]-[KŒÌeúHÕhM´z0¿òåõ'Ó￱rÃ|jÌZ6+}eG“`짶ÄþËú $­"ÛSŒêžg[Œˆ7&Þ ³Ð'-kí#ºm\!Fktfµˆ 1n)cÜzÝž¨”R©ÑÆhk´¾< ÝÍ7Ó"™µZBî|ùÔþsí÷¼¦2a¹Óî³ZŽT̉šM ÑçAüÖ?9c¾ï¦ê[NW2«»þ,7Ô)Ä]ò¨î·æØ­:0o_lpÄoYèëãgtf»Ý‘ߘæœå¶{™äΗMQ¬Ö‰Õ"ªp¯¶IÑëgØÊû¦!Ä¢6]*µZk•»à|PJ}áLs|3«^³¬ÇdVŽVM%1¢©`1\©‘[Nd·ŸÊæ«f÷Tax)D¯Ï¼ÏÇw¿U5¤«e$cÝøóosÄoYè)šQ‰éaG~C¹dõZUSbáB9‘UÒµ ?:‘c¹5¿ÞUUi-âCÏ»íVkH.R8ß íz'Ìez|ƹÏÁW„ûVÏfº–jbÐa;}$yÛõ•›¥;^}…: }?ÞûK½nÊñn<0õN¸ï…6ã⃌7ÆwëJóž˜ÑRIlÖu³óÍÊ™jmA(Ƈ¨”ˆl.œZNjkßKD6ÝR‰[Ú¦w9MˆdÖd‰õAÝ}vò/l‰Y­fS=_5†ùrxc®TÅÊ×eo¿¾r´b6ÿ,6ôúCÜ®¿¯êû5l~Âí8Ø´Š «á¹çÙVáidâ7ôØÎND ÀJŒ.[=ô1ilôG-ã¡¢A)¥E]­têÆRÙ:]Dõ7Y•;õ•Ô|î©ÆĤL]>Þh™IÍñš­%†7ðÐ>rÓ±ô{®ÉNÏ%"ª×L¦Ëhà‰SO ÕÕrªÃJ«Ð¥;¿Õ`@¼qðñ†ÏåLNÖ«Ô˜¤÷ùM3Šj­¸R*Dµ1ñm ­6î€n|¯×î’îgÈj½Ø‰ÿÏCõÿê­³³©Œùc‡³›Š­_ñ·Çjææcé·/å«9K×Cq¬fÞv}åö“™5}ÖÄ;Üd£}”7ìûyз§.æg ÆÄo¬ ô~¼ªZYÁhIŒIìJwoz†¸íO6&5¥Ê¤õ)²¬¸£µìs‡]‹|ál;*yßm•[Á²ÏæWå—Ïeúµ'’ë^N¾»ävª>‘booÆþNËÚú¯þàX±ò†SÙ÷ÞP¹fÖô—½ŒT5¨W;ì´Š”¬Ÿš +oZ¼‘%F‹*|£†WdVÀALs™ľ¶(Q÷ y Ê\¬¯->¸E¤¯³Ö[ù þüLk¡þþµÛ)¹ê;_Úó wܶ2Z];kOÍZ­%LË®Uÿo-JDU¬®%’iq©½Ë¯E9}4¹ãºì¦ùdÇ «ƒ/¨†sm©§ÃÝ|-©Ñ°Õ;á¯icâË7Öº ‹tÜØt&³†Nk)«øE”ÞGy±õ}ù¸9®ÚØyWJ¹Êê=k¹ŠÎÇÜùcjÕûm˶FËS‹gÜmÇÆxé¾Ã•ÑêxÍÜv"½áhòÝ¥)9ÔŶŒŠ™•ª­¥šÈ\¦3#•Dj‰Ì¦úHEW¬T¬œ](¾ö|g©íwü•DÏ©ôÍ×e³›jN5›ì}ª»ƒI«Èʺñ…gšjW€xã°ã £µÖÌ Àº¨TTJTî¼R*í±§Äæ0tã.éút#>Db§ðÖèc¾©‡_±SxçCT*1:Ýw­Bî‚(UM­5j\.—öºÁµ}ÛJ‹¤F½þdò}¯©>¾²ê⤇[¢Tù[Y‹*ÿ/µ’±ZŒV‰‘Š•Ô¨#™>Rщ–™TŽ×LÕJ5•™D©è¹Ì­R#×¼Ô9·šB¾-HM­Ü4oß|mzýœjç àмõWpP߈ݪCœ¶9 âQˆ7Öï|2+à@g<çƒ1µ&1ýÔ"³Z ¢ !1:³¦]ø²jÙ­¯¼3ZNvn­’X]Vîž 1:Êi´ì5”»qÍ-6'Z=%]§ØwÞPYiÇfÑ^íLl×`#Ê1¢R++3©T¬ÎŒ«éùŠÎ¬dVfS}$“J"3©®Z)«E¥VŒ-J”ÒZ6òî“3æÖãÉËu©±uÛj&Õ·ŸÌn<šsÅ»ó`jˆðæÕ@r*5}½¦ÁCçÚ/.;ÆćoŒ×„Ef´c»p>è>“ŒÖV‡Â‡Â£Å]ÉËë¢Ji‘Äh%*wac³Å¬Ÿ (7ñ{ý¦>¼Úy}CËMò®Íöm+Iz݉DD´–‡^l/µÇ;¹2¢´–̨Š•ÄÈlªç2±Zj©Ì¦ºš¨ª•J¢g©Øµ?ŸIÅj±Z¥F*‰¶Zºy+¯™·^—>¿ä.5Ö_Û·Oßq}vÝ+ÃL›H̳Êí2lö©ÇÙ°ñÆHÄã…Ì 8E_‹I"*1Ú‡èBè*KŒÑRM­ZÛÿ_ÿ`§:ÆW[IĨ ï;ÎÇX~I·}™bŒÅúÒѶ×/7sîëi»i˃»Ù¶Ú1¹ª¥ú-×¥F”5ê[‹—V\ÇÇ<XökÜr¢ÏlÊ£ª‰TI̤z.•j"óU}´¢-µTæR]-*#FöÍgVn;‘¼öxòÌe×,^}+ž3o;¾áTZMtO?÷!e>#R`pØ9¹Y7ž_rk3 Þ…xƒÌ @Wú[L²F§1vœ/|1–_»}²ÜhØb,¼Ï]PJ¥V§]ߎÚséèÁsí÷¿¹6?ˆî“´ò‘¯;™d‰\?—?|®óìB±šÊêšÕª¼­”h•ÑZ¥FfS]µ’Z™Id.Ós™Ô}¼¦ç+:5’Z•j±Z¬QV¯ç+ùŠ*ËCí7|/ËT\7k®3/,¿öRåu'“7_›U’ýØOͽCy³ 0ÝÂ|ú‰U*W€xctâ 2+ÝÚ´˜ÔíÉäÔ¥$wÞ‡ØÊ]¹_nMl)àãC,+•ŠR‰Õ©5Ý„håšÓžKGO¼’/·ÃÑÊx²ØeÛjÏ/ٲǕuÛñäH¦O1ß¾X<·äίø•¶oá`j­¤lZ¢¥¬¿—Y9’éZ*1ªÄÈLºV©¯šÈ‘L2+F«ÌHf%3’Z©%º’ 2Zßý}•Y¹q>¹áHñÜbQþ¾qÞ¾ýtvÓ¼MM?¹Ä0ŠòbB¥ª[Z7–Ûá®gšŒˆ7F'Þ ³Ѓc§ÇŤÔj£%wÞ…b,«íK)e´¤ÖØû¥£"ÄÏ<¹úOÞydL‡½¿3ÿûÔŒ95cn=ž¼°äž]pçWÜ…Uÿʪoä!Då×;ÖGc,ûÙ«]~Fk¿cÖÿSD‰(­D‰*kB­-ÕDfR©&ÚjU±RKäH¦ç2]KähEÊcu©QµTÉtÅJjK÷‘ÕˆR×ÌšŽØ™Ä´ŠprƼãtö†SiÅJ—O>¼C€‡˜M©ÁmÇ‘V ÐgŸ\¥Ø:ˆ7F*Þ ³Л¸y1©»ÖéFK%µ1F磡ìü°VœT”(ÑZŒˆ1bºë„ÞÇÒÑ?ÕøÉ·ÌU“ÉØú.§ÞÓßî’\)¥æ«f&Õ·OZáÜŠ;{Ù[q<4ò˜û£r1æNµŠèbÔJmØD”‘õ¼+ª¨”©$ªLŸR-©U™Y»þ4_Õ'jz6•²‘ÔLªgSZ%JÊ,µv·JiQjT%b6Õ×ΙkçìBËßv"}óuéÆngßÛ5ãµ+u¸¹"iU—ZEüÜSÔ®ñÆÈÅdVzÖëbRÙq"µ•V±œ¬^ý«µ ¯»oíCì8ßk“óz'Üù­ÆûîãLàîÉ•e¬T¬©èkfÍMGíåfXÍÃå¦_jT³K­p¡ZE0"-ÛE,Ö‡¹be6•ÔHˆ**åcTQU¹fÆœš1s™Ì¦z&•j"µDjÉÚÿÎŒX­¬d´<ìÛJ+7ÍÛï{MºÐ ·On=–ÔRÝëóþE©ƒIS1¨Ô¨ÙLÏe:3j-³ *ªXKôé9szέè¹Lf]I$5ªË*ç ÙzÃG¨Ù7^£êp¢¦g2=: ÕPŸ¿§'Ò+!Uë’ ñS¯2 ÞÍxƒÌ @ŸBŒ×gŠž”§œ÷3Ë]lø»Î¶~ìöÃ)Øë@Õï™À]r°+s-U–”8Zѯ=öê»ËwxÕö>Âèƒ èUåX5=Älê`ŒÑÒª^Ýu¶u±áoŒf¼Af 1ª²ÎibtbÍÀg».}ü‘úß½­fôØŒíîg»O®6çE{&lWK¥v|{zðáFØû?ê6v7‹öù-FÿNÔÇ©3 ÞåxƒÌ À>ÙDzé`“»tt¾îî:ÛüÑÛǸ·UÉÕî¹V—Áîî?Äó{ƒúFSªaŒéŽàÏJ©»Ï6Ï×ãâQŽ7ȬìצŤNBïúl¾îøU=%WêÊݪíÿ©º>æ·gø»ùN×a¥ð!fS‡2’ÿMI«z þÔÇeà ÄcoŒ8ÍÛ“_ü±ã|;w»ÏP{þm»p7ø’<çVÜ=ÏŽYoÍí¡çÖ.L{•üÞüÙÖ˜^ÖíÿuØ¡õô%]>r /²¿Ñ¡Œ$iÕˆ»çÙæ‹+lXcoŒ8ö¬€±c,|\[LÚÖ@=Ƙ»àB°ºì}¾åo‡¾tô±Gê?|ë8m[©ýí\]íñêê—£â†è;æ>Ôº‚rðßtL³rª¾âHõ1nXãoY`Ct>êÔ¼zzs#s|ˆWœ“^;å<äIîÅ÷g?þ†™ñÏn’«Ý“¢í¸Z*ÕÓ «C ¯G¡ºÝ·~šŒ„„´ª?q¦Á†0Fñ™€AŠQ…•YûOçC¹z´ñ€Â‡Ujµ5Z)U ²]òߨ¿ïuµÌÎ=–¾ÿ‰{&Wª»Í+ÕãnÕŽqð ng ï½Dø(H$§;ÿàlXcoŒ,îYã'1º’X£%F•;ß.üæinmú ¡]øÜù•Õº’X;üƒz—šþŸlLF`ÚÍŸìø<;Þ«éþÊt§û×~žá`î)õzM«¿g>”ûNóÖ%­ÚÏ=Ù¸Ô¤‡0fñ™€ÁDQ™5•Ä-!ÆŽóír½h'!ÆNá;·–JbRk†„ýÑcõfkp ¹ê5'9€tex Ø°óÁfSÓG‘S V³ˆŸxŒ +`,ã 2+ûû¸ŠT“%FD6–ˆvÿ’¨Tî|§ð>ĵ/·Ûî¢Ôr;Œo¤Òe*Õ÷¶IÙшì_ 0•êr(8¼äTØÑ}³¾ÜŒ0Žñ™€þY­«©MŒŽJ>´ ï|·AáC»p…Q©Ôêr jx/õ“¯^hÎéš!Ý>ÚÏæUÙÅ ˜Ã-üÝßH²)rªƒq¡á?õÄ*ãŒo¼Af XJ¥VWRc´Äó· z¬»Sv–È c´fmÒR„Öqñ£¯bè9¤äjPùU7Yа÷¯ ëé ɦ5PèÞG^é¸È8ãoYèñ#ºvÐÙjb»ðçû+»£Z;']îÔ§6Ú1軞i~ûR1Öì>“®iˆò÷_R‚lŠþaùö¥â®³MÆ÷xƒÌ @·6®*¥Üúû>Ÿ³ð¡U8çƒ(•ZSÎN}TêÃ,Z^ÔG\ÛëŸOÒoŽl‹ u#‹l }ûðË‘ý*`üã 2+]IŒ®¦Ö•ê8ß*ü :ï•kQåmTktu8R}¹sïwZc\©]7¯vÿ«1ŠŒx°p Õ5¦3"›:H÷~§õèËƘŒxc¤Ð)ÁxK¥Ö¤Æˆ¬U2ÝÿÒÑåÓú+‰ÑZª‰ÍÅçÞv÷#.ÿÀ•ÌÚ埴+ܱðžµ%+;ôƉÚµ18 ésÚHé¸ø‘—`’âÑÁž0bŸI‘JRžHV.„Vî>Í­ÅúåN}î}ˆ"*KÖNWð[\Xõÿþ›Ò+¦›¶K»ùøàŽéÍØÕÁ.þý7ëVi LT¼1:سFéitf×"ç.äîª]ùÅ…ò˜Y“X­E:;uXïÛ'[ýÑÛgNϙà ˆ¸Y´ûÕæì«›o:j1÷0^ψç¤=S襺ÿÄcTZ&0Þ•|•÷0AžRéz³óËš<.Èfyˆ±í|»ð1*£¥’šÔì’iîão~}i’¢ç±.j7Ô­•Ñß®a7 ¿õõ¥ÜS¹ÄoŒJÊÊ; 8tZ$µ¦løàC츺ò DŒ±\¯*W°2kµøÜ…Lµ_}¡}ß í÷ÞT9ÄxzàלºßžÚÁÌ…«a§ ã’–>aû\Ä8€xcRã 2+Êj&Új­”*|ÈÝÀjòôÊùc,çÜÔ-ÒЋùõ¯-½óôµÕäÐÂÜa$W›c÷îŸüj±~O/ïÀ†qÌLȦ°£V?ôµ%ÆÄ“o~îÊû 8D‰Ñ•ÄX­cTÂwŠCžY|ˆ²9 RÖèJb“AH½Ðð¿÷7+p¼´ÃE˜€ê œñÃî~ÿoV.4(\â 7Ȭ€)¥E²Ä”EH}ˆíÂÀýÑn„ó·sb4Z²Ä ¤uúgŸ\=s¹…àûÀBü©ºduèÿ"¦ìâÌåâ3OR¸ÄSoYSgó ²Ñì|tvÁË©íÜ;6fä}¶NQýÚXô#Pè gíƒO`¦¡ü7Ùz|þÕ}‹º Þ˜ŽxƒÌ ˜Q©µy›•Êo#z¶Ø…Ðv>w>®¿æ²uz߯õÌåâ“D{«Ã Êû>éG÷$*ô퓯~ûRÁ8€xczâ 2+`*ˆV©ÕYbŒ–²+yg4vä¯&„Øq¾Sør§¾’˜²EßOøÿ~£þ²0}”󎺑Paÿ^Xv¿Ø—<âƒ7Ȭ€É—“Y«Eœ­ÜåÎ~•ÑUîüÆNýÆÓþ^xîã¯~e„Žå¯“Pa‚…¨~õ+‹4°ñÆƇ…ªëÀÍJIyt8ÄèBTJ••OÇäÕG¢ÖQ‹˜ý»O\È?óÄêûä*Fb/]LšÏ<±úÄ…œqñÆtÆdVÀ¤ŒW„ŒZ$³F‰»¹zó'JT¿3ÞG^yÏ•›ŽŽÐüC~E6… ó²ûèÃœñÆTÇdVÀŠQ¹6&YŸ8ÆÎæS|qiHÇÇ_ùÒâoüøI«G®.ùúŒ‹< cÌ…ø+_ZìpÄÓoY¨l‡7yÿ®ý\—zúRþ±GêÿÍ;Œr@~Eî„1õ±GêO_â ˆ7ˆ7Ȭ€‰cdåt»?Zÿþ+o<•Ž~’@ŠEî„1òôÅü¿Yg@¼ƒGm@‡#DõË_ZlcðK`ÚêÔMmË,L€¶‹ÿòË#Ñ”™œW܇î_Ó”c‚Ó'Þ™_úÚÒ‹£Ñ4™¨¿<Ó¼ûls2Ò'àÐÝólë gšŒ2+Sêß~ué|}ìט1{!}”RçëîßÜ·È8 ³0½šEü¥¿^taoÝÊà-¸ÿŽ‹Í‚ËûȬL·o]Ê?ò==ôé·\yú"eÖY€RŸ}rõÞï´½úÒs­Ï<±Ê8 ³€5¿ö¿KQ/½øî²ûÕ¯p½ ™lÒ,â/þÕBÇqS@W:.þó¿Zàz2+Øê¹Åâ×î[btã_ß·ôìbÁ8 ³€Üs¶ùÉǹ2`Ÿz|õ®³t¯@fW÷;.?t®Ã8¸š‡Ïw~ûÁeÆ™ì&DõK÷.L@û`Ãp¾î~鯷«YÀžêð w/4òÀPجYÄ_¸{a¥Ãä€Ì ºóìbñË_^dYÀ†Õ¿üÒU+Y@o¾úBûÃp•Àš<°üÕÚŒ2+èÙgžXý“§Œ€?yºñé'( €Ì úõë_[úÆK” ¦Ú7^êüÆýKŒ2+è_ˆêîáf0½ž],~ážOÑ dV°O<|ð‹—/6ôÕ¥»Ï6dV0tŸ}rõ÷þf…q&ÏG^¡?82+88{¤þ±GêŒ0aŸë?Ê癬ßû›•O<¶Ê8“á± €Ì Éï<¸üé'H®€±÷é'VçAîO ³€Ãóá¯/îInecì³O®~øë¤UȬàPE¥~ãþ%v®€1õé'VóþeZ)w–!0ÉÕo}}ÙõÞ2ËhcäqÀ„`Ï Àäø—©*Œ‘?Z'­@f£è£¯üîÃÔÆÀï>¼òQ>­&§Lš?|´¾š‡ÿùûçE `Ũ~ýþ¥?~ŠÂ3Ȭ`´ýÉSÕ<~ðç­&»F‹ ñÿúÊÒ=g› € Ãi@“éž³Í_¸g¡ã©7ŒŽ¿xÏi2+'÷·ý¿~áR½ `Ô;áç¿pékßm3Ȭ`Ì<þJþ?»øòªg(€ÃõʪÿÀŸ]|ì•œ¡@fcéù%÷Oï¼xærÁP‡åÌåâ¼óâóKŽ¡@fcìrÓÿÜŸ_|è\‡¡ÞCç:?÷ç/7Ù:@fã¯YÄÞuéóOSå8PŸºñÁ».5 jɘ|T]0-|Pÿö«K/.»Ÿ~÷QŠ±Ã¢úí–?õÄ*C€Ì &ЧžX}aÙýâ|¼–]ÃÒ,⿸wá~ʘ&œ0u¾þbûw^|©Îez`(^ª»Üy‘´ ™L¾g‹ÿáóÔ´ï¡sŸþüÅg©Æ €Ì ¦C½þÙ/}òq.ó©ÇWÿÙ/­ÐžÀT➀é¢úÈËß¾\üü{ç3˵+ í¾¥{Î6 S‹=+Ó͟ùÓ‹/,sí èÓw—ÝÏüéEÒ*dV0í¾³XüÌç/ÜûCôêÞï´~úó¾ÃÅ*SÓ€ ”RÍ"þŸ½ðØ+³?óî#–vW@\ˆy`å³OrY”bÏ 6ûì“«ÿôÎKçV8ìá|Ý}àÎK¤U°AþÎG_d¦÷Ç/bµ$V­E©• ¡pÁÊ:aªÕù¹¿5ÿ¾Ûj °£{Î6ÿÍW—šEd(@¼YM;ktbtbvÞ´ì¾ã<£„)÷w_Wû¹˜¯&œ ^Õ*â‡î_úË3«ñ°í ÏL£%1Ú­e·`1KŒÑyV’0Õ¾øLó‰ ùÿñCÇÞx*e4¥ÔSó_þÒâ‹—ñ°ö¬¦‚)L×÷òcTõvÎÐF«øÖ¹ôö9ÊZ`š¹?öHý¿Y'ñp5ìYM¸r ÞšžK•ˆ(«5 Ô¿{¤þõ;ÿÛß>vó®/m4‹°FoŸæbŒ¹ój§e¤ÄêNA?`>¨O?±úåçZÿÓÌ¿÷¦ ‚±öÕÚúÚÒ…>ˆ7€~?;ìYGÜÇ.|… .\±$¢¶¯)¥‡¨”Ú¾¼b\m³Aìá½7U~ö=G¯Ÿc¹ ãç|Ý}øëË÷½Ðf(@¼ìëÄŒ².[˜_11…XøPø°ã–z-ÝáNHÇùršSJå>l™é´ˆÑ²ñ;ºï…öCç:ÿ-³ÿðms™áp ÆCÇÇ?|´þÉÇV)ªN¼A¼ì{V£¨¯æÑùXø°K¯½ÔšÊ¶}ùâê•wFk™Ý²ûO£  {×ÌšŸ}÷Ѻ¥ÊP`Ä}ù¹Öo=°|a•óWÄÄÀ`°g5Jiî¦]ø<Ö¼g­R-²}šSJ5·Ma… 6½âXjK]»°êÿù_-¼ýtö³ï>zû *b¹\|øåG^ê0ÄÄÀ ?\ìYD‚«u9ÇußÁ܇µÚ;]Ò™­$ÛŸ½]¸Üí0EÎUÓ-¥ÑÐóô*ê‡o­ýwß{äšYÃh`t2ÿß}xåîg›Ô`#Þ ÞÿcQ-ÌCŒå¢QO‘+;M¢.„§9¥”ó!¹rÝ(±š™èIŒêî³Í¯<×zÿ³?ùÖ¹•Ùq¨šEü£oÖ?õ8Wªˆ7ˆ72« "¢£Ëu£î¿ª¸²˜i÷Œ–Ôî°dÞê\õ(sîü–™Îj-"‘EN G?þhýO¿ÕøÉ·Ìýgoš¡¸åMøÇO6þè±úr›€•xƒx懎ӀšÈ–Çšu¯»ð¾ð±ïYf®’nÿvÍÜí>inßÍï¾ã¸è ôïdÍüãwÌýØí3\%ÀÁðAýřƿ{¤~‘.UÄÄ™Õdè»…yáCØ_ùÑjj“mA\7µw²Äd–FÀàÝpÄþ×oŸûá[käWjNuϳÍ=Rq…JkÄÄ™Õø뫘é«÷öÿ£«©Ýö-b½‹ K‹ÌV¶–5Ûhð`ÿùÕO½mî}·‘_að9Õ]g›´~ŽœŠxƒx ³še%Ó¤÷b¦npÉžíÏ÷4“%[æèÜ…vÁ¯j``®Ÿ³?õö¹÷ÝVµšûWØ/â]g[¤~¾ÎDM¼A¼Y¹²…yb´t½ ïÃZí0èËšÛç)¥TÇùNÑíÙåíKP1ªz;ç Ö©óþ7ÏþøfªÔD_ZE¼óÛO?¾zûTÄÄ™ÕX+‹™Ú[˜>8² ¿]—íÏ÷xs(5Wݺ µçUTý™ËôO¼qæ'Þ4;_ဠºµÔŸ{rõsO5êffâ â €Ìj|Çn-ÌÝ0ïxdY)µÚ.z]©Ú~!ÕùÐÌÙ †%3ò¾×Õþó7ͼöXÂh`ßY,>ûdã®gšô§"Þ ÞFý¬ú5­ÛG1ÓZ˜ïG-ÛáÇÚ.\ߺp[[øY£E}&€!éøxç·ö­Æ;¯ÏÞÇì»o¨'±IŒêsíO?±úð¹31ññ@f5®´Hb{.fÚG óýèµýùî\1ª-Ï—“Óhjô¬ÔÃç;Ÿï¼æ¨ýOß0ó£·×æ2ŽN»z'|á™æçŸn¼¸ÌB>ññ0Š8 Ø•ÔêĘŽ5oÚ…?È×i´Ìd;ìË×[yßm%1[ZªûM'3òwn­þ½ï™y㩔јBO]Ìÿäéƽ϶8øG¼A¼Œ2ö¬ö ­+©é~ÑÈ…PÎq‡²]Kw˜æš¹ÛÏkÉ]Ø2Ó-Z$°C”Žy¦ù—gš·ŸH~ìö™¹­ÊÖ4¨wÂÝg[q¦qæ2Á%ññ0سÚÍÕ–d¶T óýè»ýùžf³Dom4áÛôÀáHŒ¼÷¦ÊÞ^û¾*ôÁšw!ö‚J²S£Àckuur*ÚlùvÌtÀa)|¼÷;­{¿Ó:Q3ï»­ú#·Õn;N!ÁIpv¡¸ûló®³­ËM&Xâ â â Œö¬®žtj½cÑ›m!ÎZžmºÛûó>ž¿ÙqCjŽ W·K~äÖêrkíôœa4ÆÎKuÿWÏ6ï~¶õÜ"§þˆ7ˆ7ˆ7@f5‰²Äd¶‡%*åCð!zýÁnÒï¿ýùžj©ÝÒFc ûþ9¡+õÆkÒ¼¹úC·TNÏq$aô*÷¥çÚ_y¾õÔ…œ3ÄÄÄ ³šdÛkÔô0ëEåcð>ú0ôYoÇöçï¯g®m;«°Ÿ@†êöÉÞ\ýÛ·Tož'Å-Ï/¹/?×úÊó-êR€xƒxdVÓ"µº’ "‰qmmÉ…Áw™¸Zûóa4 œ«¤[JµrWx6è‘výœý›*?pcåm×¥–z‡Ä…øèËù×¾ÛþÚ íóuVßA¼A¼2«i‘¹m“HˆQ”H¿ÁIŒÑ‡èBôšõf+ÉîZËÖ ¢u`%±©Õ[žœFÀ¸¨%ò®*ï~Mö®ë+×Îrë ¼²ê:ß~ðÅ΃çÚÍ‚5woo€Ìjš‘ÌZ}Åg»¬þ™m´­Í>€C\Û»w!ö·ßÓù²;»ó±ïk ;Ö„]m4šÆÎkŽÚw]Ÿ½ë†ÊÛ®KgSZc R#¼œ?t®ýÐù΋ËlOxƒxdVPJ)•½¥jTªÞÊ7þS‹”SžÕ¢÷=ë•+=]NÝ÷¾Ø"ÆèB9ëõ<¿n_²ê¾ã(‡ Œ+-ê¶ãÉÛ®ËÞv]ö–kÓ£²¬~,·Ãc¯ä¾ÜyôåÎÙ…"þxƒxdVØn®šn™À®vØ·œõ¬ÑeËðþg½MÛ÷»ÌzÛO!÷>å©û.§×ÌšìÊÛ«!ÆÕ6ôÀDü>PêæcÉפo:•~Ï©ä–ùD¸–uõùóù¥â©‹Å“ó'.äÏ-rÔÄÄ™Õ^ª‰Mz?쫵ØõíûýÌz~}ÊsWv¯¸Zûsbjt«Y.çãž7Pw< >¨.FJ-‘7žJßp2}ýÉäöÉé9;ÍyVTꥺ;s¹8s¹xúbþÔÅœ{S Þ ÞȬz³ÿþ'¤­Ù÷¬Wø E¶7k1Ö××rÊïXÎîã»ì~uûYpMS’h½îxrûÉôµÇì-óÉ-óvf¢/h5òðÜ’{n©xnÑ}ûRþÌBA*â â €Ìj¿xØwã´Ñz°Çlv\ÈÑ"Öh«Åô>ç­ÝvÝvuϳà¦ÄÉš¹å˜½y>yÍ{ÃszÎ^7kƱ°» ñåUÿRÝ[ñ/®¸ç—ŠçÝ¥&7:@¼A¼Y Ú0ûŠRåÂ’1bd¿³ÞžíÏE”ÕÚm{ŸaCŒå|çקҹJ²e1ŒF”RF«kgìusæšsí¬¹fÆžšÑ×ÌØãU=—þW½ZáBÃ]l„ waÕ_hø—êþ•†cññ°–!ØSáÖ™®¼<ºŸÃ¾±>¨Bi­%Æ8ð®!ÆÜù\))ç;«™Á Þ ÞȬÔZšÄl|bM…e ·u¦³F‹¨}žõÕZR«wœqv™ÂÆÄ‹rb]»Qj¶¿È-hޘꈊxƒxÌ“úÓZ­“„WSëÚEìqŠr!Ä·TÿLŒÉݾûÖÒ~Í‘i„'"F˞ǡ£R…çÐ3`êoo“œY-Yb¶ôíÞþ×û2LîCvå½ÏÔèýÌt©5Û7¿s×çùNp*1ký(ºy|+wÔéLâ â `Â3+­e&Kö|XŸGŸÝÖ™NkÑZú{6UI¶Öç‰Qµ‹Ã\@*O2Ø^z¨·rG—MÀT!Þ Þ&?³Êºh~×.|•Cwl4‘Ýý,#]­>Ï¡Œ›ÑRNpÝ_ 1>ä.D–S†xƒx˜üÌjeKïÜùýÜ},¼7úÊFÆ´{ï«`Þ^iÔ…pÀ‹1"R6ãë~ÍhSgtÖ Þ Þ&4³Ú^QG)å|(|pƒ¨&S¸PI¶LÊÝë µóÒ^$MÖwá»ÿ’#ÄÄÄ ³i.„vá2kDćX~8ÃඣR·-DÚãL×MC‰!)wᣥë]øa #ÄÄÄ ³u¹ ¹ ZdHŸÌ|ÛLWÞ¿ìò›õÑPbÿ´¬kîe>>>°fññ0™ÕÆÜ1¤gv>Ĩ¶,Á$V箫e¤ƒl(!›jïtÿUå|Aùˆ7ˆ72«¡*¼O¯, ”ÓÍLw` %¬Ö‰Õ¶‡Ò;ʇXÎqìÂ@¼A¼YÌL¶ÌtFËžç ¡„^?ÖÜS1SÇ.<ÄÄ™ÕÁó!†·Ì&‰Õ]Ë¡¯¡„ˆ$Fcz8Ö¼©ö?Pˆ7ˆ72«Ã‘»°eA(5»Ít;7”Ø÷DSkNz*fÖŽ5³ ññ@fuÈ ¿u¦£åj{܃]@꧅yˆE…ük@¼A¼Yõ)ÆèB°úÊFÖìØ}¯’˜4”Ð"¶÷æå<-Ì Þ ÞȬFQá‚M¯˜é£[Û§'-[®ŸªÞJÐÂâ â €ÌjBg:*Jɶ)iKg†ý4”°Z[£#=µ0§˜)ÄÄ™Õ8q>l¹Í™Z³y¦»JC ¿ûáã²…yb´¦…9ÄÄ™ÕÄËß2Ó-"cT»5”Øy_^äÕŽ{Ý¿†‚b¦oodVcmÇF©ÑçU/õyÖ&¸î/Š®ïÂ>Dvá Þ ÞȬÆ]áBvåBQbuÇy£e‡†áŠÅžò1½¶0/WŒØ…€xƒx ³Î?f½BhŒªSøƒ©ûYø­3±ZgÛ÷å•jvœZkaÞc1SZ˜@¼A¼Y ÕmìDÕ2Ûè°Ðbô!n™³jÙÛ)œÑ’ZÓk óÂGéˆ7ˆ72«áÍq•äª§…¯ÖGoàrç«éÞ#™£“^Z˜ûPPÌâ â €Ìj¨´ÈL–ìò9¨WRøPíæw±c,|,¼çX3ÄÄ™ÕAHì{ܹ;¸#ÂŶF½*5k€xƒx ³!ÆýÜ(ݨŸãCì8×Íöxáúœéhaññ@fu˜ Rk¶lx—³F+1åÍÔÄhY¿™j´X“¬¶‹=¿¶¼ñÙu-Sbt´0€xƒx ³:t!ÆF»¨$Æh QÞ>öÑÆN‹Ø«×$Õ"‰ÑÝLíÂus¯”æoodV#7Ù5û­Æ#ë»ðv¯]uéni¨ðA;ŸY³ãß–=ûú›‹ññ@f5r´¬5yèr3½ûõžNá}ˆ™5ËQe ó‡À.<ÄÄ™Õ$Ms³•¤Ë‡Û¹ï鮧óÁù EDTŒŠ{¢LgZE¼YM¸,1{>&®×$íûtrˆQ1Å0­ˆ72«É·û–¼±ï›©Ä™Õ´p>½u‰ÓÉ€x™U:Îk-e—½• Ô$ÄȬz×Ê]‹Ÿ< Þ08š!2+ ³2+ ³Y™Y™€Ì Ȭ€Ì ȬdV@fdV@f ³2+ ³2+™Y™YȬ€Ì Ȭ€Ì @fdV@fdV2+ ³2+ ³Y™Y™ ÿÿ1V_¥zIEND®B`‚inc/images/follow.gif000064400000001032147600022000010536 0ustar00GIF89a æ\y^N”d.›d>ŒcL—nZˆndŽze}v›ohŸwg›zp®[ZµtW§}h¿}b¾~eÞh\Ã}aÂ|dÕ{cÙ}d§‚8¹‚P¼‹Y«ƒf¡ƒx°‡n̈8Ù™:Æ€AĉHÔ€]Ù‹\ÑžFÁ—zÝ€dæRܬZÕ±qâŽmëºQí­gÿÉÿÈÿÈüÌ÷Ä$þÌ7þÌ8þÏ:üÐ=éÈHöÇAòÅZõÓLÿÚPÿÚQþÜQþÞPåÁ`çÄmõË~ôèxûárýàpüíž’ˆ¬”ª•‘¶Ž†¼´´Ø’†Ý›—Ĥ•Á¶¶Î½¼Û­£ç£’㰓鰬翺踸åÊþïŠÿíÿë•ÿíþðŠþñŠþò‰÷ä¤ÙÊÆÿÿÿ÷äÓÿûÊþúã!ù\, w€\‚‚Q KƒˆƒHLD‰‰G] ŽƒPN_‰#Z^R ;AXWVUTSY>$\"!69878:3ƒI-+,*.B‰ 201/4‰O)@(5?FˆM=% <&Cˆ'J\[ ˆE‰‚;inc/images/remove.gif000064400000001074147600022000010537 0ustar00GIF89aæÿÿÿýýþüýþûüýÛæïÖãí1u£8z¦I…­J…­Z‘¶\’¶iš¼r¡ÁŠ±Ë¡ÀÕ·ÏßÊÜèÉÛçÏßêÓáëÖãìÛçï-s¡.u¢3w£5y¥6{¦7z¦6y¤9|§=ª>ªCƒ¬G…®F…¬O‹°S³RŒ±U³X‘´]“µc˜¹d™ºgš»j¼l½nŸ½t£Áw¥Â{¨Äz§Ã~ªÆ~©Å~ªÅƒ­Èƒ®È…®É†¯ÉŠ²ËŠ±ÊŒ³ÌŒ²Ë‘·Î”¸Ïš¼Ò›½Òœ½ÒŸÀÔ¶Ïß¹Ñà¸Ðß·ÏÞºÑà»ÒàÁÖãÈÛçÌÞéÏßéÎÞèÕãìÙæîØåíÞéðgœ»t¤ÀŠ³ËµÍ¶Í­ÊÛ¶ÏÞ·Ðß¿ÕâÃØäÆÚæÈÛæÍÞèÖäìÜèïßêðÞéïâìòáëñÉÜæÕäìÕãêÚçîÞêðùûüÍßçÎßç×æíÜéïøûûþÿÿýþþþÿþÿÿÿ!ùv,™€‚ƒNRƒ‡usƒ:ƒtƒmA_L/!1JDŽ[ *; (‡KQI03^i2$@a?XkZV7[l2#B‚,.pTKHbO%5‡]4nqgj&dƒ\  W=()PƒrY_ @ˆp0åÈAs ÂQdC‡ÀD ;inc/images/wpweb-menu-icon-white.png000064400000000605147600022000013412 0ustar00‰PNG  IHDRVÎŽWLIDAT8­”O+DQ‡C™&k5HŠ‘ ³²6«±²³±aedÉP,”? %KÍ‚"‰o ìX  4 dåÑÉ{s:ŽÁä­_·ó¼ç}n÷ÜÛÕU è“4-©"©,é¶w«]K:—t!©ÉD’ž~)ÉIs¢’¤uƒIYIiI‡’ª’2’ò’Ž¿IÚàÒ¼òQÝ@3µÞ™ñe[û™´^:S|V%²1©¯×nlÛ­Ø ?|ÕðE.‹ÞÀ.0Ì×z±½E[ß'ó¾¨Á;§Zµ ÜY&&rY‹®€…³—µEæ­W øŽ?Š\‚œññ€~ Fîš²ë³ñ[7Ö¹Œ³žd2ÀÐi½<ÐSK¦ (s/+%Yn€S`Ëó²‘K/°ç£û4þé¯&éy/¨‡–IEND®B`‚inc/images/tb-close.png000064400000000772147600022000010775 0ustar00‰PNG  IHDR´´ pHYs  šœ¬IDAT(‘uRKn"Q ´ýüºfŠˬ΀øå£$Çš‰æRY´gè ¸(ˆéögÍ’”jçr•e[­–ª\ƒ»€9ªjŒ‘‹¢HÓôþþþªšÐK1f^,Oÿ¨V«5›MüfV»I¥(;NŒ‘Ï炈ݯZœN§$"ª­âûûÏÇDZ»š 3 ‡ý_ï¿)Dsdf õz½Ñh‘ˆ0ó`0ˆ1n6›^¯÷úú:NW«•ªÀn·ã*NDbŒyž›ÙÃÙF£,Ëò<!„ʲt÷‹šˆÌìx<®×ky{{ûøøX.—çóYD1I3»¬‰èp8ÜÞÞ¾¼¼dYöüüÜn·w»]Uªnrñ63D|zzÇY–ÍçsD‡ˆ8™L@UUõâÍ̪Úï÷'“Éb±Øï÷yžÏf³ªÁÌÒ4UU¼»»ëv»î^%š™»‡ÜÝ݉¨,ËcQÛí–9 ‚!€» ‚›”ÎFѸ,ËpSûöùyøþ£€WèCPÕ培»c³Õ‘¯~\™ÙÌŠ¢H’ä?’]øÉ7DŠBIEND®B`‚inc/js/chosen/chosen.jquery.js000064400000122734147600022000012343 0ustar00;;;/*! Chosen, a Select Box Enhancer for jQuery and Prototype by Patrick Filler for Harvest, http://getharvest.com Version 1.1.0 Full source at https://github.com/harvesthq/chosen Copyright (c) 2011 Harvest http://getharvest.com MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md This file is generated by `grunt build`, do not edit it by hand. */ "use strict"; (function() { var $, AbstractChosen, Chosen, SelectParser, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; SelectParser = (function() { function SelectParser() { this.options_index = 0; this.parsed = []; } SelectParser.prototype.add_node = function(child) { if (child.nodeName.toUpperCase() === "OPTGROUP") { return this.add_group(child); } else { return this.add_option(child); } }; SelectParser.prototype.add_group = function(group) { var group_position, option, _i, _len, _ref, _results; group_position = this.parsed.length; this.parsed.push({ array_index: group_position, group: true, label: this.escapeExpression(group.label), children: 0, disabled: group.disabled }); _ref = group.childNodes; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { option = _ref[_i]; _results.push(this.add_option(option, group_position, group.disabled)); } return _results; }; SelectParser.prototype.add_option = function(option, group_position, group_disabled) { if (option.nodeName.toUpperCase() === "OPTION") { if (option.text !== "") { if (group_position != null) { this.parsed[group_position].children += 1; } this.parsed.push({ array_index: this.parsed.length, options_index: this.options_index, value: option.value, text: option.text, html: option.innerHTML, selected: option.selected, disabled: group_disabled === true ? group_disabled : option.disabled, group_array_index: group_position, classes: option.className, style: option.style.cssText }); } else { this.parsed.push({ array_index: this.parsed.length, options_index: this.options_index, empty: true }); } return this.options_index += 1; } }; SelectParser.prototype.escapeExpression = function(text) { var map, unsafe_chars; if ((text == null) || text === false) { return ""; } if (!/[\&\<\>\"\'\`]/.test(text)) { return text; } map = { "<": "<", ">": ">", '"': """, "'": "'", "`": "`" }; unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; return text.replace(unsafe_chars, function(chr) { return map[chr] || "&"; }); }; return SelectParser; })(); SelectParser.select_to_array = function(select) { var child, parser, _i, _len, _ref; parser = new SelectParser(); _ref = select.childNodes; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; parser.add_node(child); } return parser.parsed; }; AbstractChosen = (function() { function AbstractChosen(form_field, options) { this.form_field = form_field; this.options = options != null ? options : {}; if (!AbstractChosen.browser_is_supported()) { return; } this.is_multiple = this.form_field.multiple; this.set_default_text(); this.set_default_values(); this.setup(); this.set_up_html(); this.register_observers(); } AbstractChosen.prototype.set_default_values = function() { var _this = this; this.click_test_action = function(evt) { return _this.test_active_click(evt); }; this.activate_action = function(evt) { return _this.activate_field(evt); }; this.active_field = false; this.mouse_on_container = false; this.results_showing = false; this.result_highlighted = null; this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; this.disable_search_threshold = this.options.disable_search_threshold || 0; this.disable_search = this.options.disable_search || false; this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; this.group_search = this.options.group_search != null ? this.options.group_search : true; this.search_contains = this.options.search_contains || false; this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; this.max_selected_options = this.options.max_selected_options || Infinity; this.inherit_select_classes = this.options.inherit_select_classes || false; this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; }; AbstractChosen.prototype.set_default_text = function() { if (this.form_field.getAttribute("data-placeholder")) { this.default_text = this.form_field.getAttribute("data-placeholder"); } else if (this.is_multiple) { this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; } else { this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; } return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; }; AbstractChosen.prototype.mouse_enter = function() { return this.mouse_on_container = true; }; AbstractChosen.prototype.mouse_leave = function() { return this.mouse_on_container = false; }; AbstractChosen.prototype.input_focus = function(evt) { var _this = this; if (this.is_multiple) { if (!this.active_field) { return setTimeout((function() { return _this.container_mousedown(); }), 50); } } else { if (!this.active_field) { return this.activate_field(); } } }; AbstractChosen.prototype.input_blur = function(evt) { var _this = this; if (!this.mouse_on_container) { this.active_field = false; return setTimeout((function() { return _this.blur_test(); }), 100); } }; AbstractChosen.prototype.results_option_build = function(options) { var content, data, _i, _len, _ref; content = ''; _ref = this.results_data; for (_i = 0, _len = _ref.length; _i < _len; _i++) { data = _ref[_i]; if (data.group) { content += this.result_add_group(data); } else { content += this.result_add_option(data); } if (options != null ? options.first : void 0) { if (data.selected && this.is_multiple) { this.choice_build(data); } else if (data.selected && !this.is_multiple) { this.single_set_selected_text(data.text); } } } return content; }; AbstractChosen.prototype.result_add_option = function(option) { var classes, option_el; if (!option.search_match) { return ''; } if (!this.include_option_in_results(option)) { return ''; } classes = []; if (!option.disabled && !(option.selected && this.is_multiple)) { classes.push("active-result"); } if (option.disabled && !(option.selected && this.is_multiple)) { classes.push("disabled-result"); } if (option.selected) { classes.push("result-selected"); } if (option.group_array_index != null) { classes.push("group-option"); } if (option.classes !== "") { classes.push(option.classes); } option_el = document.createElement("li"); option_el.className = classes.join(" "); option_el.style.cssText = option.style; option_el.setAttribute("data-option-array-index", option.array_index); option_el.innerHTML = option.search_text; return this.outerHTML(option_el); }; AbstractChosen.prototype.result_add_group = function(group) { var group_el; if (!(group.search_match || group.group_match)) { return ''; } if (!(group.active_options > 0)) { return ''; } group_el = document.createElement("li"); group_el.className = "group-result"; group_el.innerHTML = group.search_text; return this.outerHTML(group_el); }; AbstractChosen.prototype.results_update_field = function() { this.set_default_text(); if (!this.is_multiple) { this.results_reset_cleanup(); } this.result_clear_highlight(); this.results_build(); if (this.results_showing) { return this.winnow_results(); } }; AbstractChosen.prototype.reset_single_select_options = function() { var result, _i, _len, _ref, _results; _ref = this.results_data; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { result = _ref[_i]; if (result.selected) { _results.push(result.selected = false); } else { _results.push(void 0); } } return _results; }; AbstractChosen.prototype.results_toggle = function() { if (this.results_showing) { return this.results_hide(); } else { return this.results_show(); } }; AbstractChosen.prototype.results_search = function(evt) { if (this.results_showing) { return this.winnow_results(); } else { return this.results_show(); } }; AbstractChosen.prototype.winnow_results = function() { var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; this.no_results_clear(); results = 0; searchText = this.get_search_text(); escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); regexAnchor = this.search_contains ? "" : "^"; regex = new RegExp(regexAnchor + escapedSearchText, 'i'); zregex = new RegExp(escapedSearchText, 'i'); _ref = this.results_data; for (_i = 0, _len = _ref.length; _i < _len; _i++) { option = _ref[_i]; option.search_match = false; results_group = null; if (this.include_option_in_results(option)) { if (option.group) { option.group_match = false; option.active_options = 0; } if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { results_group = this.results_data[option.group_array_index]; if (results_group.active_options === 0 && results_group.search_match) { results += 1; } results_group.active_options += 1; } if (!(option.group && !this.group_search)) { option.search_text = option.group ? option.label : option.html; option.search_match = this.search_string_match(option.search_text, regex); if (option.search_match && !option.group) { results += 1; } if (option.search_match) { if (searchText.length) { startpos = option.search_text.search(zregex); text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); } if (results_group != null) { results_group.group_match = true; } } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { option.search_match = true; } } } } this.result_clear_highlight(); if (results < 1 && searchText.length) { this.update_results_content(""); return this.no_results(searchText); } else { this.update_results_content(this.results_option_build()); return this.winnow_results_set_highlight(); } }; AbstractChosen.prototype.search_string_match = function(search_string, regex) { var part, parts, _i, _len; if (regex.test(search_string)) { return true; } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { parts = search_string.replace(/\[|\]/g, "").split(" "); if (parts.length) { for (_i = 0, _len = parts.length; _i < _len; _i++) { part = parts[_i]; if (regex.test(part)) { return true; } } } } }; AbstractChosen.prototype.choices_count = function() { var option, _i, _len, _ref; if (this.selected_option_count != null) { return this.selected_option_count; } this.selected_option_count = 0; _ref = this.form_field.options; for (_i = 0, _len = _ref.length; _i < _len; _i++) { option = _ref[_i]; if (option.selected) { this.selected_option_count += 1; } } return this.selected_option_count; }; AbstractChosen.prototype.choices_click = function(evt) { evt.preventDefault(); if (!(this.results_showing || this.is_disabled)) { return this.results_show(); } }; AbstractChosen.prototype.keyup_checker = function(evt) { var stroke, _ref; stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; this.search_field_scale(); switch (stroke) { case 8: if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { return this.keydown_backstroke(); } else if (!this.pending_backstroke) { this.result_clear_highlight(); return this.results_search(); } break; case 13: evt.preventDefault(); if (this.results_showing) { return this.result_select(evt); } break; case 27: if (this.results_showing) { this.results_hide(); } return true; case 9: case 38: case 40: case 16: case 91: case 17: break; default: return this.results_search(); } }; AbstractChosen.prototype.clipboard_event_checker = function(evt) { var _this = this; return setTimeout((function() { return _this.results_search(); }), 50); }; AbstractChosen.prototype.container_width = function() { if (this.options.width != null) { return this.options.width; } else { return "" + this.form_field.offsetWidth + "px"; } }; AbstractChosen.prototype.include_option_in_results = function(option) { if (this.is_multiple && (!this.display_selected_options && option.selected)) { return false; } if (!this.display_disabled_options && option.disabled) { return false; } if (option.empty) { return false; } return true; }; AbstractChosen.prototype.search_results_touchstart = function(evt) { this.touch_started = true; return this.search_results_mouseover(evt); }; AbstractChosen.prototype.search_results_touchmove = function(evt) { this.touch_started = false; return this.search_results_mouseout(evt); }; AbstractChosen.prototype.search_results_touchend = function(evt) { if (this.touch_started) { return this.search_results_mouseup(evt); } }; AbstractChosen.prototype.outerHTML = function(element) { var tmp; if (element.outerHTML) { return element.outerHTML; } tmp = document.createElement("div"); tmp.appendChild(element); return tmp.innerHTML; }; AbstractChosen.browser_is_supported = function() { if (window.navigator.appName === "Microsoft Internet Explorer") { return document.documentMode >= 8; } if (/iP(od|hone)/i.test(window.navigator.userAgent)) { return false; } if (/Android/i.test(window.navigator.userAgent)) { if (/Mobile/i.test(window.navigator.userAgent)) { return false; } } return true; }; AbstractChosen.default_multiple_text = "Select Some Options"; AbstractChosen.default_single_text = "Select an Option"; AbstractChosen.default_no_result_text = "No results match"; return AbstractChosen; })(); $ = jQuery; $.fn.extend({ chosen: function(options) { if (!AbstractChosen.browser_is_supported()) { return this; } return this.each(function(input_field) { var $this, chosen; $this = $(this); chosen = $this.data('chosen'); if (options === 'destroy' && chosen) { chosen.destroy(); } else if (!chosen) { $this.data('chosen', new Chosen(this, options)); } }); } }); Chosen = (function(_super) { __extends(Chosen, _super); function Chosen() { _ref = Chosen.__super__.constructor.apply(this, arguments); return _ref; } Chosen.prototype.setup = function() { this.form_field_jq = $(this.form_field); this.current_selectedIndex = this.form_field.selectedIndex; return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl"); }; Chosen.prototype.set_up_html = function() { var container_classes, container_props; container_classes = ["chosen-container"]; container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); if (this.inherit_select_classes && this.form_field.className) { container_classes.push(this.form_field.className); } if (this.is_rtl) { container_classes.push("chosen-rtl"); } container_props = { 'class': container_classes.join(' '), 'style': "width: " + (this.container_width()) + ";", 'title': this.form_field.title }; if (this.form_field.id.length) { container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; } this.container = $("

    ", container_props); if (this.is_multiple) { this.container.html('
      '); } else { this.container.html('' + this.default_text + '
        '); } this.form_field_jq.hide().after(this.container); this.dropdown = this.container.find('div.chosen-drop').first(); this.search_field = this.container.find('input').first(); this.search_results = this.container.find('ul.chosen-results').first(); this.search_field_scale(); this.search_no_results = this.container.find('li.no-results').first(); if (this.is_multiple) { this.search_choices = this.container.find('ul.chosen-choices').first(); this.search_container = this.container.find('li.search-field').first(); } else { this.search_container = this.container.find('div.chosen-search').first(); this.selected_item = this.container.find('.chosen-single').first(); } this.results_build(); this.set_tab_index(); this.set_label_behavior(); return this.form_field_jq.trigger("chosen:ready", { chosen: this }); }; Chosen.prototype.register_observers = function() { var _this = this; this.container.bind('mousedown.chosen', function(evt) { _this.container_mousedown(evt); }); this.container.bind('mouseup.chosen', function(evt) { _this.container_mouseup(evt); }); this.container.bind('mouseenter.chosen', function(evt) { _this.mouse_enter(evt); }); this.container.bind('mouseleave.chosen', function(evt) { _this.mouse_leave(evt); }); this.search_results.bind('mouseup.chosen', function(evt) { _this.search_results_mouseup(evt); }); this.search_results.bind('mouseover.chosen', function(evt) { _this.search_results_mouseover(evt); }); this.search_results.bind('mouseout.chosen', function(evt) { _this.search_results_mouseout(evt); }); this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) { _this.search_results_mousewheel(evt); }); this.search_results.bind('touchstart.chosen', function(evt) { _this.search_results_touchstart(evt); }); this.search_results.bind('touchmove.chosen', function(evt) { _this.search_results_touchmove(evt); }); this.search_results.bind('touchend.chosen', function(evt) { _this.search_results_touchend(evt); }); this.form_field_jq.bind("chosen:updated.chosen", function(evt) { _this.results_update_field(evt); }); this.form_field_jq.bind("chosen:activate.chosen", function(evt) { _this.activate_field(evt); }); this.form_field_jq.bind("chosen:open.chosen", function(evt) { _this.container_mousedown(evt); }); this.form_field_jq.bind("chosen:close.chosen", function(evt) { _this.input_blur(evt); }); this.search_field.bind('blur.chosen', function(evt) { _this.input_blur(evt); }); this.search_field.bind('keyup.chosen', function(evt) { _this.keyup_checker(evt); }); this.search_field.bind('keydown.chosen', function(evt) { _this.keydown_checker(evt); }); this.search_field.bind('focus.chosen', function(evt) { _this.input_focus(evt); }); this.search_field.bind('cut.chosen', function(evt) { _this.clipboard_event_checker(evt); }); this.search_field.bind('paste.chosen', function(evt) { _this.clipboard_event_checker(evt); }); if (this.is_multiple) { return this.search_choices.bind('click.chosen', function(evt) { _this.choices_click(evt); }); } else { return this.container.bind('click.chosen', function(evt) { evt.preventDefault(); }); } }; Chosen.prototype.destroy = function() { $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); if (this.search_field[0].tabIndex) { this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; } this.container.remove(); this.form_field_jq.removeData('chosen'); return this.form_field_jq.show(); }; Chosen.prototype.search_field_disabled = function() { this.is_disabled = this.form_field_jq[0].disabled; if (this.is_disabled) { this.container.addClass('chosen-disabled'); this.search_field[0].disabled = true; if (!this.is_multiple) { this.selected_item.unbind("focus.chosen", this.activate_action); } return this.close_field(); } else { this.container.removeClass('chosen-disabled'); this.search_field[0].disabled = false; if (!this.is_multiple) { return this.selected_item.bind("focus.chosen", this.activate_action); } } }; Chosen.prototype.container_mousedown = function(evt) { if (!this.is_disabled) { if (evt && evt.type === "mousedown" && !this.results_showing) { evt.preventDefault(); } if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { if (!this.active_field) { if (this.is_multiple) { this.search_field.val(""); } $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action); this.results_show(); } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { evt.preventDefault(); this.results_toggle(); } return this.activate_field(); } } }; Chosen.prototype.container_mouseup = function(evt) { if (evt.target.nodeName === "ABBR" && !this.is_disabled) { return this.results_reset(evt); } }; Chosen.prototype.search_results_mousewheel = function(evt) { var delta; if (evt.originalEvent) { delta = -evt.originalEvent.wheelDelta || evt.originalEvent.detail; } if (delta != null) { evt.preventDefault(); if (evt.type === 'DOMMouseScroll') { delta = delta * 40; } return this.search_results.scrollTop(delta + this.search_results.scrollTop()); } }; Chosen.prototype.blur_test = function(evt) { if (!this.active_field && this.container.hasClass("chosen-container-active")) { return this.close_field(); } }; Chosen.prototype.close_field = function() { $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); this.active_field = false; this.results_hide(); this.container.removeClass("chosen-container-active"); this.clear_backstroke(); this.show_search_field_default(); return this.search_field_scale(); }; Chosen.prototype.activate_field = function() { this.container.addClass("chosen-container-active"); this.active_field = true; this.search_field.val(this.search_field.val()); return this.search_field.focus(); }; Chosen.prototype.test_active_click = function(evt) { var active_container; active_container = $(evt.target).closest('.chosen-container'); if (active_container.length && this.container[0] === active_container[0]) { return this.active_field = true; } else { return this.close_field(); } }; Chosen.prototype.results_build = function() { this.parsing = true; this.selected_option_count = null; this.results_data = SelectParser.select_to_array(this.form_field); if (this.is_multiple) { this.search_choices.find("li.search-choice").remove(); } else if (!this.is_multiple) { this.single_set_selected_text(); if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { this.search_field[0].readOnly = true; this.container.addClass("chosen-container-single-nosearch"); } else { this.search_field[0].readOnly = false; this.container.removeClass("chosen-container-single-nosearch"); } } this.update_results_content(this.results_option_build({ first: true })); this.search_field_disabled(); this.show_search_field_default(); this.search_field_scale(); return this.parsing = false; }; Chosen.prototype.result_do_highlight = function(el) { var high_bottom, high_top, maxHeight, visible_bottom, visible_top; if (el.length) { this.result_clear_highlight(); this.result_highlight = el; this.result_highlight.addClass("highlighted"); maxHeight = parseInt(this.search_results.css("maxHeight"), 10); visible_top = this.search_results.scrollTop(); visible_bottom = maxHeight + visible_top; high_top = this.result_highlight.position().top + this.search_results.scrollTop(); high_bottom = high_top + this.result_highlight.outerHeight(); if (high_bottom >= visible_bottom) { return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); } else if (high_top < visible_top) { return this.search_results.scrollTop(high_top); } } }; Chosen.prototype.result_clear_highlight = function() { if (this.result_highlight) { this.result_highlight.removeClass("highlighted"); } return this.result_highlight = null; }; Chosen.prototype.results_show = function() { if (this.is_multiple && this.max_selected_options <= this.choices_count()) { this.form_field_jq.trigger("chosen:maxselected", { chosen: this }); return false; } this.container.addClass("chosen-with-drop"); this.results_showing = true; this.search_field.focus(); this.search_field.val(this.search_field.val()); this.winnow_results(); return this.form_field_jq.trigger("chosen:showing_dropdown", { chosen: this }); }; Chosen.prototype.update_results_content = function(content) { return this.search_results.html(content); }; Chosen.prototype.results_hide = function() { if (this.results_showing) { this.result_clear_highlight(); this.container.removeClass("chosen-with-drop"); this.form_field_jq.trigger("chosen:hiding_dropdown", { chosen: this }); } return this.results_showing = false; }; Chosen.prototype.set_tab_index = function(el) { var ti; if (this.form_field.tabIndex) { ti = this.form_field.tabIndex; this.form_field.tabIndex = -1; return this.search_field[0].tabIndex = ti; } }; Chosen.prototype.set_label_behavior = function() { var _this = this; this.form_field_label = this.form_field_jq.parents("label"); if (!this.form_field_label.length && this.form_field.id.length) { this.form_field_label = $("label[for='" + this.form_field.id + "']"); } if (this.form_field_label.length > 0) { return this.form_field_label.bind('click.chosen', function(evt) { if (_this.is_multiple) { return _this.container_mousedown(evt); } else { return _this.activate_field(); } }); } }; Chosen.prototype.show_search_field_default = function() { if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { this.search_field.val(this.default_text); return this.search_field.addClass("default"); } else { this.search_field.val(""); return this.search_field.removeClass("default"); } }; Chosen.prototype.search_results_mouseup = function(evt) { var target; target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); if (target.length) { this.result_highlight = target; this.result_select(evt); return this.search_field.focus(); } }; Chosen.prototype.search_results_mouseover = function(evt) { var target; target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); if (target) { return this.result_do_highlight(target); } }; Chosen.prototype.search_results_mouseout = function(evt) { if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { return this.result_clear_highlight(); } }; Chosen.prototype.choice_build = function(item) { var choice, close_link, _this = this; choice = $('
      • ', { "class": "search-choice" }).html("" + item.html + ""); if (item.disabled) { choice.addClass('search-choice-disabled'); } else { close_link = $('', { "class": 'search-choice-close', 'data-option-array-index': item.array_index }); close_link.bind('click.chosen', function(evt) { return _this.choice_destroy_link_click(evt); }); choice.append(close_link); } return this.search_container.before(choice); }; Chosen.prototype.choice_destroy_link_click = function(evt) { evt.preventDefault(); evt.stopPropagation(); if (!this.is_disabled) { return this.choice_destroy($(evt.target)); } }; Chosen.prototype.choice_destroy = function(link) { if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { this.show_search_field_default(); if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) { this.results_hide(); } link.parents('li').first().remove(); return this.search_field_scale(); } }; Chosen.prototype.results_reset = function() { this.reset_single_select_options(); this.form_field.options[0].selected = true; this.single_set_selected_text(); this.show_search_field_default(); this.results_reset_cleanup(); this.form_field_jq.trigger("change"); if (this.active_field) { return this.results_hide(); } }; Chosen.prototype.results_reset_cleanup = function() { this.current_selectedIndex = this.form_field.selectedIndex; return this.selected_item.find("abbr").remove(); }; Chosen.prototype.result_select = function(evt) { var high, item; if (this.result_highlight) { high = this.result_highlight; this.result_clear_highlight(); if (this.is_multiple && this.max_selected_options <= this.choices_count()) { this.form_field_jq.trigger("chosen:maxselected", { chosen: this }); return false; } if (this.is_multiple) { high.removeClass("active-result"); } else { this.reset_single_select_options(); } item = this.results_data[high[0].getAttribute("data-option-array-index")]; item.selected = true; this.form_field.options[item.options_index].selected = true; this.selected_option_count = null; if (this.is_multiple) { this.choice_build(item); } else { this.single_set_selected_text(item.text); } if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { this.results_hide(); } this.search_field.val(""); if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { this.form_field_jq.trigger("change", { 'selected': this.form_field.options[item.options_index].value }); } this.current_selectedIndex = this.form_field.selectedIndex; return this.search_field_scale(); } }; Chosen.prototype.single_set_selected_text = function(text) { if (text == null) { text = this.default_text; } if (text === this.default_text) { this.selected_item.addClass("chosen-default"); } else { this.single_deselect_control_build(); this.selected_item.removeClass("chosen-default"); } return this.selected_item.find("span").text(text); }; Chosen.prototype.result_deselect = function(pos) { var result_data; result_data = this.results_data[pos]; if (!this.form_field.options[result_data.options_index].disabled) { result_data.selected = false; this.form_field.options[result_data.options_index].selected = false; this.selected_option_count = null; this.result_clear_highlight(); if (this.results_showing) { this.winnow_results(); } this.form_field_jq.trigger("change", { deselected: this.form_field.options[result_data.options_index].value }); this.search_field_scale(); return true; } else { return false; } }; Chosen.prototype.single_deselect_control_build = function() { if (!this.allow_single_deselect) { return; } if (!this.selected_item.find("abbr").length) { this.selected_item.find("span").first().after(""); } return this.selected_item.addClass("chosen-single-with-deselect"); }; Chosen.prototype.get_search_text = function() { if (this.search_field.val() === this.default_text) { return ""; } else { return $('
        ').text($.trim(this.search_field.val())).html(); } }; Chosen.prototype.winnow_results_set_highlight = function() { var do_high, selected_results; selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); if (do_high != null) { return this.result_do_highlight(do_high); } }; Chosen.prototype.no_results = function(terms) { var no_results_html; no_results_html = $('
      • ' + this.results_none_found + ' ""
      • '); no_results_html.find("span").first().html(terms); this.search_results.append(no_results_html); return this.form_field_jq.trigger("chosen:no_results", { chosen: this }); }; Chosen.prototype.no_results_clear = function() { return this.search_results.find(".no-results").remove(); }; Chosen.prototype.keydown_arrow = function() { var next_sib; if (this.results_showing && this.result_highlight) { next_sib = this.result_highlight.nextAll("li.active-result").first(); if (next_sib) { return this.result_do_highlight(next_sib); } } else { return this.results_show(); } }; Chosen.prototype.keyup_arrow = function() { var prev_sibs; if (!this.results_showing && !this.is_multiple) { return this.results_show(); } else if (this.result_highlight) { prev_sibs = this.result_highlight.prevAll("li.active-result"); if (prev_sibs.length) { return this.result_do_highlight(prev_sibs.first()); } else { if (this.choices_count() > 0) { this.results_hide(); } return this.result_clear_highlight(); } } }; Chosen.prototype.keydown_backstroke = function() { var next_available_destroy; if (this.pending_backstroke) { this.choice_destroy(this.pending_backstroke.find("a").first()); return this.clear_backstroke(); } else { next_available_destroy = this.search_container.siblings("li.search-choice").last(); if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { this.pending_backstroke = next_available_destroy; if (this.single_backstroke_delete) { return this.keydown_backstroke(); } else { return this.pending_backstroke.addClass("search-choice-focus"); } } } }; Chosen.prototype.clear_backstroke = function() { if (this.pending_backstroke) { this.pending_backstroke.removeClass("search-choice-focus"); } return this.pending_backstroke = null; }; Chosen.prototype.keydown_checker = function(evt) { var stroke, _ref1; stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; this.search_field_scale(); if (stroke !== 8 && this.pending_backstroke) { this.clear_backstroke(); } switch (stroke) { case 8: this.backstroke_length = this.search_field.val().length; break; case 9: if (this.results_showing && !this.is_multiple) { this.result_select(evt); } this.mouse_on_container = false; break; case 13: evt.preventDefault(); break; case 38: evt.preventDefault(); this.keyup_arrow(); break; case 40: evt.preventDefault(); this.keydown_arrow(); break; } }; Chosen.prototype.search_field_scale = function() { var div, f_width, h, style, style_block, styles, w, _i, _len; if (this.is_multiple) { h = 0; w = 0; style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; for (_i = 0, _len = styles.length; _i < _len; _i++) { style = styles[_i]; style_block += style + ":" + this.search_field.css(style) + ";"; } div = $('
        ', { 'style': style_block }); div.text(this.search_field.val()); $('body').append(div); w = div.width() + 25; div.remove(); f_width = this.container.outerWidth(); if (w > f_width - 10) { w = f_width - 10; } return this.search_field.css({ 'width': w + 'px' }); } }; return Chosen; })(AbstractChosen); }).call(this);inc/js/chosen/ajax-chosen.jquery.js000064400000005157147600022000013263 0ustar00;;;// Generated by CoffeeScript 1.3.1 "use strict"; (function($) { return $.fn.ajaxChosen = function(settings, callback) { var chosenXhr, defaultOptions, options, select; if (settings == null) { settings = {}; } if (callback == null) { callback = function() {}; } defaultOptions = { minTermLength: 3, afterTypeDelay: 500, jsonTermKey: "term" }; select = this; chosenXhr = null; options = $.extend({}, defaultOptions, settings); this.chosen(); return this.each(function() { return $(this).next('.chosen-container').find(".search-field > input, .chosen-search > input").bind('keyup', function() { var field, msg, success, val; val = $.trim($(this).attr('value')); msg = val.length < options.minTermLength ? "Keep typing..." : "Looking for '" + val + "'"; select.next('.chosen-container').find('.no-results').text(msg); if (val === $(this).data('prevVal')) { return false; } $(this).data('prevVal', val); if (this.timer) { clearTimeout(this.timer); } if (val.length < options.minTermLength) { return false; } field = $(this); if (!(options.data != null)) { options.data = {}; } options.data[options.jsonTermKey] = val; if (options.dataCallback != null) { options.data = options.dataCallback(options.data); } success = options.success; options.success = function(data) { var items, selected_values; if (!(data != null)) { return; } selected_values = []; select.find('option').each(function() { if (!$(this).is(":selected")) { return $(this).remove(); } else { return selected_values.push($(this).val() + "-" + $(this).text()); } }); items = callback(data); $.each(items, function(value, text) { if ($.inArray(value + "-" + text, selected_values) === -1) { return $("' } $.toast({ heading: '', text: '
        ' + img_out + '
        ' + title + '
        ', icon: $icon, position: Penci_Bf_Vars.popup_position, textAlign: 'left', showHideTransition: 'fade', loader: false, hideAfter: Penci_Bf_Vars.popup_timeout, bgColor: Penci_Bf_Vars.popup_bg_cl, textColor: Penci_Bf_Vars.popup_text_cl, }) } } PENCI.imported_posts_data = function () { var current_saved_ids = Cookies.get('penci-bf-posts-ids') if (!current_saved_ids) { return false } if (Penci_Bf_Vars.loginflag == 1) { current_saved_ids = JSON.parse(current_saved_ids) current_saved_ids.forEach(function (item) { item = parseInt(item) var data = { status: 1, action: 'penci_bl_follow_post', nonce: Penci_Bf_Vars.nonce, postid: item, currentpostid: item, } jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { }).done(function () { Cookies.remove('penci-bf-posts-ids') }) }) } } PENCI.imported_authors_data = function () { var current_author_saved_ids = Cookies.get('penci-bf-author-ids') if (!current_author_saved_ids) { return false } if (Penci_Bf_Vars.loginflag == 1) { current_author_saved_ids = JSON.parse(current_author_saved_ids) current_author_saved_ids.forEach(function (item) { item = parseInt(item) var data = { status: 1, action: 'penci_bl_follow_author', nonce: Penci_Bf_Vars.nonce, authorid: item, currentpostid: item, } jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { }).success(function () { Cookies.remove('penci-bf-author-ids') }) }) } } PENCI.imported_terms_data = function () { var current_terms_saved_ids = Cookies.get('penci-bf-terms-ids') if (!current_terms_saved_ids) { return false } if (Penci_Bf_Vars.loginflag == 1) { current_terms_saved_ids = JSON.parse(current_terms_saved_ids) current_terms_saved_ids.forEach(function (item) { item = parseInt(item) var data = { status: 1, action: 'penci_bl_follow_terms', nonce: Penci_Bf_Vars.nonce, termid: item, currentpostid: item, } jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { }).success(function () { Cookies.remove('penci-bf-terms-ids') }) }) } } PENCI.check_class = function () { $('.penci-bf-follow-post-wrapper').each(function (e) { var parent = $(this).closest('div') if (parent.find('.penci-rv-sm-show').length) { $(this).addClass('has-review') } $(this).show() }) $('.penci-rv-sm-show').each(function (e) { var parent = $(this).closest('div') if (parent.find('.penci-bf-follow-post-wrapper').length) { $(this).addClass('has-bookmark') } }) $('.penci-bf-follow-author-wrapper .penci-bf-guest-btn'). each(function (e) { var authorid = $(this).attr('data-author-id') var current_saved_ids = Cookies.get('penci-bf-author-ids') $(this).hide() $(this). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') $(this).attr('data-status', 1) $(this). find('.pencibf-following-text'). html($(this).attr('data-follow-text')) if (current_saved_ids) { current_saved_ids = JSON.parse(current_saved_ids) if (jQuery.inArray(authorid, current_saved_ids) !== -1) { $(this). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') $(this).attr('data-status', 0) $(this). find('.pencibf-following-text'). html($(this).attr('data-following-text')) } } $(this).show() }) $('.penci-bf-follow-post-wrapper .penci-bf-guest-btn'). each(function (e) { var postid = $(this).attr('data-postid') var current_saved_ids = Cookies.get('penci-bf-posts-ids') var follow_wrapper = $(this). parents('.penci-bf-follow-post-wrapper') $(this).hide() if (current_saved_ids) { current_saved_ids = JSON.parse(current_saved_ids) if (jQuery.inArray(postid, current_saved_ids) !== -1) { follow_wrapper.find('button'). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') $(this).attr('data-status', 0) follow_wrapper.find('.pencibf-following-text'). html(follow_wrapper.find('button'). attr( 'data-following-text')) } } $(this).show() }) $('.penci-bf-follow-term-wrapper .penci-bf-guest-btn'). each(function (e) { var postid = $(this).attr('data-term-id') var current_saved_ids = Cookies.get('penci-bf-terms-ids') var follow_wrapper = $(this). parents('.penci-bf-follow-term-wrapper') $(this).hide() if (current_saved_ids) { current_saved_ids = JSON.parse(current_saved_ids) if (jQuery.inArray(postid, current_saved_ids) !== -1) { follow_wrapper.find('button'). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') $(this).attr('data-status', 0) } } $(this).show() }) } function removeElement(array, elem) { var index = array.indexOf(elem) if (index > -1) { array.splice(index, 1) } } // Code used for follow post $(document).on( 'click', '.penci-bf-follow-post-wrapper .penci-bf-guest-btn', function (e) { e.preventDefault() var status = $(this).attr('data-status') var postid = $(this).attr('data-postid') var follow = $(this).attr('data-follow-text') var ptitle = $(this).attr('data-posttitle') var thumb = $(this).attr('data-thumb') var table_row = $(this).closest('.penci-bf-follow-post-row-body') var follow_wrapper = $(this). parents('.penci-bf-follow-post-wrapper') var message_popout //show loader follow_wrapper.addClass('loading') var current_saved_ids = Cookies.get('penci-bf-posts-ids') if (current_saved_ids) { current_saved_ids = JSON.parse(current_saved_ids) if (status === '1') { current_saved_ids.push(postid) message_popout = Penci_Bf_Vars.popup_success_mess } else { removeElement(current_saved_ids, postid) if (table_row) { table_row.remove() } follow_wrapper.find('.pencibf-following-text').html(follow) message_popout = Penci_Bf_Vars.popup_remove_mess } Cookies.set('penci-bf-posts-ids', JSON.stringify(current_saved_ids)) } else { var current_new_saved_ids = [] current_new_saved_ids.push(postid) message_popout = Penci_Bf_Vars.popup_success_mess Cookies.set( 'penci-bf-posts-ids', JSON.stringify(current_new_saved_ids), ) } if (status === '1') { $(this). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') $(this).attr('data-status', '0') $(document). find('.penci-bf-follow-post-wrapper'). each(function () { var all_follow_wrapper = $(this) var all_postid = $(this). find('.penci-bf-button'). attr('data-postid') if (all_postid === postid) { all_follow_wrapper.find('.penci-bf-button'). attr('data-status', '0') all_follow_wrapper.find('.penci-bf-button'). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') } }) } else { $(this). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') $(this).attr('data-status', '1') $(document). find('.penci-bf-follow-post-wrapper'). each(function () { var all_follow_wrapper = $(this) var all_postid = $(this). find('.penci-bf-button'). attr('data-postid') if (all_postid === postid) { all_follow_wrapper.find('.penci-bf-button'). attr('data-status', '1') all_follow_wrapper.find('.penci-bf-button'). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') } }) } setTimeout(function () { follow_wrapper.removeClass('loading') if (message_popout) { PENCI.notify(ptitle, message_popout, 'success', thumb) } }, 600) }, ) // Code used for follow post $(document).on( 'click', '.penci-bf-follow-post-wrapper .penci-bf-follow-btn:not(.penci-bf-guest-btn)', function () { var onlyfollowing = $(this). parents('.penci-bf-manage-follow-posts'). data('only-following') var status = $(this).attr('data-status') var postid = $(this).attr('data-postid') var currentpostid = $(this).attr('data-current-postid') var follow = $(this).attr('data-follow-text') var following = $(this).attr('data-following-text') var unfollow = $(this).attr('data-unfollow-text') var ptitle = $(this).attr('data-posttitle') var thumb = $(this).attr('data-thumb') var email = '' var follow_wrapper = $(this). closest('.penci-bf-follow-post-wrapper') // trigger follow button click event if (status === '1') { follow_wrapper.find('.pencibf-following-text').html(following) } else { follow_wrapper.find('.penci-bf-follow-btn'). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') } var data = { action: 'penci_bl_follow_post', nonce: Penci_Bf_Vars.nonce, status: status, postid: postid, currentpostid: currentpostid, email: email, onlyfollowing: onlyfollowing, } //show loader follow_wrapper.addClass('loading') jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { //hide loader follow_wrapper.removeClass('loading') if (response !== 'confirm') { //Check if numeric value if (status === '1') { follow_wrapper.find('.pencibf-following-text'). html(following) follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '0') follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') PENCI.notify( ptitle, Penci_Bf_Vars.popup_success_mess, 'success', thumb, ) $(document). find('.penci-bf-follow-btn:not(.penci-bf-guest-btn)'). each(function () { var all_follow_wrapper = $(this).closest( '.penci-bf-follow-post-wrapper', ) var all_postid = $(this).attr('data-postid') if (all_postid === postid) { all_follow_wrapper.find('.pencibf-following-text'). html(following) all_follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '0') all_follow_wrapper.find('.penci-bf-follow-btn'). removeClass( 'penci-bf-follow-button'). addClass( 'penci-bf-following-button') } }) } else { if (onlyfollowing === 1) { var newresponse = jQuery(response). filter('.penci-bf-manage-follow-posts'). html() jQuery('.penci-bf-manage-follow-posts').html(newresponse) } else { follow_wrapper.find('.pencibf-following-text').html(follow) follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '1') follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-following-button'). addClass('penci-bf-follow-button') $(document). find('.penci-bf-follow-btn:not(.penci-bf-guest-btn)'). each(function () { var all_follow_wrapper = $(this).closest( '.penci-bf-follow-post-wrapper', ) var all_postid = $(this).attr('data-postid') if (all_postid === postid) { all_follow_wrapper.find('.pencibf-following-text'). html(follow) all_follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '1') all_follow_wrapper.find('.penci-bf-follow-btn'). removeClass( 'penci-bf-following-button'). addClass('penci-bf-follow-button') } }) PENCI.notify( ptitle, Penci_Bf_Vars.popup_remove_mess, 'success', thumb, ) } } } // trigger follow button reload event to reload page from 3rd party plugin var follow_wrapper_obj = { this_object: follow_wrapper } follow_wrapper.trigger('penci-bf-follow-btn-reload', [ follow_wrapper_obj, ]) follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-unfollow-button'). addClass('penci-bf-follow-button') }) }, ) // Code used for follow author popup $(document).on( 'click', '.penci-bf-follow-author-wrapper .penci-bf-guest-btn', function (e) { e.preventDefault() var follow_wrapper = $(this). closest('.penci-bf-follow-author-wrapper') var status = $(this).attr('data-status') var authorid = $(this).attr('data-author-id') var follow = $(this).attr('data-follow-text') var following = $(this).attr('data-following-text') var thumb = $(this).attr('data-thumb') var current_saved_ids = Cookies.get('penci-bf-author-ids') var table_row = '' var message_popout = '' var ptitle = '' var follow = $(this).attr('data-follow-text') var following = $(this).attr('data-following-text') var unfollow = $(this).attr('data-unfollow-text') follow_wrapper.addClass('loading') if (current_saved_ids) { current_saved_ids = JSON.parse(current_saved_ids) if (status === '1') { follow_wrapper.find('.pencibf-following-text').html(following) current_saved_ids.push(authorid) ptitle = Penci_Bf_Vars.popup_success_author_title message_popout = Penci_Bf_Vars.popup_success_author_mess } else { follow_wrapper.find('.pencibf-following-text').html(follow) removeElement(current_saved_ids, authorid) if (table_row) { table_row.remove() } follow_wrapper.find('.pencibf-following-text').html(follow) ptitle = Penci_Bf_Vars.popup_remove_author_title message_popout = Penci_Bf_Vars.popup_remove_author_mess } Cookies.set('penci-bf-author-ids', JSON.stringify(current_saved_ids)) } else { var current_new_saved_ids = [] current_new_saved_ids.push(authorid) Cookies.set( 'penci-bf-author-ids', JSON.stringify(current_new_saved_ids), ) } if (status === '1') { $(this). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') $(this).attr('data-status', '0') ptitle = Penci_Bf_Vars.popup_success_author_title message_popout = Penci_Bf_Vars.popup_success_author_mess follow_wrapper.find('.pencibf-following-text').html(following) } else { $(this). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') ptitle = Penci_Bf_Vars.popup_remove_author_title message_popout = Penci_Bf_Vars.popup_remove_author_mess $(this).attr('data-status', '1') follow_wrapper.find('.pencibf-following-text').html(follow) } setTimeout(function () { follow_wrapper.removeClass('loading') if (message_popout) { PENCI.notify(ptitle, message_popout, 'success', thumb) } }, 600) }, ) // Code start for follow Author $(document).on( 'click', '.penci-bf-follow-author-wrapper .penci-bf-follow-btn', function (e) { e.preventDefault() var onlyfollowing = $(this). parents('.penci-bf-manage-follow-authors'). data('only-following') var status = $(this).attr('data-status') var thumb = $(this).attr('data-thumb') var authorid = $(this).attr('data-author-id') var currentpostid = $(this).attr('data-current-postid') var follow = $(this).attr('data-follow-text') var following = $(this).attr('data-following-text') var unfollow = $(this).attr('data-unfollow-text') var email = '' var message_popout = '' var ptitle = '' // trigger follow button click event var follow_button_obj = { popup: true, error: false, this_object: this, } $(this). trigger('penci-bf-follow-author-btn-click', [follow_button_obj]) var follow_wrapper = $(this). parents('.penci-bf-follow-author-wrapper') if (!follow_button_obj.popup) { return false } if (follow_button_obj.error) { return false } if (status === '1') { follow_wrapper.find('.pencibf-following-text').html(following) ptitle = Penci_Bf_Vars.popup_success_author_title message_popout = Penci_Bf_Vars.popup_success_author_mess } else { follow_wrapper.find('.penci-bf-follow-btn'). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') ptitle = Penci_Bf_Vars.popup_remove_author_title message_popout = Penci_Bf_Vars.popup_remove_author_mess } var disable_reload = follow_wrapper.find('.penci-bf-guest-btn'). hasClass('disable-reload') || follow_wrapper.parents('.widget').length > 0 var data = { action: 'penci_bl_follow_author', nonce: Penci_Bf_Vars.nonce, status: status, authorid: authorid, currentpostid: currentpostid, email: email, onlyfollowing: onlyfollowing, } //Check if need disable reload and message on same page if (disable_reload) { data.disable_reload = true } //show loader follow_wrapper.addClass('loading') jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { if (response != 'confirm') { if (Penci_Bf_Vars.loginflag == '1') { if (status == '1') { follow_wrapper.find('.pencibf-following-text'). html(following) follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '0') follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') ptitle = Penci_Bf_Vars.popup_success_author_title message_popout = Penci_Bf_Vars.popup_success_author_mess } else { ptitle = Penci_Bf_Vars.popup_remove_author_title message_popout = Penci_Bf_Vars.popup_remove_author_mess follow_wrapper.find('.pencibf-following-text').html(follow) follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '1') follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-following-button'). addClass('penci-bf-follow-button') } } } // trigger follow button reload event to reload page from 3rd party plugin var follow_wrapper_obj = { this_object: follow_wrapper } follow_wrapper.trigger('penci-bf-follow-author-btn-reload', [ follow_wrapper_obj, ]) follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-unfollow-button'). addClass('penci-bf-follow-button') follow_wrapper.removeClass('loading') if (message_popout) { PENCI.notify(ptitle, message_popout, 'success', thumb) } }) }, ) $(document).on('click', '#penci_bl_unsubscribe_submit', function () { $('.penci-bf-unsubscribe-email-error'). removeClass('message_stack_error'). html(''). hide() $('#penci_bl_unsubscribe_email').removeClass('penci_bl_email_error') $('.message_stack_success').hide() $('.message_stack_error').hide() var email = $.trim($('#penci_bl_unsubscribe_email').val()) if (email == '') { // Check email is empty $('.penci-bf-unsubscribe-email-error'). addClass('message_stack_error'). html(Penci_Bf_Vars.emailempty). show() $('#penci_bl_unsubscribe_email'). addClass('penci_bl_email_error'). show() return false } else { if (!penci_bl_valid_email(email)) { // Check email is valid or not $('.penci-bf-unsubscribe-email-error'). addClass('message_stack_error'). html(Penci_Bf_Vars.emailinvalid). show() $('#penci_bl_unsubscribe_email'). addClass('penci_bl_email_error'). show() return false } } }) $(document).on('click', '.penci-pf-ajx-loadmore', function (e) { e.preventDefault() var btn = $(this), nomore = btn.attr('data-nomore'), action_name = 'penci_bl_follow_post_next_page', wrapper = $('.penci-bf-manage-follow-posts .pcsl-inner'), post = true, paged = btn.attr('data-paged') if (btn.closest('.penci-bf-follows').hasClass('penci-bf-manage-follow-authors')) { action_name = 'penci_bl_follow_author_next_page'; wrapper = $('.penci-bf-follow-author-table tbody'); post = false; } else if (btn.closest('.penci-bf-follows').hasClass('penci-bf-manage-follow-terms')) { action_name = 'penci_bl_follow_term_next_page'; wrapper = $('.penci-bf-manage-follow-terms .pcsl-inner'); } var data = { action: action_name, nonce: Penci_Bf_Vars.nonce, paging: paged, } $.ajax({ type: 'POST', dataType: 'html', url: Penci_Bf_Vars.ajaxurl, data: data, beforeSend: function () { btn.addClass('loading-posts') }, success: function (response) { var newresponse if (post) { newresponse = $(response).find('.pcsl-inner').html() } else { newresponse = $(response). find('.penci-bf-follow-author-table tbody'). html() } btn.addClass('loading-posts') if ($(newresponse).length) { wrapper.append(newresponse) btn.attr('data-paged', parseInt(paged) + 1) $(document).trigger('penci_bf_check') } else { btn.html(nomore).addClass('disable') setTimeout(function () { btn.closest('.penci-bf-paging').remove() }, 1200) } btn.removeClass('loading-posts') }, }) }) //function for follow author ajax pagination function penci_bl_follow_author_ajax_pagination(pid) { var data = { action: 'penci_bl_follow_author_next_page', nonce: Penci_Bf_Vars.nonce, paging: pid, } jQuery('.penci-bf-follow-authors-loader').show() jQuery('.penci-bf-follow-authors-paging').hide() jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { var newresponse = jQuery(response). filter('.penci-bf-manage-follow-authors'). html() jQuery('.penci-bf-follow-authors-loader').hide() jQuery('.penci-bf-manage-follow-authors').html(newresponse) }) return false } // Code start for follow term $(document).on( 'click', '.penci-bf-follow-term-wrapper .penci-bf-follow-btn:not(.penci-bf-guest-btn)', function () { var onlyfollowing = $(this). parents('.penci-bf-manage-follow-terms'). data('only-following') var status = $(this).attr('data-status') var posttype = $(this).attr('data-posttype') var taxonomyslug = $(this).attr('data-taxonomy-slug') var termid = $(this).attr('data-term-id') var currentpostid = $(this).attr('data-current-postid') var thumb = $(this).attr('data-thumb') // trigger follow button click event var follow_button_obj = { popup: true, error: false, this_object: this } $(this). trigger('penci-bf-follow-term-btn-click', [follow_button_obj]) var follow_wrapper = $(this). parents('.penci-bf-follow-term-wrapper') if (!follow_button_obj.popup) { return false } if (follow_button_obj.error) { return false } if (status == '1') { } else { } follow_wrapper.addClass('loading') var disable_reload = follow_wrapper.find('.penci-bf-guest-btn'). hasClass('disable-reload') || follow_wrapper.parents('.widget').length > 0 var data = { action: 'penci_bl_follow_terms', status: status, posttype: posttype, taxonomyslug: taxonomyslug, termid: termid, currentpostid: currentpostid, onlyfollowing: onlyfollowing, } //Check if need disable reload and message on same page if (disable_reload) { data.disable_reload = true } jQuery.post(Penci_Bf_Vars.ajaxurl, data, function (response) { //Check if numeric value if (Penci_Bf_Vars.loginflag == '1') { if (status == '1') { follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '0') follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') } else { if (onlyfollowing == 1) { var newresponse = jQuery(response). filter('.penci-bf-manage-follow-terms'). html() jQuery('.penci-bf-manage-follow-terms').html(newresponse) } else { follow_wrapper.find('.penci-bf-follow-btn'). attr('data-status', '1') follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-following-button'). addClass('penci-bf-follow-button') } } } else { //make text of following and unfollowing to as it is "Follow" & "Unfollow" follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-following-button'). addClass('penci-bf-follow-button') if (disable_reload) { if (!$.isNumeric(response)) { //show confirm email message to user $('.message_stack_success, .message_stack_error').remove() $( '
        ' + response + '
        ', ).insertBefore(follow_wrapper) } else { //show confirm email message to user $('.message_stack_success, .message_stack_error').remove() $( '
        ' + Penci_Bf_Vars.follow_success + '
        ', ).insertBefore(follow_wrapper) } //Hide popup if exists if (follow_wrapper.find('.penci-bf-popup-close').length > 0) { follow_wrapper.find('.penci-bf-popup-close').click() } } else { var msgs = {} if (!$.isNumeric(response)) { //store confirm email message to cookie msgs = { termid: termid, msgs: response } } else { //store confirm email message to cookie msgs = { termid: termid, msgs: Penci_Bf_Vars.follow_success } } Cookies.set('penci-bf-follow-term-msgs', JSON.stringify(msgs)) window.location.reload() } } // trigger follow button reload event to reload page from 3rd party plugin var follow_wrapper_obj = { this_object: follow_wrapper } follow_wrapper.trigger('penci-bf-follow-term-btn-reload', [ follow_wrapper_obj, ]) follow_wrapper.find('.penci-bf-follow-btn'). removeClass('penci-bf-unfollow-button'). addClass('penci-bf-follow-button') follow_wrapper.removeClass('loading') }) }, ) $(document).on( 'click', '.penci-bf-follow-term-wrapper .penci-bf-guest-btn', function (e) { e.preventDefault() var follow_wrapper = $(this). closest('.penci-bf-follow-term-wrapper') var status = $(this).attr('data-status') var posttype = $(this).attr('data-posttype') var taxonomyslug = $(this).attr('data-taxonomy-slug') var termid = $(this).attr('data-term-id') var currentpostid = $(this).attr('data-current-postid') var current_saved_ids = Cookies.get('penci-bf-terms-ids') var ptitle = $(this).attr('data-posttitle') var message_popout var thumb = $(this).attr('data-thumb') var table_row = $(this).closest('.penci-bf-follow-term-row-body') var follow = $(this).attr('data-follow-text') var following = $(this).attr('data-following-text') var unfollow = $(this).attr('data-unfollow-text') follow_wrapper.addClass('loading') if (current_saved_ids) { current_saved_ids = JSON.parse(current_saved_ids) if (status === '1') { current_saved_ids.push(termid) ptitle = Penci_Bf_Vars.popup_success_term_title message_popout = Penci_Bf_Vars.popup_success_term_mess } else { removeElement(current_saved_ids, termid) if (table_row) { table_row.remove() } ptitle = Penci_Bf_Vars.popup_remove_term_title message_popout = Penci_Bf_Vars.popup_remove_term_mess } Cookies.set('penci-bf-terms-ids', JSON.stringify(current_saved_ids)) } else { var current_new_saved_ids = [] current_new_saved_ids.push(termid) Cookies.set( 'penci-bf-terms-ids', JSON.stringify(current_new_saved_ids), ) } if (status === '1') { $(this). removeClass('penci-bf-follow-button'). addClass('penci-bf-following-button') $(this).attr('data-status', '0') ptitle = Penci_Bf_Vars.popup_success_term_title message_popout = Penci_Bf_Vars.popup_success_term_mess } else { $(this). addClass('penci-bf-follow-button'). removeClass('penci-bf-following-button') ptitle = Penci_Bf_Vars.popup_remove_term_title message_popout = Penci_Bf_Vars.popup_remove_term_mess $(this).attr('data-status', '1') } setTimeout(function () { follow_wrapper.removeClass('loading') if (message_popout) { PENCI.notify(ptitle, message_popout, 'success', thumb) } }, 600) }, ) // validation of email function penci_bl_valid_email(emailStr) { var checkTLD = 1 var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/ var emailPat = /(?:((?:[\w-]+(?:\.[\w-]+)*)@(?:(?:[\w-]+\.)*\w[\w-]{0,66})\.(?:[a-z]{2,6}(?:\.[a-z]{2})?));*)/g var specialChars = '\\(\\)><@,;:\\\\\\"\\.\\[\\]' var validChars = '[^\\s' + specialChars + ']' var quotedUser = '("[^"]*")' var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/ var atom = validChars + '+' var word = '(' + atom + '|' + quotedUser + ')' var userPat = new RegExp('^' + word + '(\\.' + word + ')*$') var domainPat = new RegExp('^' + atom + '(\\.' + atom + ')*$') var pattern = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/ var matchArray = emailStr.match(emailPat) if (matchArray) { return true } if (matchArray == null) { /* Email address seems incorrect (check @ and .'s) */ return false } var user = matchArray[1] var domain = matchArray[2] /* Start by checking that only basic ASCII characters are in the strings (0-127). */ for (i = 0; i < user.length; i++) { if (user.charCodeAt(i) > 127) { /* Ths username contains invalid characters in e-mail address. */ return false } } for (i = 0; i < domain.length; i++) { if (domain.charCodeAt(i) > 127) { /* Ths domain name contains invalid characters in e-mail address. */ return false } } if (user.match(userPat) == null) { /* The username doesn't seem to be valid in e-mail address. */ return false } var IPArray = domain.match(ipDomainPat) if (IPArray != null) { for (var i = 1; i <= 4; i++) { if (IPArray[i] > 255) { /* Destination IP address is invalid! */ return false } } return true } var atomPat = new RegExp('^' + atom + '$') var domArr = domain.split('.') var len = domArr.length for (i = 0; i < len; i++) { if (domArr[i].search(atomPat) == -1) { /* The domain name does not seem to be valid in e-mail address. */ return false } } if ( checkTLD && domArr[domArr.length - 1].length != 2 && domArr[domArr.length - 1].search(knownDomsPat) == -1 ) { /* The address must end in a well-known domain or two letter country. */ return false } if (len < 2) { /* This e-mail address is missing a hostname! */ return false } return true } PENCI.check_class() PENCI.imported_posts_data() PENCI.imported_authors_data() PENCI.imported_terms_data() $(document).on('penci_bf_check', function () { PENCI.check_class() }) }) jQuery(window).on('elementor/frontend/init', function () { if (window.elementorFrontend) { elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-custom-sliders.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-big-grid.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-small-list.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-popular-posts.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-featured-cat.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-latest-posts.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-recent-posts.default', function ($scope) { PENCI.check_class() }, ) elementorFrontend.hooks.addAction( 'frontend/element_ready/penci-featured-sliders.default', function ($scope) { PENCI.check_class() }, ) } }) inc/js/js.cookie.min.js000064400000003025147600022000010724 0ustar00;;;/*! js-cookie v3.0.0-rc.0 | MIT Download URL: https://github.com/js-cookie/js-cookie */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var r=e.Cookies,n=e.Cookies=t();n.noConflict=function(){return e.Cookies=r,n}}())}(this,function(){"use strict";function e(e){for(var t=1;t
        ID; $perpage = '10'; //model class $model = $penci_bl_model; // creating new array for all author's followers count $argscount = array( 'authorid' => $authorid, 'penci_bl_status' => 'subscribe', 'count' => '1' ); //Exclude Guest user if( isset( $exclude_guest ) && $exclude_guest ) { $argscount['author__not_in'] = array(-0); } //getting all sold author's followers count $datacount = $model->penci_bl_get_follow_author_users_data( $argscount ); // start paging $paging = new Penci_Bf_Pagination_Public( 'penci_bl_author_followers_ajax_pagination' ); $paging->items( $datacount ); $paging->limit( $perpage ); // limit entries per page if( isset( $_POST['paging'] ) ) { $paging->currentPage( $_POST['paging'] ); // gets and validates the current page } $paging->calculate(); // calculates what to show $paging->parameterName( 'paging' ); // setting the limit to start $limit_start = ( $paging->page - 1 ) * $paging->limit; if(isset($_POST['paging'])) { //ajax call pagination $argsdata = array( 'authorid' => $authorid, 'penci_bl_status' => 'subscribe', 'posts_per_page' => $perpage, 'paged' => $_POST['paging'] ); } else { //on page load $argsdata = array( 'authorid' => $authorid, 'penci_bl_status' => 'subscribe', 'posts_per_page' => $perpage, 'paged' => '1' ); } //Exclde Guest user if( isset( $exclude_guest ) && $exclude_guest ) { $argsdata['author__not_in'] = array(-0); } $followers = $model->penci_bl_get_follow_author_users_data( $argsdata ); if( !empty( $followers ) ) { //check author's followers are not empty //do action add something before author's followers table do_action( 'penci_bl_author_followers_table_before', $followers ); // start displaying the paging if needed //do action add author's followers listing table do_action( 'penci_bl_author_followers_table', $followers, $paging ); //do action add something after author's followers table after do_action( 'penci_bl_author_followers_table_after', $followers ); } else { //if user doesnt have any followers ?>
        inc/templates/author-followers/author-followers-listing.php000064400000010302147600022000020306 0ustar00

        data->user_email ) ? $author_data->data->user_email : ''; $author_name = isset( $author_data->data->display_name ) ? $author_data->data->display_name : ''; $disp_author_name = apply_filters( 'penci_bl_change_author_name', $model->penci_bl_short_content( $author_name ), $authorid ); } else { $author_email = get_post_meta( $follower['ID'], $prefix . 'author_user_email', true ); $disp_author_name = $author_email . esc_html__( ' ( guest )', 'penci-bookmark-follow' ); } // Get Follow Date $followdate = $model->penci_bl_get_date_format( $follower['post_date'] ); ?>
        Profile Photo
        getOutput(); ?>
        inc/templates/emailtemplate/htmlemail.php000064400000002250147600022000014611 0ustar00
         
         
        inc/templates/follow-author/guest.php000064400000002150147600022000013742 0ustar00 inc/templates/follow-author/follow-author.php000064400000001016147600022000015415 0ustar00
        inc/templates/follow-author/follow-count-box.php000064400000000355147600022000016036 0ustar00
        inc/templates/follow-author/user.php000064400000002161147600022000013573 0ustar00 inc/templates/follow-post/guest.php000064400000002317147600022000013432 0ustar00 inc/templates/follow-post/follow-count-box.php000064400000000761147600022000015522 0ustar00
        inc/templates/follow-post/user.php000064400000002717147600022000013265 0ustar00 ' . $follow_label . ' ', $follow_class, $follow_status, $post_id, $current_post_id, $follow_text, $following_text, $unfollow_text, $follow_label ); ?>
        inc/templates/follow-term/guest.php000064400000001720147600022000013411 0ustar00 inc/templates/follow-term/user.php000064400000001515147600022000013242 0ustar00 inc/templates/subscribe-manage/follow-authors-listing/follow-authors-listing.php000064400000013742147600022000024321 0ustar00 true ), 'objects' ); $followtext = $penci_bl_options['authors_follow_buttons']['follow']; $followingtext = $penci_bl_options['authors_follow_buttons']['following']; $unfollowtext = $penci_bl_options['authors_follow_buttons']['unfollow']; $followtext = str_replace( '{author_name}', '', $followtext ); $followingtext = str_replace( '{author_name}', '', $followingtext ); $unfollowtext = str_replace( '{author_name}', '', $unfollowtext ); $class = is_user_logged_in() ? 'pcbf-logged-in' : 'pcbf-guest'; ?>
        ' . pencibf_get_text( 'actions' ) . ''; } //do action to add header title of orders list after do_action( 'penci_bl_follow_author_header_after' ); ?> data->display_name ) ? $author_data->data->display_name : ''; $author_email = isset( $author_data->data->user_email ) ? $author_data->data->user_email : ''; // Get Follow Date if ( is_user_logged_in() ) { $followdate = $model->penci_bl_get_date_format( $followauthor['post_date'] ); } else { $followdate = false; } if ( empty( $author_data ) && empty( $author_name ) ) { $author_name = pencibf_get_text( 'deletedauthor' ); } ?> ' . pencibf_get_text( 'actions' ) . ''; } //do action to add row in footer after do_action( 'penci_bl_follow_author_footer_after' ); ?>
        Profile Photo penci_bl_short_content( $author_name ), $authorid ); ?> $authorid, 'current_post_id' => $id_check, 'follow_message' => '', 'follow_buttons' => array( 'follow' => trim( $followtext ), 'following' => trim( $followingtext ), 'unfollow' => trim( $unfollowtext ), ), ); do_action( 'penci_bl_follow_author', $args ); ?>
        is_render() ): ?>
        getOutput( 'author' ); ?>
        inc/templates/subscribe-manage/follow-posts-listing/follow-posts-listing.php000064400000026425147600022000023471 0ustar00 true ), 'objects' ); if ( ! function_exists( 'penci_get_setting' ) ) { return false; } ?>
        post_title ) ? $posts->post_title : pencibf_get_text( 'notitle' ); } else { $post_name = pencibf_get_text( 'deletedpost' ); } // Get Follow Post Type $posttype = ! empty( $posts->post_type ) ? $posts->post_type : ''; // Get Follow Post Type Name $post_type_name = ! empty( $posttype ) && isset( $post_types[ $posttype ]->labels->singular_name ) ? $post_types[ $posttype ]->labels->singular_name : ''; // Get Follow Date $followdate = $model->penci_bl_get_date_format( $followpost['post_date'] ); if ( ! empty( $posts->ID ) ) { ?>
        $post_parent, 'current_post_id' => $followpost['ID'], 'follow_message' => '', 'follow_pos_class' => 'small', ); do_action( 'penci_bl_follow_post', $args ); ?>
        ID ) ) || get_theme_mod( 'pencibf_show_views' ) || get_theme_mod( 'pencibf_show_author', true ) || get_theme_mod( 'pencibf_show_postdate', true ) || get_theme_mod( 'pencibf_show_comments' ) ) { ?>
        post_author ); ?> ID, '' ); ?> ID ); ?> ID ) . ' ' . penci_get_setting( 'penci_trans_countviews' ); ?> ID ) ) : ?> ID ); ?>
        post_title ) ? $posts->post_title : esc_html__( '(no title)', 'penci-bookmark-follow' ); } else { $post_name = pencibf_get_text( 'deletedpost' ); } // Get Follow Post Type $posttype = ! empty( $posts->post_type ) ? $posts->post_type : ''; // Get Follow Post Type Name $post_type_name = ! empty( $posttype ) && isset( $post_types[ $posttype ]->labels->singular_name ) ? $post_types[ $posttype ]->labels->singular_name : ''; // Get Follow Date $followdate = $model->penci_bl_get_date_format( $followpost['post_date'] ); ?>
        $posts->ID, 'current_post_id' => $followpost['ID'], 'follow_message' => '', 'follow_pos_class' => 'small', ); do_action( 'penci_bl_follow_post', $args ); ?>
        ID ) ) || get_theme_mod( 'pencibf_show_views' ) || get_theme_mod( 'pencibf_show_author', true ) || get_theme_mod( 'pencibf_show_postdate', true ) || get_theme_mod( 'pencibf_show_comments' ) ) { ?>
        post_author ); ?> ID, '' ); ?> ID ); ?> ID ) . ' ' . penci_get_setting( 'penci_trans_countviews' ); ?> ID ) ): ?> ID ); ?>
        is_render() ): ?>
        getOutput(); ?>
        inc/templates/subscribe-manage/follow-terms-listing/follow-terms-listing.php000064400000011613147600022000023426 0ustar00 true ), 'objects' ); ?>
        labels->singular_name ) ? $post_types[ $posttype ]->labels->singular_name : ''; // Get Follow Taxonomy $taxonomy = get_post_meta( $followterm['ID'], $prefix . 'taxonomy_slug', true ); if ( ! is_user_logged_in() ) { $taxonomy = get_term( $termid )->taxonomy; } // Get Follow Taxonomy Name $taxonomy_data = get_taxonomy( $taxonomy ); $taxonomy_name = ! empty( $taxonomy_data ) && isset( $taxonomy_data->labels->singular_name ) ? $taxonomy_data->labels->singular_name : ''; // Get Follow Term Name $term_data = get_term_by( 'id', $termid, $taxonomy ); if ( ! empty( $term_data ) ) { $term_name = isset( $term_data->name ) ? $term_data->name : ''; if ( is_user_logged_in() ) { // Get Follow Date $followdate = $model->penci_bl_get_date_format( $followterm['post_date'] ); } ?>
        $posttype, 'follow_taxonomy' => $taxonomy, 'follow_term_id' => $termid, 'current_post_id' => $followterm['ID'], 'follow_message' => '', 'html_class' => 'pcbf-size-small', ); do_action( 'penci_bl_follow_term', $args ); ?>
        count; $text_prefix = is_numeric( $count ) && $count == 1 ? penci_get_setting( 'penci_trans_post' ) : penci_get_setting( 'penci_trans_posts' ); echo $count . ' ' . $text_prefix; ?>
        is_render() ): ?>
        getOutput( 'term' ); ?>
        ID; $disabled_actions = isset( $disabled_actions ) ? $disabled_actions : ( empty( $current_user->ID ) ? true : false ); // creating new array for all follow authors count $argscount = array( 'author' => $author_id, 'count' => '1' ); //Check if argument for get only following if ( isset( $only_following ) && $only_following == '1' ) { $argscount['penci_bl_status'] = 'subscribe'; } //getting all sold follow authors count $datacount = $model->penci_bl_get_follow_author_users_data( $argscount ); // start paging $paging = new Penci_Bf_Pagination_Public( 'penci_bl_follow_author_ajax_pagination' ); $paging->items( $datacount ); $paging->limit( $perpage ); // limit entries per page if ( isset( $_POST['paging'] ) ) { $paging->currentPage( $_POST['paging'] ); // gets and validates the current page } $paging->calculate(); // calculates what to show $paging->parameterName( 'paging' ); // setting the limit to start $limit_start = ( $paging->page - 1 ) * $paging->limit; if ( isset( $_POST['paging'] ) ) { //ajax call pagination $argsdata = array( 'author' => $author_id, 'posts_per_page' => $perpage, 'paged' => $_POST['paging'] ); } else { //on page load $argsdata = array( 'author' => $author_id, 'posts_per_page' => $perpage, 'paged' => '1' ); } //Check if argument for get only following $argsdata['penci_bl_status'] = 'subscribe'; $followauthors = $model->penci_bl_get_follow_author_users_data( $argsdata ); } elseif ( isset( $_COOKIE['penci-bf-author-ids'] ) && $_COOKIE['penci-bf-author-ids'] ) { $paging = false; $disabled_actions = false; $paging = false; $followauthors = explode( ',', str_replace( [ '\"', '[', ']' ], '', $_COOKIE['penci-bf-author-ids'] ) ); } echo '

        ' . pencibf_get_text( 'authorIfollow' ) . '

        '; $followauthors = is_array( $followauthors ) ? array_filter( $followauthors ) : null; if ( ! empty( $followauthors ) ) { //check follow authors are not empty //do action add something before follow authors table do_action( 'penci_bl_follow_authors_table_before', $followauthors, $disabled_actions ); // start displaying the paging if needed //do action add follow authors listing table do_action( 'penci_bl_follow_authors_table', $followauthors, $paging, $disabled_actions ); //do action add something after follow authors table after do_action( 'penci_bl_follow_authors_table_after', $followauthors, $disabled_actions ); } else { //if user is not follow any authors ?>
        inc/templates/subscribe-manage/follow-terms.php000064400000005671147600022000015665 0ustar00
        $current_user->ID, 'count' => '1' ); //Check if argument for get only following $argscount['penci_bl_status'] = 'subscribe'; //getting all sold follow terms count $datacount = $model->penci_bl_get_follow_term_users_data( $argscount ); // start paging $paging = new Penci_Bf_Pagination_Public( 'penci_bl_follow_term_ajax_pagination' ); $paging->items( $datacount ); $paging->limit( $perpage ); // limit entries per page if ( isset( $_POST['paging'] ) ) { $paging->currentPage( $_POST['paging'] ); // gets and validates the current page } $paging->calculate(); // calculates what to show $paging->parameterName( 'paging' ); // setting the limit to start $limit_start = ( $paging->page - 1 ) * $paging->limit; if ( isset( $_POST['paging'] ) ) { //ajax call pagination $argsdata = array( 'author' => $current_user->ID, 'posts_per_page' => $perpage, 'paged' => $_POST['paging'] ); } else { //on page load $argsdata = array( 'author' => $current_user->ID, 'posts_per_page' => $perpage, 'paged' => '1' ); } //Check if argument for get only following $argsdata['penci_bl_status'] = 'subscribe'; $followterms = $model->penci_bl_get_follow_term_users_data( $argsdata ); } elseif ( isset( $_COOKIE['penci-bf-terms-ids'] ) && $_COOKIE['penci-bf-terms-ids'] ) { $argsdata = []; $paging = false; $disabled_actions = false; $followterms = explode( ',', str_replace( [ '\"', '[', ']' ], '', $_COOKIE['penci-bf-terms-ids'] ) ); } echo '

        ' . pencibf_get_text( 'catIfollow' ) . '

        '; if ( ! empty( $followterms ) ) { //check follow terms are not empty //do action add something before follow terms table do_action( 'penci_bl_follow_terms_table_before', $followterms ); // start displaying the paging if needed //do action add follow terms listing table do_action( 'penci_bl_follow_terms_table', $followterms, $paging ); //do action add something after follow terms table after do_action( 'penci_bl_follow_terms_table_after', $followterms ); } else { //if user is not follow any terms ?>
        inc/templates/subscribe-manage/follow-posts.php000064400000006223147600022000015675 0ustar00
        $current_user->ID, 'count' => '1' ); $argscount['penci_bl_status'] = 'subscribe'; //getting all sold follow posts count $datacount = $model->penci_bl_get_follow_post_users_data( $argscount ); // start paging $paging = new Penci_Bf_Pagination_Public( 'penci_bl_follow_post_ajax_pagination' ); $paging->items( $datacount ); $paging->limit( $perpage ); // limit entries per page if ( isset( $_POST['paging'] ) ) { $paging->currentPage( $_POST['paging'] ); // gets and validates the current page } $paging->calculate(); // calculates what to show $paging->parameterName( 'paging' ); // setting the limit to start $limit_start = ( $paging->page - 1 ) * $paging->limit; if ( isset( $_POST['paging'] ) && $_POST['paging'] ) { //ajax call pagination $argsdata = array( 'author' => $current_user->ID, 'posts_per_page' => $perpage, 'paged' => $_POST['paging'], ); } else { //on page load $argsdata = array( 'author' => $current_user->ID, 'posts_per_page' => $perpage, 'paged' => 1, ); } //Check if argument for get only following $argsdata['penci_bl_status'] = 'subscribe'; } elseif ( isset( $_COOKIE['penci-bf-posts-ids'] ) && $_COOKIE['penci-bf-posts-ids'] ) { $argsdata = []; $paging = false; $post_ids = explode( ',', str_replace( [ '\"', '[', ']' ], '', $_COOKIE['penci-bf-posts-ids'] ) ); $argsdata['post__in'] = $post_ids; } if ( $argsdata ) { $followposts = $model->penci_bl_get_follow_post_users_data( $argsdata ); } echo '

        ' . pencibf_get_text( 'postIfollow' ) . '

        '; if ( ! empty( $followposts ) ) { //check follow posts are not empty //do action add something before follow posts table do_action( 'penci_bl_follow_posts_table_before', $followposts ); // start displaying the paging if needed //do action add follow posts listing table do_action( 'penci_bl_follow_posts_table', $followposts, $paging ); //do action add something after follow posts table after do_action( 'penci_bl_follow_posts_table_after', $followposts ); } else { //if user is not follow any posts ?>
        inc/templates/unsubscribe/content.php000064400000002623147600022000014014 0ustar00size( 'penci-bf-unsubscribe' ) > 0 ) { //make success message echo $penci_bl_message->output( 'penci-bf-unsubscribe' ); } ?>
        inc/templates/subscribe-manage.php000064400000003150147600022000013221 0ustar00

        ID ); ?>

        ID );?>

        model = $penci_bl_model; } /** * Follow Post Shortcode * * Handles to replace the shortcode follow post * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_shortcode( $atts, $content ) { global $post, $penci_bl_options; extract( shortcode_atts( array( 'id' => ! empty( $post->ID ) ? $post->ID : '', 'disablecount' => 'false', 'followerscountmsg' => '', 'followtext' => '', 'followingtext' => '', 'unfollowtext' => '', 'disable_reload' => false, ), $atts ) ); if ( false === get_post_status( $id ) ) { $args = array(); $content = esc_html__( "Please enter post id.", "fmbpbjs" ); return apply_filters( 'penci_bl_follow_shortcode_content', $content, $args ); } $html = $followcountmsg = ''; if ( $disablecount != 'true' ) { // Check not disable follow count // follow counter message $followcountmsg = ! empty( $followerscountmsg ) ? $followerscountmsg : $penci_bl_options['follow_message']; } $args = array( 'post_id' => $id, 'follow_message' => $followcountmsg, 'follow_buttons' => array( 'follow' => $followtext, 'following' => $followingtext, 'unfollow' => $unfollowtext, ), 'shortcode' => true, 'disable_reload' => $disable_reload, ); ob_start(); do_action( 'penci_bl_follow_post', $args ); $html .= ob_get_clean(); $content = $content . $html; return apply_filters( 'penci_bl_follow_shortcode_content', $content, $args ); } /** * Follow Term Shortcode * * Handles to replace the shortcode follow author * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_author_shortcode( $atts, $content ) { global $post, $penci_bl_options; $post_author = isset( $post->post_author ) ? $post->post_author : ''; //Check when post author empty, consider as author page if ( empty( $post_author ) ) { //Get author id from author page query string $author = ( get_query_var( 'author_name' ) ) ? get_user_by( 'slug', get_query_var( 'author_name' ) ) : get_userdata( get_query_var( 'author' ) ); $post_author = isset( $author->ID ) ? $author->ID : ''; } extract( shortcode_atts( array( 'author_id' => $post_author, 'disablecount' => 'false', 'followerscountmsg' => '', 'followtext' => '', 'followingtext' => '', 'unfollowtext' => '', 'disable_reload' => false, ), $atts ) ); $html = $followcountmsg = ''; if ( ! empty( $author_id ) ) { // Check author id not empty if ( $disablecount != 'true' ) { // Check not disable follow count // follow counter message $followcountmsg = ! empty( $followerscountmsg ) ? $followerscountmsg : $penci_bl_options['authors_follow_message']; } if ( empty( $followtext ) ) { $followtext = $penci_bl_options['authors_follow_buttons']["follow"]; } if ( empty( $followingtext ) ) { $followingtext = $penci_bl_options['authors_follow_buttons']["following"]; } if ( empty( $unfollowtext ) ) { $unfollowtext = $penci_bl_options['authors_follow_buttons']["unfollow"]; } $args = array( 'author_id' => $author_id, 'follow_message' => $followcountmsg, 'follow_buttons' => array( 'follow' => $followtext, 'following' => $followingtext, 'unfollow' => $unfollowtext, ), 'disable_reload' => $disable_reload, ); ob_start(); do_action( 'penci_bl_follow_author', $args ); $html .= ob_get_clean(); } $content = $content . $html; return apply_filters( 'penci_bl_follow_author_shortcode_content', $content, $args ); } /** * Manage Follow Posts * * Handles to replace the shortcode for manage follow posts * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_post_list_shortcode( $atts, $content ) { ob_start(); do_action( 'penci_bl_manage_follow_posts', $atts ); $content .= ob_get_clean(); return apply_filters( 'penci_bl_follow_post_list_shortcode_content', $content, $atts ); } /** * Manage Follow Authors * * Handles to replace the shortcode for manage follow author * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_author_list_shortcode( $atts, $content ) { ob_start(); do_action( 'penci_bl_manage_follow_authors', $atts ); $content .= ob_get_clean(); return apply_filters( 'penci_bl_follow_author_list_shortcode_content', $content, $atts ); } /** * User's Followers * * Handles to replace the shortcode for User's Followers * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_follow_follower_list_shortcode( $atts, $content ) { ob_start(); do_action( 'penci_bl_author_followers', $atts ); $content .= ob_get_clean(); return apply_filters( 'penci_bl_follow_follower_list_shortcode_content', $content, $atts ); } /** * Manage Unsubscribe page * * Handles to replace the shortcode for manage follow author * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_unsubscribe_shortcode( $atts, $content ) { ob_start(); do_action( 'penci_bl_unsubscribe_content' ); $content .= ob_get_clean(); return apply_filters( 'penci_bl_unsubscribe_shortcode_content', $content, $atts ); } /** * Manage Follow Terms * */ public function penci_bl_follow_term_list_shortcode( $atts, $content ) { ob_start(); do_action( 'penci_bl_manage_follow_terms', $atts ); $content .= ob_get_clean(); return apply_filters( 'penci_bl_follow_term_list_shortcode_content', $content, $atts ); } /** * Adding Hooks * * Adding hooks for calling shortcodes. * * @package Penci Bookmark Follow * @since 1.0.0 */ public function add_hooks() { //add filter to use shortcode for text widget add_filter( 'widget_text', 'do_shortcode' ); //change the content using shortcode add_shortcode( 'pencibf_follow_me', array( $this, 'penci_bl_follow_shortcode' ) ); //change the content using shortcode add_shortcode( 'pencibf_follow_author_me', array( $this, 'penci_bl_follow_author_shortcode' ) ); //change the content using shortcode add_shortcode( 'pencibf_follow_post_list', array( $this, 'penci_bl_follow_post_list_shortcode' ) ); //change the content using shortcode add_shortcode( 'pencibf_follow_author_list', array( $this, 'penci_bl_follow_author_list_shortcode' ) ); //change the content using shortcode add_shortcode( 'pencibf_follow_follower_list', array( $this, 'penci_bl_follow_follower_list_shortcode' ) ); //change the content using shortcode add_shortcode( 'pencibf_unsubscribe', array( $this, 'penci_bl_unsubscribe_shortcode' ) ); //change the content using shortcode add_shortcode( 'pencibf_follow_term_list', array( $this, 'penci_bl_follow_term_list_shortcode' ) ); } }inc/penci-bf-misc-functions.php000064400000015342147600022000012444 0ustar00 'publish', 'post_parent' => $post_id, 'posts_per_page' => '-1', 'post_type' => PENCI_BL_POST_TYPE, 'meta_key' => $prefix . 'follow_status', 'meta_value' => '1' ); //get data for post followed by users $data = get_posts( $args ); //get followers count $counts = count( $data ); //return followers count return apply_filters( 'penci_bl_get_post_followers_count', $counts, $post_id ); } /** * Get Taxonomy Terms Followers Count * * Handles to get followers count of term by term id * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_get_term_followers_count( $term_id ) { //check if term id empty then return zero if ( empty( $term_id ) ) { return 0; } $prefix = PENCI_BL_META_PREFIX; //arguments to collect followers data by term $args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_parent' => $term_id, 'posts_per_page' => '-1', 'meta_key' => $prefix . 'follow_status', 'meta_value' => '1' ); //get data for term followed by users $data = get_posts( $args ); //get followers count $counts = count( $data ); return apply_filters( 'penci_bl_get_term_followers_count', $counts, $term_id ); } /** * Get Authors Followers Count * * Handles to get followers count of author by author id * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_get_author_followers_count( $author_id ) { //check if author id empty then return zero if ( empty( $author_id ) ) { return 0; } $prefix = PENCI_BL_META_PREFIX; //arguments to collect followers data by author $args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_parent' => $author_id, 'posts_per_page' => '-1', 'meta_key' => $prefix . 'follow_status', 'meta_value' => '1' ); //get data for author followed by users $data = get_posts( $args ); //get followers count $counts = count( $data ); return apply_filters( 'penci_bl_get_author_followers_count', $counts, $author_id ); } /** * Get Unsubscribe message * * Handles to get get unsubscibe message and return * unsubscibe message html * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_get_unsubscribe_message() { global $penci_bl_options; $unsubscribe_message = ''; // initialize its with blank // Check enable unsubscribe url & unsubscribe page is exist & unsubscribe message is not empty if ( isset( $penci_bl_options['enable_unsubscribe_url'] ) && $penci_bl_options['enable_unsubscribe_url'] == '1' && isset( $penci_bl_options['unsubscribe_page'] ) && ! empty( $penci_bl_options['unsubscribe_page'] ) && isset( $penci_bl_options['unsubscribe_message'] ) && ! empty( $penci_bl_options['unsubscribe_message'] ) ) { // get unsubscibe message $unsubscribe_message = $penci_bl_options['unsubscribe_message']; // get url of unsubscribe page $url = get_permalink( $penci_bl_options['unsubscribe_page'] ); // make unsubscibe url $unsubscribe_url = '' . esc_html__( 'Unsubscribe', 'penci-bookmark-follow' ) . ''; // replace {unsubscribe url} with unsubscibe message $unsubscribe_message = str_replace( '{unsubscribe_url}', $unsubscribe_url, $unsubscribe_message ); } return apply_filters( 'penci_bl_get_unsubscribe_message', $unsubscribe_message ); } /** * Get Unsubscribe link message directly * * Handles to get unsubscibe message with link and return * unsubscibe message link html * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_get_unsubscribe_link_message( $follow_user_email, $unsubscribedata = array() ) { global $penci_bl_options, $post; $unsubscribe_message = ''; // initialize its with blank // get unsubscibe message $unsubscribe_message = $penci_bl_options['unsubscribe_message']; $is_individual_unsubscribe = ! empty( $penci_bl_options['is_individual_unsubscribe'] ) ? $penci_bl_options['is_individual_unsubscribe'] : 0; // Get option whether to send unsubcscribe mail for single post, term, author or multiple // get url of unsubscribe page $unsubscribe_page_id = isset( $penci_bl_options['unsubscribe_page'] ) && ! empty( $penci_bl_options['unsubscribe_page'] ) ? $penci_bl_options['unsubscribe_page'] : $post->ID; $url = get_permalink( $unsubscribe_page_id ); $url = add_query_arg( array( 'penci_bl_action' => base64_encode( 'unsubscribe' ), 'penci_bl_email' => base64_encode( rawurlencode( $follow_user_email ) ) ), $url ); // add query param to unsubscribe url for get what to unsubscibe and for what id if ( ! empty( $unsubscribedata ) && ! empty( $is_individual_unsubscribe ) && $is_individual_unsubscribe == 1 ) { $url = add_query_arg( array( 'type' => base64_encode( $unsubscribedata['type'] ), 'id' => $unsubscribedata['id'] ), $url ); } // make unsubscibe url $unsubscribe_url = '' . esc_html__( 'Unsubscribe', 'penci-bookmark-follow' ) . ''; // replace {unsubscribe url} with unsubscibe message $unsubscribe_message = str_replace( '{unsubscribe_url}', $unsubscribe_url, $unsubscribe_message ); return apply_filters( 'penci_bl_get_unsubscribe_message', $unsubscribe_message ); } /** * unsubscribe user from specific post, term or author * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_unsubscribe_user( $unsub_type, $unsub_id ) { global $penci_bl_options, $post; $prefix = PENCI_BL_META_PREFIX; // check from what to unsubscribe switch ( $unsub_type ) { case 'post': update_post_meta( $unsub_id, $prefix . 'follow_status', '0' ); break; case 'term': update_post_meta( $unsub_id, $prefix . 'follow_status', '0' ); break; case 'author': update_post_meta( $unsub_id, $prefix . 'follow_status', '0' ); break; default: break; } $unsubscribe_page_id = isset( $penci_bl_options['unsubscribe_page'] ) && ! empty( $penci_bl_options['unsubscribe_page'] ) ? $penci_bl_options['unsubscribe_page'] : $post->ID; $url = get_permalink( $unsubscribe_page_id ); wp_redirect( $url ); exit; }inc/class-penci-bf-public.php000064400000162757147600022000012101 0ustar00model = $penci_bl_model; $this->message = $penci_bl_message; $this->message->init(); } /** * Process Functionality Of Post Comment * * Handles to process functionality when * comment post * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_comment_insert( $comment_ID, $comment_data ) { global $wpdb, $user_ID, $user_email, $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $follow_status = '1'; // get commented post id $comment_post_ID = $comment_data->comment_post_ID; //Get post type $post_type = get_post_type( $comment_post_ID ); //Get all public post types $custom_post_types = get_post_types( array( 'public' => true ) ); //If post type public truw if ( ! array_key_exists( $post_type, $custom_post_types ) ) { return; } // if user not logged in, then take input email as user_email if ( ! is_user_logged_in() ) { $user_email = $comment_data->comment_author_email; // store this email to session for later use set_transient( 'penci_bl_post_email', $user_email ); } // If not set or enable auto follow when comment added if ( ! isset( $penci_bl_options['disable_auto_follow_add_comment'] ) ) { // args to check if this user_email is subscribed on this commented post $args = array( 'post_status' => 'publish', 'post_parent' => $comment_post_ID, 'posts_per_page' => '-1', 'post_type' => PENCI_BL_POST_TYPE, 'meta_key' => $prefix . 'post_user_email', 'meta_value' => $user_email ); $data = get_posts( $args ); // if not then create new post with subscribe this user email if ( count( $data ) <= 0 ) { $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_POST_TYPE, 'post_parent' => $comment_post_ID ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update post user email update_post_meta( $followed_post_id, $prefix . 'post_user_email', $user_email ); } } else { // if get data then update its meta fields update_post_meta( $data[0]->ID, $prefix . 'follow_status', $follow_status ); // update post user email update_post_meta( $data[0]->ID, $prefix . 'post_user_email', $user_email ); } } if ( isset( $comment_data->comment_approved ) && $comment_data->comment_approved == '1' ) { // if status is approved, then send email and create log $this->model->penci_bl_create_comments( $comment_data ); } } /** * Send comment subscription email when comment approved by admin * * Handles to send comment subscription email when comment approved by admin * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_comment_unapproved_to_approved( $comment_data ) { // if status is approved, then send email and create log $this->model->penci_bl_create_comments( $comment_data ); } /** * Check If Clicked On Unsubscribe URL * * Handles to unsubscribe users to the post * by clicking on unsubscribe url * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_email_unsubscribe() { // To prevent global $post object notice/warnings in admin post listing page if ( is_admin() ) { return; } global $penci_bl_options, $post; $unsub_type = ''; $unsub_id = ''; $prefix = PENCI_BL_META_PREFIX; if ( isset( $_GET['penci_bl_action'] ) && ! empty( $_GET['penci_bl_action'] ) && base64_decode( $_GET['penci_bl_action'] ) == 'unsubscribe' && isset( $_GET['penci_bl_email'] ) && ! empty( $_GET['penci_bl_email'] ) ) { if ( isset( $_GET['type'] ) && isset( $_GET['id'] ) ) { // get type of unsubscribtion $unsub_type = base64_decode( $_GET['type'] ); $unsub_id = $_GET['id']; } $email = base64_decode( $_GET['penci_bl_email'] ); $email = rawurldecode( $email ); $all_follows = $this->model->penci_bl_check_follow_email( $email ); // unsubscribe type and id is set if ( ! empty( $unsub_type ) && ! empty( $unsub_id ) && ! empty( $all_follows ) ) { //set session to unsubscribe message $this->message->add_session( 'penci-bf-unsubscribe', esc_html__( 'Your email is unsubscribed successfully.', 'penci-bookmark-follow' ), 'success' ); // Unsubscribe user from specific post, term or author define in misc-functions penci_bl_unsubscribe_user( $unsub_type, $unsub_id ); } // if not define unsubscription type if ( ! empty( $all_follows ) ) { // Check email is exist or not // Check email exist in follow posts if ( isset( $all_follows['follow_posts'] ) && ! empty( $all_follows['follow_posts'] ) ) { foreach ( $all_follows['follow_posts'] as $follow_post_id ) { // unsubscribe email from followers list update_post_meta( $follow_post_id, $prefix . 'follow_status', '0' ); } } // Check email exist in follow authors if ( isset( $all_follows['follow_authors'] ) && ! empty( $all_follows['follow_authors'] ) ) { foreach ( $all_follows['follow_authors'] as $follow_author_id ) { // unsubscribe email from followers list update_post_meta( $follow_author_id, $prefix . 'follow_status', '0' ); } } //set session to unsubscribe message $this->message->add_session( 'penci-bf-unsubscribe', esc_html__( 'Your email is unsubscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } else { //set message to unsubscribe message $this->message->add( 'penci-bf-unsubscribe', esc_html__( 'Sorry, This email id does not exist in our system.', 'penci-bookmark-follow' ) ); } $unsubscribe_page_id = isset( $penci_bl_options['unsubscribe_page'] ) && ! empty( $penci_bl_options['unsubscribe_page'] ) ? $penci_bl_options['unsubscribe_page'] : $post->ID; $url = get_permalink( $unsubscribe_page_id ); wp_redirect( $url ); exit; } } /** * Subscribe email by confirmation link * * Handles to subscribe email by confirmation link * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_email_subscribe() { // To prevent global $post object notice/warnings in admin post listing page if ( is_admin() ) { return; } global $wpdb, $user_ID, $user_email, $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; // get current post id $current_post_ID = get_the_ID(); // Check Confirmation email from user if ( isset( $_GET['penci_bl_action'] ) && ! empty( $_GET['penci_bl_action'] ) && base64_decode( $_GET['penci_bl_action'] ) == 'subscribe' && isset( $_GET['penci_bl_email'] ) && ! empty( $_GET['penci_bl_email'] ) && isset( $_GET['penci_bl_post_id'] ) && ! empty( $_GET['penci_bl_post_id'] ) ) { // get post id $post_id = base64_decode( $_GET['penci_bl_post_id'] ); $follow_status = '1'; $follow_user_email = base64_decode( $_GET['penci_bl_email'] ); $follow_user_email = rawurldecode( $follow_user_email ); // args to check user is following this post? $args = array( 'post_status' => 'publish', 'post_parent' => $post_id, 'posts_per_page' => '-1', 'post_type' => PENCI_BL_POST_TYPE, 'meta_key' => $prefix . 'post_user_email', 'meta_value' => $follow_user_email ); // get results from args $result = get_posts( $args ); if ( empty( $result ) ) { // args for create custom post type for following user $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_POST_TYPE, 'post_parent' => $post_id, ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); // if post is created successfully if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update post user email update_post_meta( $followed_post_id, $prefix . 'post_user_email', $follow_user_email ); if ( ! empty( $follow_user_email ) ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $post_id, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } } } else if ( count( $result ) > 0 ) { // update follow status update_post_meta( $result[0]->ID, $prefix . 'follow_status', $follow_status ); // update post user email update_post_meta( $result[0]->ID, $prefix . 'post_user_email', $follow_user_email ); //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $post_id, esc_html__( 'Your email is already subscribed for this post.', 'penci-bookmark-follow' ) ); $follow_args = array( 'ID' => $result[0]->ID, 'post_title' => $user_ID, 'post_author' => $user_ID ); wp_update_post( $follow_args ); } $followed_post_id = ! empty( $followed_post_id ) ? $followed_post_id : $result[0]->ID; do_action( 'penci_bl_follow_post_email_subscribe', $followed_post_id ); //Subscribe post URL $post_redirect_url = apply_filters( 'penci_bl_subscribed_post_url', get_permalink( $current_post_ID ), $post_id ); wp_redirect( $post_redirect_url ); exit; } // Check Confirmation email from user if ( isset( $_GET['penci_bl_action'] ) && ! empty( $_GET['penci_bl_action'] ) && base64_decode( $_GET['penci_bl_action'] ) == 'subscribeterm' && isset( $_GET['penci_bl_email'] ) && ! empty( $_GET['penci_bl_email'] ) && isset( $_GET['penci_bl_term_id'] ) && ! empty( $_GET['penci_bl_term_id'] ) && isset( $_GET['penci_bl_taxonomy'] ) && ! empty( $_GET['penci_bl_taxonomy'] ) ) { // get posttype $posttype = base64_decode( $_GET['penci_bl_posttype'] ); // get taxonomy $taxonomy = base64_decode( $_GET['penci_bl_taxonomy'] ); // get term id $term_id = base64_decode( $_GET['penci_bl_term_id'] ); $follow_status = '1'; $follow_user_email = base64_decode( $_GET['penci_bl_email'] ); $follow_user_email = rawurldecode( $follow_user_email ); // args to check user is following this post? $args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_parent' => $term_id, 'posts_per_page' => '-1', 'meta_key' => $prefix . 'term_user_email', 'meta_value' => $follow_user_email ); // get results from args $result = get_posts( $args ); if ( empty( $result ) ) { // args for create custom post type for following user $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_parent' => $term_id, ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); // if post is created successfully if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $followed_post_id, $prefix . 'term_user_email', $follow_user_email ); // update post type update_post_meta( $followed_post_id, $prefix . 'post_type', $posttype ); // update taxonomy update_post_meta( $followed_post_id, $prefix . 'taxonomy_slug', $taxonomy ); if ( ! empty( $follow_user_email ) ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } } } else if ( count( $result ) > 0 ) { // update follow status update_post_meta( $result[0]->ID, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $result[0]->ID, $prefix . 'term_user_email', $follow_user_email ); // update post type update_post_meta( $result[0]->ID, $prefix . 'post_type', $posttype ); // update taxonomy update_post_meta( $result[0]->ID, $prefix . 'taxonomy_slug', $taxonomy ); //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is already subscribed for this term.', 'penci-bookmark-follow' ) ); $follow_args = array( 'ID' => $result[0]->ID, 'post_title' => $user_ID, 'post_author' => $user_ID ); wp_update_post( $follow_args ); } $followed_post_id = ! empty( $followed_post_id ) ? $followed_post_id : $result[0]->ID; //Subscribe taxonomy URL $taxonomy_redirect_url = apply_filters( 'penci_bl_subscribed_taxonomy_url', get_permalink( $current_post_ID ), $term_id ); wp_redirect( $taxonomy_redirect_url ); exit; } // Check Confirmation email from user if ( isset( $_GET['penci_bl_action'] ) && ! empty( $_GET['penci_bl_action'] ) && base64_decode( $_GET['penci_bl_action'] ) == 'subscribeauthor' && isset( $_GET['penci_bl_email'] ) && ! empty( $_GET['penci_bl_email'] ) && isset( $_GET['penci_bl_author_id'] ) && ! empty( $_GET['penci_bl_author_id'] ) ) { // get author id $author_id = base64_decode( $_GET['penci_bl_author_id'] ); $follow_status = '1'; $follow_user_email = base64_decode( $_GET['penci_bl_email'] ); $follow_user_email = rawurldecode( $follow_user_email ); // args to check user is following this post? $args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_parent' => $author_id, 'posts_per_page' => '-1', 'meta_key' => $prefix . 'author_user_email', 'meta_value' => $follow_user_email ); // get results from args $result = get_posts( $args ); if ( empty( $result ) ) { // args for create custom post type for following user $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_parent' => $author_id, ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); // if post is created successfully if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $followed_post_id, $prefix . 'author_user_email', $follow_user_email ); if ( ! empty( $follow_user_email ) ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } } } else if ( count( $result ) > 0 ) { // update follow status update_post_meta( $result[0]->ID, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $result[0]->ID, $prefix . 'author_user_email', $follow_user_email ); //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is already subscribed for this author.', 'penci-bookmark-follow' ) ); $follow_args = array( 'ID' => $result[0]->ID, 'post_title' => $user_ID, 'post_author' => $user_ID ); wp_update_post( $follow_args ); } $followed_post_id = ! empty( $followed_post_id ) ? $followed_post_id : $result[0]->ID; do_action( 'penci_bl_follow_author_email_subscribe', $followed_post_id ); //Subscribe author URL $author_redirect_url = apply_filters( 'penci_bl_subscribed_author_url', get_permalink( $current_post_ID ), $author_id ); wp_redirect( $author_redirect_url ); exit; } } /** * Display Follow Button with Content * * Handles to display follow button with content * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_content_filter( $post_id = '', $class = 'normal' ) { global $penci_bl_options, $post; $html = ''; ob_start(); do_action( 'penci_bl_follow_post', array( 'follow_pos_class' => $class ) ); $html .= ob_get_clean(); echo $html; } /** * Display Follow Message * * Handle to display follow message * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_display_message( $content ) { global $penci_bl_options, $post; $html = ''; $follow_post_id = apply_filters( 'penci_bl_follow_display_message_post_id', $post->ID ); if ( is_user_logged_in() || ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) ) { if ( $this->message->size( 'penci-bf-email-subscribe-' . $follow_post_id ) > 0 ) { //make success message $html .= '
        '; $html .= $this->message->output( 'penci-bf-email-subscribe-' . $follow_post_id ); $html .= '
        '; } } return $html . $content; } /** * Initial Loaded * * Handle to add functionality when page loaded * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_loaded() { add_action( 'penci_bookmark_post', array( $this, 'penci_bl_follow_content_filter' ), 10, 2 ); } public function penci_bl_follow_single_loaded() { if ( ! ( $this->model->penci_bl_has_shortcode( 'pencibf_follow_me' ) ) && is_single() ) { //change the content using filter add_action( 'penci_single_meta_content', array( $this, 'penci_bl_follow_content_filter' ) ); } } /** * Follow Post * * Handle to follow post * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_post() { if ( ! wp_verify_nonce( $_POST['nonce'], 'penci_bookmark_follow' ) ) { wp_send_json_error( esc_html__( 'Nonce verification fails.', 'penci-bookmark-follow' ) ); } global $user_ID, $user_email, $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $user_ID = isset( $_POST['user_id'] ) && ! empty( $_POST['user_id'] ) ? $_POST['user_id'] : $user_ID; $current_post_ID = isset( $_POST['currentpostid'] ) && ! empty( $_POST['currentpostid'] ) ? $_POST['currentpostid'] : ''; $post_ID = isset( $_POST['postid'] ) && ! empty( $_POST['postid'] ) ? $_POST['postid'] : ''; $follow_status = isset( $_POST['status'] ) && ! empty( $_POST['status'] ) ? $_POST['status'] : '0'; $follow_user_email = isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ? $_POST['email'] : $user_email; $only_following = isset( $_POST['onlyfollowing'] ) && ! empty( $_POST['onlyfollowing'] ) ? $_POST['onlyfollowing'] : ''; $disable_reload = isset( $_POST['disable_reload'] ) && $_POST['disable_reload'] ? true : false; $email_confirmation = ''; // args to check user is following this post? $args = array( 'post_status' => 'publish', 'post_parent' => $post_ID, 'posts_per_page' => '-1', 'post_type' => PENCI_BL_POST_TYPE, 'meta_key' => $prefix . 'post_user_email', 'meta_value' => $follow_user_email ); // get results from args $result = get_posts( $args ); // Check Require Email confirmation from settings and user is not logged in if ( empty( $result ) && ! empty( $follow_user_email ) && $follow_status == '1' && ( ( isset( $penci_bl_options['double_opt_in'] ) && $penci_bl_options['double_opt_in'] == '1' && is_user_logged_in() ) || ( is_super_admin() && ( ! empty( $_POST['page'] ) && $_POST['page'] == 'penci-bf-add-follower' ) ) || ( ! is_user_logged_in() && ! isset( $penci_bl_options['disable_follow_guest'] ) && isset( $penci_bl_options['double_opt_in_guest'] ) && $penci_bl_options['double_opt_in_guest'] == '1' ) ) ) { $email_args = array( 'penci_bl_email' => $follow_user_email, 'post_id' => $post_ID, 'current_post_id' => $current_post_ID, ); $this->model->penci_bl_confirmation_email( $email_args ); if ( isset( $_POST['page'] ) ) { echo esc_html__( 'Please check your email inbox to confirm subscription.', 'penci-bookmark-follow' ); } else { echo 'confirm'; } exit; } if ( is_user_logged_in() && $follow_status == '0' && $current_post_ID ) { $log_ids = $this->model->penci_bl_get_follow_post_user_logs_data( array( 'logid' => $current_post_ID, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $current_post_ID, true ); } if ( empty( $email_confirmation ) ) { if ( empty( $result ) ) { // args for create custom post type for following user $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_POST_TYPE, 'post_parent' => $post_ID, ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; $follow_post_args['post_author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); // if post is created successfully if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update post user email update_post_meta( $followed_post_id, $prefix . 'post_user_email', $follow_user_email ); if ( ! is_user_logged_in() && ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } } } else if ( count( $result ) > 0 ) { $exist_follow_status = get_post_meta( $result[0]->ID, $prefix . 'follow_status', true ); // update follow status update_post_meta( $result[0]->ID, $prefix . 'follow_status', $follow_status ); // update post user email update_post_meta( $result[0]->ID, $prefix . 'post_user_email', $follow_user_email ); if ( ! is_user_logged_in() || ( is_super_admin() && isset( $_POST['page'] ) && $_POST['page'] == 'penci-bf-add-follower' ) ) { if ( $exist_follow_status == '1' ) { //Check if not disable reload and message append if ( ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $post_ID, esc_html__( 'Your email is already subscribed for this post.', 'penci-bookmark-follow' ) ); } else { $guest_error = esc_html__( 'Your email is already subscribed for this post.', 'penci-bookmark-follow' ); } if ( isset( $_POST['page'] ) ) { echo sprintf( esc_html__( '%s This Email is already subscribed for this post. %s', 'penci-bookmark-follow' ), '', '' ); exit; } } else { //Check if not disable reload and message append if ( ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } if ( isset( $_POST['page'] ) ) { echo esc_html__( 'Email is subscribed successfully.', 'penci-bookmark-follow' ); exit; } } } else { $follow_args = array( 'ID' => $result[0]->ID, 'post_title' => $user_ID, 'post_author' => $user_ID ); wp_update_post( $follow_args ); } } } $inserted_post_id = ! empty( $followed_post_id ) ? $followed_post_id : $result[0]->ID; do_action( 'penci_bl_follow_post_action', $inserted_post_id ); // get user counts $numn = penci_bl_get_post_followers_count( $post_ID ); if ( $only_following ) { ob_start(); //do action to load follow posts html via ajax $atts['only_following'] = $only_following; do_action( 'penci_bl_manage_follow_posts', $atts ); echo ob_get_clean(); } else { //Pass error message instead of number when guest error if ( ! empty( $guest_error ) ) { $numn = $guest_error; } echo $numn; } exit; } /** * Follow Author * * Handle to follow Author * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_author() { if ( ! wp_verify_nonce( $_POST['nonce'], 'penci_bookmark_follow' ) ) { wp_send_json_error( esc_html__( 'Nonce verification fails.', 'penci-bookmark-follow' ) ); } global $user_ID, $user_email, $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $user_ID = isset( $_POST['user_id'] ) && ! empty( $_POST['user_id'] ) ? $_POST['user_id'] : $user_ID; $current_post_ID = isset( $_POST['currentpostid'] ) && ! empty( $_POST['currentpostid'] ) ? $_POST['currentpostid'] : ''; $follow_authorid = isset( $_POST['authorid'] ) && ! empty( $_POST['authorid'] ) ? $_POST['authorid'] : ''; $follow_status = isset( $_POST['status'] ) && ! empty( $_POST['status'] ) ? $_POST['status'] : '0'; $follow_user_email = isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ? $_POST['email'] : $user_email; $only_following = isset( $_POST['onlyfollowing'] ) && ! empty( $_POST['onlyfollowing'] ) ? $_POST['onlyfollowing'] : ''; $disable_reload = isset( $_POST['disable_reload'] ) && $_POST['disable_reload'] ? true : false; $email_confirmation = ''; // args to check user is following this post? $args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_parent' => $follow_authorid, 'posts_per_page' => '-1', 'meta_key' => $prefix . 'author_user_email', 'meta_value' => $follow_user_email ); // get results from args $result = get_posts( $args ); // Check Require Email confirmation from settings and user is not logged in if ( empty( $result ) && ! empty( $follow_user_email ) && $follow_status == '1' && ( ( isset( $penci_bl_options['double_opt_in'] ) && $penci_bl_options['double_opt_in'] == '1' && is_user_logged_in() ) || ( is_super_admin() && ( isset( $_POST['page'] ) && $_POST['page'] == 'penci-bf-add-follower' ) ) || ( ! is_user_logged_in() && ! isset( $penci_bl_options['disable_follow_guest'] ) && isset( $penci_bl_options['double_opt_in_guest'] ) && $penci_bl_options['double_opt_in_guest'] == '1' ) ) ) { $email_args = array( 'penci_bl_email' => $follow_user_email, 'author_id' => $follow_authorid, 'current_post_id' => $current_post_ID, 'page' => $_POST['page'] ); $this->model->penci_bl_author_confirmation_email( $email_args ); //set session to subscribe message if ( ! is_user_logged_in() && ! $disable_reload ) { //if user is not logged in then show message after sending email for confirmation //$this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Please check your email inbox to confirm subscription.', 'penci-bookmark-follow' ), 'success' ); } $email_confirmation = 'true'; if ( isset( $_POST['page'] ) ) { echo esc_html__( 'Please check your email inbox to confirm subscription.', 'penci-bookmark-follow' ); } else { echo 'confirm'; } exit; } /*if ( is_user_logged_in() && $follow_status == '0' ) { $log_ids = $this->model->penci_bl_get_follow_author_user_logs_data( array( 'logid' => $current_post_ID, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $current_post_ID, true ); }*/ if ( empty( $email_confirmation ) && ! empty( $follow_authorid ) ) { if ( empty( $result ) ) { // args for create custom post type for following user $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_parent' => $follow_authorid, ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; $follow_post_args['post_author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); // if post is created successfully if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $followed_post_id, $prefix . 'author_user_email', $follow_user_email ); if ( ! is_user_logged_in() && ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } } } else if ( count( $result ) > 0 ) { $exist_follow_status = get_post_meta( $result[0]->ID, $prefix . 'follow_status', true ); // update follow status update_post_meta( $result[0]->ID, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $result[0]->ID, $prefix . 'author_user_email', $follow_user_email ); if ( ! is_user_logged_in() || ( is_super_admin() && isset( $_POST['page'] ) && $_POST['page'] == 'penci-bf-add-follower' ) ) { if ( $exist_follow_status == '1' ) { //Check if not disable reload and message append if ( ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is already subscribed for this author.', 'penci-bookmark-follow' ) ); } else { $guest_error = esc_html__( 'Your email is already subscribed for this author.', 'penci-bookmark-follow' ); } if ( isset( $_POST['page'] ) ) { echo sprintf( esc_html__( '%s Your email is already subscribed for this author. %s', 'penci-bookmark-follow' ), '', '' ); exit; } } else { //Check if not disable reload and message append if ( ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci-bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } if ( isset( $_POST['page'] ) ) { echo esc_html__( 'Email is subscribed successfully.', 'penci-bookmark-follow' ); exit; } } } else { $follow_args = array( 'ID' => $result[0]->ID, 'post_title' => $user_ID, 'post_author' => $user_ID ); wp_update_post( $follow_args ); } } } $inserted_post_id = ! empty( $followed_post_id ) ? $followed_post_id : $result[0]->ID; do_action( 'penci_bl_follow_author_action', $inserted_post_id ); // get user counts $numn = penci_bl_get_author_followers_count( $follow_authorid ); if ( $only_following ) { ob_start(); //do action to load follow posts html via ajax $atts['only_following'] = $only_following; do_action( 'penci_bl_manage_follow_authors', $atts ); echo ob_get_clean(); } else { //Pass error message instead of number when guest error if ( ! empty( $guest_error ) ) { $numn = $guest_error; } echo $numn; } exit; } /** * After user registration * * Handles to save data after user registration * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_user_registration( $user_id ) { $user = get_user_by( 'id', $user_id ); if ( ! empty( $user ) ) { // Check user is not exist $user_email = $user->user_email; // args to check if this user_email is exist for follow post $args = array( 'penci_bl_email' => $user_email, 'fields' => 'ids' ); $follow_posts = $this->model->penci_bl_get_follow_post_users_data( $args ); foreach ( $follow_posts as $follow_post_id ) { $follow_args = array( 'ID' => $follow_post_id, 'post_title' => $user->ID, 'post_author' => $user->ID ); wp_update_post( $follow_args ); } } } /** * Send Unsubscribe Confirmation Email * * Handles to send unsubscribe confirmation email * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_send_unsubscribe_conformation() { // Check unsubscribe click button if ( isset( $_POST['penci_bl_unsubscribe_submit'] ) && ! empty( $_POST['penci_bl_unsubscribe_submit'] ) ) { // Check unsubscribe email is not empty if ( isset( $_POST['penci_bl_unsubscribe_email'] ) && ! empty( $_POST['penci_bl_unsubscribe_email'] ) ) { $_POST['penci_bl_unsubscribe_email'] = trim( $_POST['penci_bl_unsubscribe_email'] ); // Check unsubscribe email is valid if ( is_email( $_POST['penci_bl_unsubscribe_email'] ) ) { $email = $_POST['penci_bl_unsubscribe_email']; $all_follows = $this->model->penci_bl_check_follow_email( $email ); if ( ! empty( $all_follows ) ) { // Check email is exist or not $send_mail = $this->model->penci_bl_confirmation_unsubscribe_email( array( 'penci_bl_email' => $email ) ); if ( $send_mail ) { //set message to unsubscribe message $this->message->add( 'penci-bf-unsubscribe', esc_html__( 'Please check your email inbox to confirm unsubscription.', 'penci-bookmark-follow' ), 'success' ); } else { $this->message->add( 'penci-bf-unsubscribe', esc_html__( 'Mail sent error.', 'penci-bookmark-follow' ), 'success' ); } } else { //set message to unsubscribe message $this->message->add( 'penci-bf-unsubscribe', esc_html__( 'Sorry, This email id does not exist in our system.', 'penci-bookmark-follow' ) ); } } else { //set message to unsubscribe message $this->message->add( 'penci-bf-unsubscribe', esc_html__( 'Please enter valid email.', 'penci-bookmark-follow' ) ); } } else { //set message to unsubscribe message $this->message->add( 'penci-bf-unsubscribe', esc_html__( 'Please enter email.', 'penci-bookmark-follow' ) ); } } } /** * AJAX call * * Handles to show details of with ajax * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_posts_ajax() { if ( is_user_logged_in() ) { ob_start(); //do action to load follow posts html via ajax do_action( 'penci_bl_manage_follow_posts_ajax' ); echo ob_get_clean(); exit; } else { return esc_html__( 'You have not follow any posts yet.', 'penci-bookmark-follow' ); } } /** * AJAX call * * Handles to show details of with ajax * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_follow_authors_ajax() { if ( is_user_logged_in() ) { ob_start(); //do action to load follow authors html via ajax do_action( 'penci_bl_manage_follow_authors' ); echo ob_get_clean(); exit; } else { return esc_html__( 'You have not follow any authors yet.', 'penci-bookmark-follow' ); } } /** * AJAX call * * Handles to show details of with ajax * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_action_post() { if ( ! wp_verify_nonce( $_POST['nonce'], 'penci_bookmark_follow' ) ) { wp_send_json_error( esc_html__( 'Nonce verification fails.', 'penci-bookmark-follow' ) ); } if ( isset( $_POST['bulkaction'] ) && $_POST['bulkaction'] == 'delete' && isset( $_POST['ids'] ) && ! empty( $_POST['ids'] ) && $_POST['ids'] != ',' ) { $ids = explode( ',', trim( $_POST['ids'], ',' ) ); foreach ( $ids as $id ) { $log_ids = $this->model->penci_bl_get_follow_post_user_logs_data( array( 'logid' => $id, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $id, true ); } ob_start(); //do action to load follow terms html via ajax do_action( 'penci_bl_manage_follow_posts' ); echo ob_get_clean(); exit; } } /** * AJAX call * * Handles to show details of with ajax * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_action_author() { if ( ! wp_verify_nonce( $_POST['nonce'], 'penci_bookmark_follow' ) ) { wp_send_json_error( esc_html__( 'Nonce verification fails.', 'penci-bookmark-follow' ) ); } if ( isset( $_POST['bulkaction'] ) && $_POST['bulkaction'] == 'delete' && isset( $_POST['ids'] ) && ! empty( $_POST['ids'] ) && $_POST['ids'] != ',' ) { $ids = explode( ',', trim( $_POST['ids'], ',' ) ); foreach ( $ids as $id ) { $log_ids = $this->model->penci_bl_get_follow_author_user_logs_data( array( 'logid' => $id, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $id, true ); } ob_start(); //do action to load follow authors html via ajax do_action( 'penci_bl_manage_follow_authors' ); echo ob_get_clean(); exit; } } /** * Adding Follow Author Button * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_buddypress_follow_button() { global $bp, $penci_bl_options; if ( ! empty( $bp->displayed_user->id ) ) { $args = apply_filters( 'penci_bl_buddypress_follow_button_args', array( 'author_id' => $bp->displayed_user->id, 'follow_message' => ! empty( $penci_bl_options['authors_follow_message'] ) ? $penci_bl_options['authors_follow_message'] : '', 'follow_buttons' => array( 'follow' => '', 'following' => '', 'unfollow' => '', ), 'disable_reload' => true, ) ); do_action( 'penci_bl_follow_author', $args ); } } /** * Adding BuddyPress tabs * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_buddypress_profile_tabs() { global $bp; //Get current profile member id $user_id = get_current_user_id(); $member_id = ! empty( $bp->displayed_user->id ) ? $bp->displayed_user->id : ''; if ( ! empty( $member_id ) ) { //Get author's following count $flwg_count_args = array( 'author' => $member_id, 'count' => '1', ); //Check if visited profile is not from current user if ( $user_id != $member_id ) { $flwg_count_args['penci_bl_status'] = 'subscribe'; } $following_count = $this->model->penci_bl_get_follow_author_users_data( $flwg_count_args ); $following_count_msg = ! empty( $following_count ) ? '' . $following_count . '' : '0'; //Get author's followers count $flwr_count_args = array( 'authorid' => $member_id, 'penci_bl_status' => 'subscribe', 'count' => '1', 'author__not_in' => array( - 0 ) ); $follower_count = $this->model->penci_bl_get_follow_author_users_data( $flwr_count_args ); $follower_count_msg = ! empty( $follower_count ) ? '' . $follower_count . '' : '0'; //Create Followers tab bp_core_new_nav_item( array( 'name' => sprintf( esc_html__( 'Followers %s', 'bdfollow' ), $follower_count_msg ), 'slug' => 'followers', 'screen_function' => array( $this, 'penci_bl_buddypress_followers_callback' ), 'position' => 75, 'show_for_displayed_user' => true, 'parent_url' => $bp->displayed_user->domain, 'parent_slug' => $bp->profile->slug, 'default_subnav_slug' => 'followers' ) ); //Create Following tab bp_core_new_nav_item( array( 'name' => sprintf( esc_html__( 'Following %s', 'bdfollow' ), $following_count_msg ), 'slug' => 'following', 'screen_function' => array( $this, 'penci_bl_buddypress_following_callback' ), 'position' => 75, 'show_for_displayed_user' => true, 'parent_url' => $bp->displayed_user->domain, 'parent_slug' => $bp->profile->slug, 'default_subnav_slug' => 'following' ) ); } } /** * BuddyPress Followers Callback * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_buddypress_followers_callback() { //add title and content here - last is to call the members plugin.php template add_action( 'bp_template_content', array( $this, 'bd_follow_followers_content' ) ); bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) ); } /** * BuddyPress Followers Content * * @package Penci Bookmark Follow * @since 1.8.5 */ public function bd_follow_followers_content() { global $penci_bl_options, $bp; $member_id = ! empty( $bp->displayed_user->id ) ? $bp->displayed_user->id : ''; if ( ! empty( $member_id ) ) { echo '

        ' . sprintf( esc_html__( '%s NOTE: %s Guest users who have followed the @%s have not been listed here.', 'penci-bookmark-follow' ), '', '', get_the_author_meta( 'user_login', $member_id ) ) . '

        '; $args = apply_filters( 'penci_bl_buddypress_author_followers_args', array( 'author_id' => $member_id, 'exclude_guest' => true ) ); do_action( 'penci_bl_author_followers', $args ); } } /** * BuddyPress Following Callback * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_buddypress_following_callback() { //add title and content here - last is to call the members plugin.php template add_action( 'bp_template_content', array( $this, 'bd_follow_following_content' ) ); bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) ); } /** * BuddyPress Following Content * * @package Penci Bookmark Follow * @since 1.8.5 */ public function bd_follow_following_content() { global $bp; $user_id = get_current_user_id(); $member_id = ! empty( $bp->displayed_user->id ) ? $bp->displayed_user->id : ''; if ( ! empty( $member_id ) ) { //Arguments $args = array( 'author_id' => $member_id, ); //Check if visited page is not current user profile if ( $user_id != $member_id ) { $args['disabled_actions'] = 1; $args['only_following'] = 1; } do_action( 'penci_bl_manage_follow_authors', apply_filters( 'penci_bl_buddypress_manage_follow_authors_args', $args ) ); } } /** * BuddyPress Following Menu * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_buddypress_admin_menu() { global $wp_admin_bar, $bp; $user_id = get_current_user_id(); if ( ! bp_use_wp_admin_bar() || defined( 'DOING_AJAX' ) ) { return; } //Get urls $user_domain = bp_loggedin_user_domain(); $following_link = trailingslashit( $user_domain . 'following' ); $followers_link = trailingslashit( $user_domain . 'followers' ); //Get author's following count $flwg_count_args = array( 'author' => $user_id, 'count' => '1', ); $following_count = $this->model->penci_bl_get_follow_author_users_data( $flwg_count_args ); $following_count_msg = ! empty( $following_count ) ? '' . $following_count . '' : ''; //Get author's followers count $flwr_count_args = array( 'authorid' => $user_id, 'penci_bl_status' => 'subscribe', 'count' => '1', 'author__not_in' => array( - 0 ) ); $follower_count = $this->model->penci_bl_get_follow_author_users_data( $flwr_count_args ); $follower_count_msg = ! empty( $follower_count ) ? '' . $follower_count . '' : ''; // add menu item $wp_admin_bar->add_menu( array( 'parent' => 'my-account-xprofile', 'id' => 'my-account-xprofile-followers', 'title' => esc_html__( 'Followers ', 'penci-bookmark-follow' ) . $follower_count_msg, 'href' => trailingslashit( $followers_link ), ) ); // add menu item $wp_admin_bar->add_menu( array( 'parent' => 'my-account-xprofile', 'id' => 'my-account-xprofile-following', 'title' => esc_html__( 'Following ', 'penci-bookmark-follow' ) . $following_count_msg, 'href' => trailingslashit( $following_link ), ) ); } /** * Add "Notify followers for this update" option in elementor frontend editor * * @package Penci Bookmark Follow * @since 1.9.9 */ public function penci_bl_add_elementor_page_settings_controls( $page ) { if ( isset( $page ) && $page->get_id() > "" ) { $post = get_post( $page->get_id() ); if ( isset( $post->post_status ) && $post->post_status == 'publish' && $this->model->penci_bl_check_post_update_notification() ) { $prefix = PENCI_BL_META_PREFIX; $page->add_control( $prefix . 'email_notification', [ 'label' => esc_html__( 'Notify followers for this update', 'penci-bookmark-follow' ), 'type' => \Elementor\Controls_Manager::SWITCHER, ] ); } } } /** * AJAX call * * Handles to show details of with ajax * * @package Follow My Blog Post * @since 1.1.0 */ public function penci_bf_follow_terms_ajax() { if ( is_user_logged_in() ) { ob_start(); //do action to load follow terms html via ajax do_action( 'penci_bl_manage_follow_terms' ); echo ob_get_clean(); exit; } else { return esc_html__( 'You have not follow any terms yet.', 'penci-bookmark-follow' ); } } public function penci_bl_bulk_action_term() { if ( isset( $_POST['bulkaction'] ) && $_POST['bulkaction'] == 'delete' && isset( $_POST['ids'] ) && ! empty( $_POST['ids'] ) && $_POST['ids'] != ',' ) { $ids = explode( ',', trim( $_POST['ids'], ',' ) ); foreach ( $ids as $id ) { $log_ids = $this->model->penci_bl_get_follow_term_user_logs_data( array( 'logid' => $id, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $id, true ); } ob_start(); //do action to load follow terms html via ajax do_action( 'wpw_fp_manage_follow_terms' ); echo ob_get_clean(); exit; } } /** * Follow Category */ public function penci_bl_follow_terms() { global $user_ID, $user_email, $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $user_ID = isset( $_POST['user_id'] ) && ! empty( $_POST['user_id'] ) ? $_POST['user_id'] : $user_ID; $current_post_ID = isset( $_POST['currentpostid'] ) && ! empty( $_POST['currentpostid'] ) ? $_POST['currentpostid'] : ''; $follow_posttype = isset( $_POST['posttype'] ) && ! empty( $_POST['posttype'] ) ? $_POST['posttype'] : ''; $follow_taxonomy = isset( $_POST['taxonomyslug'] ) && ! empty( $_POST['taxonomyslug'] ) ? $_POST['taxonomyslug'] : ''; $follow_termid = isset( $_POST['termid'] ) && ! empty( $_POST['termid'] ) ? $_POST['termid'] : ''; $follow_status = isset( $_POST['status'] ) && ! empty( $_POST['status'] ) ? $_POST['status'] : '0'; $follow_user_email = isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ? $_POST['email'] : $user_email; $only_following = isset( $_POST['onlyfollowing'] ) && ! empty( $_POST['onlyfollowing'] ) ? $_POST['onlyfollowing'] : ''; $disable_reload = isset( $_POST['disable_reload'] ) && $_POST['disable_reload'] ? true : false; $email_confirmation = ''; // args to check user is following this post? $args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_parent' => $follow_termid, 'posts_per_page' => '-1', 'meta_key' => $prefix . 'term_user_email', 'meta_value' => $follow_user_email ); // get results from args $result = get_posts( $args ); // Check Require Email confirmation from settings and user is not logged in if ( empty( $result ) && ! empty( $follow_user_email ) && $follow_status == '1' && ( ( isset( $penci_bl_options['double_opt_in'] ) && $penci_bl_options['double_opt_in'] == '1' && is_user_logged_in() ) || ( is_super_admin() && isset( $_POST['page'] ) && $_POST['page'] == 'penci_bf-add-follower' ) || ( ! is_user_logged_in() && ! isset( $penci_bl_options['disable_follow_guest'] ) && isset( $penci_bl_options['double_opt_in_guest'] ) && $penci_bl_options['double_opt_in_guest'] == '1' ) ) ) { $email_args = array( 'penci_bl_email' => $follow_user_email, 'posttype' => $follow_posttype, 'taxonomy' => $follow_taxonomy, 'term_id' => $follow_termid, 'current_post_id' => $current_post_ID, 'page' => $_POST['page'] ); $this->model->penci_bl_term_confirmation_email( $email_args ); //set session to subscribe message if ( ! is_user_logged_in() && ! $disable_reload ) { //if user is not logged in then show message after sending email for confirmation //$this->message->add_session( 'penci_bf-email-subscribe-' . $current_post_ID, esc_html__( 'Please check your email inbox to confirm subscription.', 'penci-bookmark-follow' ), 'success' ); } $email_confirmation = 'true'; if ( isset( $_POST['page'] ) ) { echo esc_html__( 'Please check your email inbox to confirm subscription.', 'penci-bookmark-follow' ); } else { echo 'confirm'; } exit; } if ( empty( $email_confirmation ) && ! empty( $follow_termid ) && ! empty( $follow_taxonomy ) ) { if ( empty( $result ) ) { // args for create custom post type for following user $follow_post_args = array( 'post_title' => $user_ID, 'post_content' => '', 'post_status' => 'publish', 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_parent' => $follow_termid, ); if ( is_user_logged_in() ) { $follow_post_args['author'] = $user_ID; $follow_post_args['post_author'] = $user_ID; } $followed_post_id = wp_insert_post( $follow_post_args ); // if post is created successfully if ( $followed_post_id ) { // update follow status update_post_meta( $followed_post_id, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $followed_post_id, $prefix . 'term_user_email', $follow_user_email ); // update post type update_post_meta( $followed_post_id, $prefix . 'post_type', $follow_posttype ); // update taxonomy slug update_post_meta( $followed_post_id, $prefix . 'taxonomy_slug', $follow_taxonomy ); if ( ! is_user_logged_in() && ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci_bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } } } else if ( count( $result ) > 0 ) { $exist_follow_status = get_post_meta( $result[0]->ID, $prefix . 'follow_status', true ); // update follow status update_post_meta( $result[0]->ID, $prefix . 'follow_status', $follow_status ); // update category user email update_post_meta( $result[0]->ID, $prefix . 'term_user_email', $follow_user_email ); // update post type update_post_meta( $result[0]->ID, $prefix . 'post_type', $follow_posttype ); // update taxonomy slug update_post_meta( $result[0]->ID, $prefix . 'taxonomy_slug', $follow_taxonomy ); if ( ! is_user_logged_in() || ( is_super_admin() && isset( $_POST['page'] ) && $_POST['page'] == 'penci_bf-add-follower' ) ) { if ( $exist_follow_status == '1' ) { //Check if not disable reload and message append if ( ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci_bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is already subscribed for this term.', 'penci-bookmark-follow' ) ); } else { $guest_error = esc_html__( 'Your email is already subscribed for this item.', 'penci-bookmark-follow' ); } if ( isset( $_POST['page'] ) ) { echo sprintf( esc_html__( '%s This Email is already subscribed for this term. %s', 'penci-bookmark-follow' ), '', '' ); exit; } } else { //Check if not disable reload and message append if ( ! $disable_reload ) { //set session to subscribe message $this->message->add_session( 'penci_bf-email-subscribe-' . $current_post_ID, esc_html__( 'Your email is subscribed successfully.', 'penci-bookmark-follow' ), 'success' ); } if ( isset( $_POST['page'] ) ) { echo esc_html__( 'Email is subscribed successfully.', 'penci-bookmark-follow' ); exit; } } } else { $follow_args = array( 'ID' => $result[0]->ID, 'post_title' => $user_ID, 'post_author' => $user_ID ); wp_update_post( $follow_args ); } } } $inserted_post_id = ! empty( $followed_post_id ) ? $followed_post_id : $result[0]->ID; do_action( 'penci_bl_term_action', $inserted_post_id ); // get user counts $numn = penci_bl_get_term_followers_count( $follow_termid ); if ( $only_following ) { ob_start(); //do action to load follow posts html via ajax $atts['only_following'] = $only_following; do_action( 'penci_bl_manage_follow_terms', $atts ); echo ob_get_clean(); } else { //Pass error message instead of number when guest error if ( ! empty( $guest_error ) ) { $numn = $guest_error; } echo $numn; } exit; } /** * Adding Hooks * * @package Penci Bookmark Follow * @since 1.0.0 */ public function add_hooks() { global $penci_bl_options; //add action to send comment subscription email when comment inserted and approved add_action( 'wp_insert_comment', array( $this, 'penci_bl_comment_insert' ), 99, 2 ); //add action to send comment subscription email when comment approved by admin add_action( 'comment_unapproved_to_approved', array( $this, 'penci_bl_comment_unapproved_to_approved' ) ); //wp call add_action( 'wp', array( $this, 'penci_bl_email_unsubscribe' ) ); add_action( 'wp', array( $this, 'penci_bl_email_subscribe' ) ); add_action( 'init', array( $this, 'penci_bl_follow_loaded' ) ); add_action( 'wp', array( $this, 'penci_bl_follow_single_loaded' ) ); //AJAX call for follow post add_action( 'wp_ajax_penci_bl_follow_post', array( $this, 'penci_bl_follow_post' ) ); add_action( 'wp_ajax_nopriv_penci_bl_follow_post', array( $this, 'penci_bl_follow_post' ) ); //AJAX call for follow author add_action( 'wp_ajax_penci_bl_follow_author', array( $this, 'penci_bl_follow_author' ) ); add_action( 'wp_ajax_nopriv_penci_bl_follow_author', array( $this, 'penci_bl_follow_author' ) ); //AJAX call for follow terms add_action( 'wp_ajax_penci_bl_follow_terms', array( $this, 'penci_bl_follow_terms' ) ); add_action( 'wp_ajax_nopriv_penci_bl_follow_terms', array( $this, 'penci_bl_follow_terms' ) ); //ajax pagination for follow posts add_action( 'wp_ajax_penci_bl_follow_post_next_page', array( $this, 'penci_bl_follow_posts_ajax' ) ); add_action( 'wp_ajax_nopriv_penci_bl_follow_post_next_page', array( $this, 'penci_bl_follow_posts_ajax' ) ); //ajax pagination for follow authors add_action( 'wp_ajax_penci_bl_follow_author_next_page', array( $this, 'penci_bl_follow_authors_ajax' ) ); add_action( 'wp_ajax_nopriv_penci_bl_follow_author_next_page', array( $this, 'penci_bl_follow_authors_ajax' ) ); //ajax pagination for follow authors add_action( 'wp_ajax_penci_bl_bulk_action_author', array( $this, 'penci_bl_bulk_action_author' ) ); add_action( 'wp_ajax_nopriv_penci_bl_bulk_action_author', array( $this, 'penci_bl_bulk_action_author' ) ); //ajax pagination for follow terms add_action( 'wp_ajax_penci_bl_follow_term_next_page', array( $this, 'penci_bf_follow_terms_ajax' ) ); add_action( 'wp_ajax_nopriv_penci_bl_follow_term_next_page', array( $this, 'penci_bf_follow_terms_ajax' ) ); //ajax pagination for follow terms add_action( 'wp_ajax_penci_bl_bulk_action_term', array( $this, 'penci_bl_bulk_action_term' ) ); add_action( 'wp_ajax_nopriv_penci_bl_bulk_action_term', array( $this, 'penci_bl_bulk_action_term' ) ); add_action( 'wp_ajax_penci_bl_bulk_action_post', array( $this, 'penci_bl_bulk_action_post' ) ); add_action( 'wp_ajax_nopriv_penci_bl_bulk_action_post', array( $this, 'penci_bl_bulk_action_post' ) ); //user registraion add_action( 'user_register', array( $this, 'penci_bl_user_registration' ) ); //unsubscribe confirmation add_action( 'wp', array( $this, 'penci_bl_send_unsubscribe_conformation' ) ); //Check if buddypress enabled if ( ! empty( $penci_bl_options['enabled_supports'] ) && is_array( $penci_bl_options['enabled_supports'] ) && in_array( 'buddypress', $penci_bl_options['enabled_supports'] ) ) { add_action( 'bp_before_member_header_meta', array( $this, 'penci_bl_buddypress_follow_button' ) ); add_action( 'bp_setup_nav', array( $this, 'penci_bl_buddypress_profile_tabs' ), 100 ); add_action( 'bp_setup_admin_bar', array( $this, 'penci_bl_buddypress_admin_menu' ), 300 ); } // get all post type $enabledPosts = ! empty( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); foreach ( $enabledPosts as $key => $postType ) { // add custom fields in elementor page settings add_action( 'elementor/element/wp-' . $postType . '/document_settings/before_section_end', array( $this, 'penci_bl_add_elementor_page_settings_controls' ) ); } } }inc/penci-bf-template-functions.php000064400000073761147600022000013335 0ustar00 $args ) ); } } if ( ! function_exists( 'penci_bl_follow_post_content' ) ) { /** * Load Follow Term Content Template * * Handles to load follow term content template * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_post_content( $args ) { global $wpdb, $user_ID, $user_email, $penci_bl_options, $penci_bl_model; $prefix = PENCI_BL_META_PREFIX; // post id $post_id = isset( $args['post_id'] ) && ! empty( $args['post_id'] ) ? $args['post_id'] : get_the_ID(); $shortcode = isset( $args['shortcode'] ) ? $args['shortcode'] : false; // check follow is enabled for post if ( $penci_bl_model->penci_bl_check_enable_follow( $post_id, $shortcode ) ) { // follow class $follow_pos_class = isset( $args['follow_pos_class'] ) ? $args['follow_pos_class'] : ''; // current post id $current_post_id = isset( $args['current_post_id'] ) && ! empty( $args['current_post_id'] ) ? $args['current_post_id'] : ''; // follow text $follow_text = isset( $args['follow_buttons']['follow'] ) && ! empty( $args['follow_buttons']['follow'] ) ? $args['follow_buttons']['follow'] : $penci_bl_options['follow_buttons']['follow']; // following text $following_text = isset( $args['follow_buttons']['following'] ) && ! empty( $args['follow_buttons']['following'] ) ? $args['follow_buttons']['following'] : $penci_bl_options['follow_buttons']['following']; // unfollow text $unfollow_text = isset( $args['follow_buttons']['unfollow'] ) && ! empty( $args['follow_buttons']['unfollow'] ) ? $args['follow_buttons']['unfollow'] : $penci_bl_options['follow_buttons']['unfollow']; // follow message $follow_message = isset( $args['follow_message'] ) ? $args['follow_message'] : $penci_bl_options['follow_message']; $html = ''; $follow_status = '0'; // Check Disable Guest Followes from settings and followsemail is not empty if ( ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) && isset( $_POST['followsemail'] ) && ! empty( $_POST['followsemail'] ) ) { $follow_email = $_POST['followsemail']; } else { $follow_email = $user_email; } // args to check user is following this post? $post_args = array( 'post_status' => 'publish', 'post_parent' => $post_id, 'post_type' => PENCI_BL_POST_TYPE, 'meta_key' => $prefix . 'post_user_email', 'meta_value' => $follow_email ); // get results from args $result = get_posts( $post_args ); // if we get result then user is following this post if ( count( $result ) > 0 ) { $follow_status = get_post_meta( $result[0]->ID, $prefix . 'follow_status', true ); } // get post type for post id $post_type = get_post_type( $current_post_id ); // show follow me form is not on home page // OR enable follow me checked in meta for post if ( $follow_status == '1' ) { $follow_status = '0'; $follow_class = 'penci-bf-following-button'; $follow_label = $following_text; } else { $follow_status = '1'; $follow_class = 'penci-bf-follow-button'; $follow_label = $follow_text; } // Check user is logged in if ( is_user_logged_in() ) { $user_args = array( 'follow_message' => $follow_message, 'follow_status' => $follow_status, 'follow_label' => $follow_label, 'follow_class' => $follow_class, 'follow_pos_class' => $follow_pos_class, 'post_id' => $post_id, 'current_post_id' => $current_post_id, 'follow_text' => $follow_text, 'following_text' => $following_text, 'unfollow_text' => $unfollow_text, ); //follow term template for register user penci_bl_get_template( 'follow-post/user.php', $user_args ); } else if ( ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) ) { //Added extra class for disable reload $extra_classes = isset( $args['disable_reload'] ) && $args['disable_reload'] == true ? 'disable-reload' : ''; // follow post privacy $privacy_page = ( isset( $penci_bl_options['gdpr_privacy_page'] ) && ! empty( $penci_bl_options['gdpr_privacy_page'] ) ) ? $penci_bl_options['gdpr_privacy_page'] : ''; $privacy_message = ( isset( $penci_bl_options['gdpr_privacy_message'] ) && ! empty( $penci_bl_options['gdpr_privacy_message'] ) ) ? $penci_bl_options['gdpr_privacy_message'] : ''; $gdpr_enable = ( isset( $penci_bl_options['gdpr_enable'] ) && ! empty( $penci_bl_options['gdpr_enable'] ) ) ? $penci_bl_options['gdpr_enable'] : ''; if ( ! empty( $privacy_message ) && ! empty( $gdpr_enable ) ) { $privacy_url = ! empty( $privacy_page ) ? get_permalink( $privacy_page ) : ''; $privacy_link = ''; if ( ! empty( $privacy_url ) && ! empty( $privacy_page ) ) { $privacy_link = '' . get_the_title( $privacy_page ) . ''; } $privacy_message = str_replace( '[privacy_policy]', $privacy_link, $privacy_message ); } else { $privacy_message = ''; } $guest_args = array( 'follow_message' => $follow_message, 'follow_status' => $follow_status, 'follow_label' => $follow_label, 'follow_class' => $follow_class, 'follow_pos_class' => $follow_pos_class, 'post_id' => $post_id, 'current_post_id' => $current_post_id, 'follow_text' => $follow_text, 'following_text' => $following_text, 'unfollow_text' => $unfollow_text, 'extra_classes' => $extra_classes, 'privacy_message' => $privacy_message, 'gdpr_enable' => $gdpr_enable ); //follow term template for guest user penci_bl_get_template( 'follow-post/guest.php', $guest_args ); } } } } if ( ! function_exists( 'penci_bl_follow_post_count_box' ) ) { /** * Load Follow Post Count Box Template * * Handles to load follow post count box tempate * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_post_count_box( $follow_message, $post_id ) { // get followers counts $numn = penci_bl_get_post_followers_count( $post_id ); $follow_message = str_replace( '{followers_count}', '' . $numn . '', $follow_message ); //follow count box template penci_bl_get_template( 'follow-post/follow-count-box.php', array( 'follow_message' => $follow_message ) ); } } /************************************ Call Follow Author Functions ***************************/ if ( ! function_exists( 'penci_bl_follow_author' ) ) { /** * Load Follow Author Template * * Handles to load follow author template * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_author( $args ) { //follow author template penci_bl_get_template( 'follow-author/follow-author.php', array( 'args' => $args ) ); } } if ( ! function_exists( 'penci_bl_follow_author_content' ) ) { /** * Load Follow Author Content Template * * Handles to load follow author content template * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_author_content( $args ) { global $wpdb, $user_ID, $user_email, $penci_bl_options, $penci_bl_model, $post; $prefix = PENCI_BL_META_PREFIX; // current post id $current_post_id = isset( $args['current_post_id'] ) && ! empty( $args['current_post_id'] ) ? $args['current_post_id'] : get_the_ID(); // current author id $author_id = isset( $args['author_id'] ) && ! empty( $args['author_id'] ) ? $args['author_id'] : $post->post_author; // follow text $follow_text = isset( $args['follow_buttons']['follow'] ) && ! empty( $args['follow_buttons']['follow'] ) ? $args['follow_buttons']['follow'] : $penci_bl_options['authors_follow_buttons']['follow']; // following text $following_text = isset( $args['follow_buttons']['following'] ) && ! empty( $args['follow_buttons']['following'] ) ? $args['follow_buttons']['following'] : $penci_bl_options['authors_follow_buttons']['following']; // unfollow text $unfollow_text = isset( $args['follow_buttons']['unfollow'] ) && ! empty( $args['follow_buttons']['unfollow'] ) ? $args['follow_buttons']['unfollow'] : $penci_bl_options['authors_follow_buttons']['unfollow']; // follow message $follow_message = isset( $args['follow_message'] ) ? $args['follow_message'] : $penci_bl_options['authors_follow_message']; $html = ''; $follow_status = '0'; // show follow me form is not on home page // Check authorid are not empty if ( ! empty( $author_id ) ) { $author_data = get_user_by( 'id', $author_id ); if ( ! empty( $author_data ) ) { // Check author data is not empty $author_label = ''; if ( isset( $author_data->display_name ) && ! empty( $author_data->display_name ) ) { $author_label = $author_data->display_name; } $follow_text = str_replace( '{author_name}', $author_label, $follow_text ); $following_text = str_replace( '{author_name}', $author_label, $following_text ); $unfollow_text = str_replace( '{author_name}', $author_label, $unfollow_text ); // Check Disable Guest Followes from settings and followsemail is not empty if ( ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) && isset( $_POST['followsemail'] ) && ! empty( $_POST['followsemail'] ) ) { $follow_email = $_POST['followsemail']; } else { $follow_email = $user_email; } // args to check user is following this post? $author_args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_parent' => $author_id, 'meta_key' => $prefix . 'author_user_email', 'meta_value' => $follow_email ); // get results from args $result = get_posts( $author_args ); // if we get result then user is following this post if ( count( $result ) > 0 ) { $follow_status = get_post_meta( $result[0]->ID, $prefix . 'follow_status', true ); } // get post type for post id $post_type = get_post_type( $current_post_id ); if ( $follow_status == '1' ) { $follow_status = '0'; $follow_class = 'penci-bf-following-button'; $follow_label = $following_text; } else { $follow_status = '1'; $follow_class = 'penci-bf-follow-button'; $follow_label = $follow_text; } // Check user is logged in if ( is_user_logged_in() ) { $user_args = array( 'follow_message' => $follow_message, 'follow_status' => $follow_status, 'follow_label' => $follow_label, 'follow_class' => $follow_class, 'author_id' => $author_id, 'current_post_id' => $current_post_id, 'follow_text' => $follow_text, 'following_text' => $following_text, 'unfollow_text' => $unfollow_text, ); //follow author template for register user penci_bl_get_template( 'follow-author/user.php', $user_args ); } else if ( ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) ) { //Added extra class for disable reload $extra_classes = isset( $args['disable_reload'] ) && $args['disable_reload'] == true ? 'disable-reload' : ''; $gdpr_enable = ( isset( $penci_bl_options['gdpr_enable'] ) && ! empty( $penci_bl_options['gdpr_enable'] ) ) ? $penci_bl_options['gdpr_enable'] : ''; // follow author privacy $privacy_page = ( isset( $penci_bl_options['gdpr_privacy_page'] ) && ! empty( $penci_bl_options['gdpr_privacy_page'] ) ) ? $penci_bl_options['gdpr_privacy_page'] : ''; $privacy_message = ( isset( $penci_bl_options['gdpr_privacy_message'] ) && ! empty( $penci_bl_options['gdpr_privacy_message'] ) ) ? $penci_bl_options['gdpr_privacy_message'] : ''; if ( ! empty( $privacy_message ) && ! empty( $gdpr_enable ) ) { $privacy_url = ! empty( $privacy_page ) ? get_permalink( $privacy_page ) : ''; $privacy_link = ''; if ( ! empty( $privacy_url ) && ! empty( $privacy_page ) ) { $privacy_link = '' . get_the_title( $privacy_page ) . ''; } $privacy_message = str_replace( '[privacy_policy]', $privacy_link, $privacy_message ); } else { $privacy_message = ''; } $guest_args = array( 'follow_message' => $follow_message, 'follow_status' => $follow_status, 'follow_label' => $follow_label, 'follow_class' => $follow_class, 'author_id' => $author_id, 'current_post_id' => $current_post_id, 'follow_text' => $follow_text, 'following_text' => $following_text, 'unfollow_text' => $unfollow_text, 'extra_classes' => $extra_classes, 'privacy_message' => $privacy_message, 'gdpr_enable' => $gdpr_enable ); //follow author template for guest user penci_bl_get_template( 'follow-author/guest.php', $guest_args ); } } } } } /************************************ Call Subscription Manage Page Functions ***************************/ if ( ! function_exists( 'penci_bl_subscribe_manage_content' ) ) { /** * Load Subscription Manage Page Content Template * * Handles to load subscription manage page content tempate * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_subscribe_manage_content() { // manage follow posts do_action( 'penci_bl_manage_follow_posts' ); // manage follow author do_action( 'penci_bl_manage_follow_authors' ); // manage follow terms do_action( 'penci_bl_manage_follow_terms' ); } } if ( ! function_exists( 'penci_bl_manage_follow_terms' ) ) { /** * Manage Follow Terms Template * */ function penci_bl_manage_follow_terms( $args = array() ) { //manage follow terms template penci_bl_get_template( 'subscribe-manage/follow-terms.php', $args ); } } if ( ! function_exists( 'penci_bl_manage_follow_posts' ) ) { /** * Manage Follow Posts Template * * Handles to manage follow posts tempate * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_manage_follow_posts( $args = array() ) { //manage follow posts template penci_bl_get_template( 'subscribe-manage/follow-posts.php', $args ); } } if ( ! function_exists( 'penci_bl_follow_posts_listing_content' ) ) { /** * Load Follow Posts Listing Table Template * * Handles to load follow posts listing table template * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_posts_listing_content( $followposts, $paging ) { //follow posts template penci_bl_get_template( 'subscribe-manage/follow-posts-listing/follow-posts-listing.php', array( 'followposts' => $followposts, 'paging' => $paging ) ); } } if ( ! function_exists( 'penci_bl_manage_follow_authors' ) ) { /** * Manage Follow authors Template * * Handles to manage follow authors tempate * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_manage_follow_authors( $args = array() ) { //manage follow authors template penci_bl_get_template( 'subscribe-manage/follow-authors.php', $args ); } } if ( ! function_exists( 'penci_bl_follow_authors_listing_content' ) ) { /** * Load Follow authors Listing Table Template * * Handles to load follow authors listing table template * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_authors_listing_content( $followauthors, $paging, $disabled_actions = false ) { //follow authors template penci_bl_get_template( 'subscribe-manage/follow-authors-listing/follow-authors-listing.php', array( 'followauthors' => $followauthors, 'paging' => $paging, 'disabled_actions' => $disabled_actions, ) ); } } /************************************ Call Author's follower list Functions ***************************/ if ( ! function_exists( 'penci_bl_author_followers' ) ) { /** * User's Followers Template * * Handles to manage User's Followers tempate * * @package Penci Bookmark Follow * @since 1.8.5 */ function penci_bl_author_followers( $args = array() ) { //manage author's followers template penci_bl_get_template( 'author-followers/author-followers.php', $args ); } } if ( ! function_exists( 'penci_bl_author_followers_listing_content' ) ) { /** * Load author's Followers Listing Table Template * * Handles to load author's Followers listing table template * * @package Penci Bookmark Follow * @since 1.8.5 */ function penci_bl_author_followers_listing_content( $followers, $paging ) { //author's Followers template penci_bl_get_template( 'author-followers/author-followers-listing.php', array( 'followers' => $followers, 'paging' => $paging ) ); } } /************************************ Call Unsubscribe Page Functions ***************************/ if ( ! function_exists( 'penci_bl_unsubscribe_content' ) ) { /** * Load Unsubscribe Page Content Template * * Handles to load unsubscribe page content tempate * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_unsubscribe_content() { //follow count box template penci_bl_get_template( 'unsubscribe/content.php' ); } } /************************************ Call Email Template Functions ***************************/ if ( ! function_exists( 'penci_bl_default_email_template' ) ) { function penci_bl_default_email_template( $message, $unsubscribe = false, $email = '', $unsubscribedata = array() ) { global $penci_bl_options; $unsubscribe_message = ''; // site name with url $site_name = get_bloginfo( 'name' ); // Check Append Unsubscribe URL is enable if ( $unsubscribe ) { // get unsubscibe message $unsubscribe_message = penci_bl_get_unsubscribe_message(); // Check disable unsubscribe confirmation option checked if ( isset( $penci_bl_options['unsubscribe_confirmation'] ) && ! empty( $penci_bl_options['unsubscribe_confirmation'] ) && $penci_bl_options['recipient_per_email'] == 1 ) { // get direct unsubscibe message with unsubscibe link $unsubscribe_message = penci_bl_get_unsubscribe_link_message( $email, $unsubscribedata ); } } $html_email_args = array( 'site_name' => $site_name, 'message' => $message, 'unsubscribe_message' => $unsubscribe_message, ); //html email template penci_bl_get_template( 'emailtemplate/htmlemail.php', $html_email_args ); } } /************************************ Call Follow Term Functions ***************************/ if ( ! function_exists( 'penci_bl_follow_term' ) ) { /** * Load Follow Term Template * */ function penci_bl_follow_term( $args ) { //follow term template penci_bl_get_template( 'follow-term/follow-term.php', array( 'args' => $args ) ); } } if ( ! function_exists( 'penci_bl_follow_term_content' ) ) { function penci_bl_follow_term_content( $args ) { global $wpdb, $user_ID, $user_email, $penci_bl_options, $penci_bl_model; $default_taxonomy = ''; $default_term_id = ''; $prefix = PENCI_BL_META_PREFIX; if ( is_archive() ) { $term_default_data = get_queried_object(); $default_taxonomy = $term_default_data->taxonomy; $default_term_id = $term_default_data->term_id; } // current post id $current_post_id = isset( $args['current_post_id'] ) && ! empty( $args['current_post_id'] ) ? $args['current_post_id'] : get_the_ID(); // follow post type $follow_posttype = isset( $args['follow_posttype'] ) && ! empty( $args['follow_posttype'] ) ? $args['follow_posttype'] : ''; // follow taxonomy slug $follow_taxonomy_slug = isset( $args['follow_taxonomy'] ) && ! empty( $args['follow_taxonomy'] ) ? $args['follow_taxonomy'] : $default_taxonomy; // follow term slug $follow_term_id = isset( $args['follow_term_id'] ) && ! empty( $args['follow_term_id'] ) ? $args['follow_term_id'] : $default_term_id; // follow message $follow_message = isset( $args['follow_message'] ) ? $args['follow_message'] : $penci_bl_options['term_follow_message']; // follow text $follow_text = isset( $args['follow_buttons']['follow'] ) && ! empty( $args['follow_buttons']['follow'] ) ? $args['follow_buttons']['follow'] : $penci_bl_options['follow_buttons']['follow']; // following text $following_text = isset( $args['follow_buttons']['following'] ) && ! empty( $args['follow_buttons']['following'] ) ? $args['follow_buttons']['following'] : $penci_bl_options['follow_buttons']['following']; // unfollow text $unfollow_text = isset( $args['follow_buttons']['unfollow'] ) && ! empty( $args['follow_buttons']['unfollow'] ) ? $args['follow_buttons']['unfollow'] : $penci_bl_options['follow_buttons']['unfollow']; $html = ''; $follow_status = '0'; // show follow me form is not on home page // Check texonomy and termid are not empty if ( ! empty( $follow_taxonomy_slug ) && ! empty( $follow_term_id ) ) { $term_data = get_term_by( 'id', $follow_term_id, $follow_taxonomy_slug ); if ( ! empty( $term_data ) ) { // Check term data is not empty $term_label = ''; if ( isset( $term_data->name ) && ! empty( $term_data->name ) ) { $term_label = $term_data->name; } // Check Disable Guest Followes from settings and followsemail is not empty if ( ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) && isset( $_POST['followsemail'] ) && ! empty( $_POST['followsemail'] ) ) { $follow_email = $_POST['followsemail']; } else { $follow_email = $user_email; } // args to check user is following this post? $term_args = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_parent' => $follow_term_id, 'meta_key' => $prefix . 'term_user_email', 'meta_value' => $follow_email ); // get results from args $result = get_posts( $term_args ); // if we get result then user is following this post if ( count( $result ) > 0 ) { $follow_status = get_post_meta( $result[0]->ID, $prefix . 'follow_status', true ); } // get post type for post id $post_type = get_post_type( $current_post_id ); if ( $follow_status == '1' ) { $follow_status = '0'; $follow_class = 'penci-bf-following-button'; $follow_label = $following_text; } else { $follow_status = '1'; $follow_class = 'penci-bf-follow-button'; $follow_label = $follow_text; } // Check user is logged in if ( is_user_logged_in() ) { $user_args = array( 'follow_message' => $follow_message, 'follow_status' => $follow_status, 'follow_class' => $follow_class, 'follow_posttype' => $follow_posttype, 'follow_taxonomy_slug' => $follow_taxonomy_slug, 'follow_term_id' => $follow_term_id, 'follow_term_name' => $term_label, 'current_post_id' => $current_post_id, 'follow_text' => $follow_text, 'following_text' => $following_text, 'unfollow_text' => $unfollow_text, ); //follow term template for register user penci_bl_get_template( 'follow-term/user.php', $user_args ); } else if ( ( ! isset( $penci_bl_options['disable_follow_guest'] ) || ( isset( $penci_bl_options['disable_follow_guest'] ) && empty( $penci_bl_options['disable_follow_guest'] ) ) ) ) { //Added extra class for disable reload $extra_classes = isset( $args['disable_reload'] ) && $args['disable_reload'] == true ? 'disable-reload' : ''; // follow term privacy $privacy_page = ( isset( $penci_bl_options['gdpr_privacy_page'] ) && ! empty( $penci_bl_options['gdpr_privacy_page'] ) ) ? $penci_bl_options['gdpr_privacy_page'] : ''; $gdpr_enable = ( isset( $penci_bl_options['gdpr_enable'] ) && ! empty( $penci_bl_options['gdpr_enable'] ) ) ? $penci_bl_options['gdpr_enable'] : ''; $privacy_message = ( isset( $penci_bl_options['gdpr_privacy_message'] ) && ! empty( $penci_bl_options['gdpr_privacy_message'] ) ) ? $penci_bl_options['gdpr_privacy_message'] : ''; if ( ! empty( $privacy_message ) && ! empty( $gdpr_enable ) ) { $privacy_url = ! empty( $privacy_page ) ? get_permalink( $privacy_page ) : ''; $privacy_link = ''; if ( ! empty( $privacy_url ) && ! empty( $privacy_page ) ) { $privacy_link = '' . get_the_title( $privacy_page ) . ''; } $privacy_message = str_replace( '[privacy_policy]', $privacy_link, $privacy_message ); } else { $privacy_message = ''; } $guest_args = array( 'follow_message' => $follow_message, 'follow_status' => $follow_status, 'follow_term_name' => $term_label, 'follow_class' => $follow_class, 'follow_posttype' => $follow_posttype, 'follow_taxonomy_slug' => $follow_taxonomy_slug, 'follow_term_id' => $follow_term_id, 'current_post_id' => $current_post_id, 'follow_text' => $follow_text, 'following_text' => $following_text, 'unfollow_text' => $unfollow_text, 'extra_classes' => $extra_classes, 'privacy_message' => $privacy_message, 'gdpr_enable' => $gdpr_enable ); //follow term template for guest user penci_bl_get_template( 'follow-term/guest.php', $guest_args ); } } } } } if ( ! function_exists( 'penci_bl_terms_listing_content' ) ) { /** * Load Follow Terms Listing Table Template * * Handles to load follow terms listing table template * * @package Follow My Blog Post * @since 1.1.0 */ function penci_bl_terms_listing_content( $followterms, $paging ) { //follow terms template penci_bl_get_template( 'subscribe-manage/follow-terms-listing/follow-terms-listing.php', array( 'followterms' => $followterms, 'paging' => $paging ) ); } } if ( ! function_exists( 'penci_bl_follow_term_count_box' ) ) { function penci_bl_follow_term_count_box( $follow_message, $follow_term_id ) { // get user counts $numn = penci_bl_get_term_followers_count( $follow_term_id ); $follow_message = str_replace( '{followers_count}', '' . $numn . '', $follow_message ); //follow count box template penci_bl_get_template( 'follow-term/follow-count-box.php', array( 'follow_message' => $follow_message ) ); } } if ( ! function_exists( 'penci_bl_get_term_thumb_url' ) ) { function penci_bl_get_term_thumb_url( $term_id, $size = 'thumbnail' ) { $thumb_url = get_template_directory_uri() . '/images/no-thumb.jpg'; $cat_data = get_option( "category_$term_id" ); $thumb_id = isset( $cat_data['thumbnail_id'] ) ? $cat_data['thumbnail_id'] : ''; if ( $thumb_id ) { $thumb_url = wp_get_attachment_url( $thumb_id, $size ); } return $thumb_url; } }inc/class-penci-bf-model.php000064400000310670147600022000011710 0ustar00penci_bl_nohtml_kses( $data ); } else { if ( $limited == true ) { $data = wp_kses_post( $data ); } } $data = stripslashes_deep( $data ); return $data; } /** * Strip Html Tags * * It will sanitize text input (strip html tags, and escape characters) * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_nohtml_kses( $data = array() ) { if ( is_array( $data ) ) { $data = array_map( array( $this, 'penci_bl_nohtml_kses' ), $data ); } elseif ( is_string( $data ) ) { $data = wp_filter_nohtml_kses( $data ); } return $data; } /** * Get Post data * * Handles to get post data for * followpost post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_follow_post_data( $args = array() ) { // Check if post type selected from filter if ( isset( $args['post_type'] ) && ! empty( $args['post_type'] ) ) { $post_types = array( $args['post_type'] ); } else { // get all custom post types $post_types = get_post_types( array( 'public' => true ), 'names' ); } //check if its custom post types created or not $checkpostargs = array( 'post_type' => PENCI_BL_POST_TYPE, 'post_status' => 'publish', 'posts_per_page' => '-1' ); //fire query in to table for retriving data $result = new WP_Query( $checkpostargs ); if ( ! empty( $result->posts ) ) { foreach ( $result->posts as $key => $value ) { //if custom post type is created for that post, than store its id $postids[] = $value->post_parent; } } //if we dont get any id that take it empty if ( empty( $postids ) ) { $postids[] = 0; } $followpostargs = array( 'post_type' => $post_types, 'post__in' => $postids, ); // added since 1.8.6 if ( is_user_logged_in() ) { $user = wp_get_current_user(); $role = ( array ) $user->roles; if ( ! in_array( 'administrator', $role ) ) { // if login user is not admin $args['author'] = get_current_user_id(); } } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { $followpostargs['s'] = $args['search']; } $followpostargs = wp_parse_args( $followpostargs, $args ); //fire query in to table for retriving data $result = new WP_Query( $followpostargs ); //retrived data is in object format so assign that data to array for listing $followpostslist = $this->penci_bl_object_to_array( $result->posts ); // Check if post type counter from filter if ( isset( $args['count'] ) && ! empty( $args['count'] ) ) { return count( $followpostslist ); } // if get list for data list then return data with data and total array if ( isset( $args['penci_bl_list_data'] ) && ! empty( $args['penci_bl_list_data'] ) ) { $data_res['data'] = $followpostslist; //To get total count of post using "found_posts" and for users "total_users" parameter $data_res['total'] = isset( $result->found_posts ) ? $result->found_posts : ''; return $data_res; } return $followpostslist; } /** * Get Post Users data * * Handles to get users data for * post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_follow_post_users_data( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; $followpostusersargs = array( 'post_type' => PENCI_BL_POST_TYPE, 'post_status' => 'publish' ); $followpostusersargs = wp_parse_args( $args, $followpostusersargs ); $followpostusersargs['posts_per_page'] = '-1'; //if search using post parent if ( isset( $args['postid'] ) ) { $followpostusersargs['post_parent'] = $args['postid']; } //if search using user if ( isset( $args['author'] ) ) { $followpostusersargs['author'] = $args['author']; } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { $metaargs[] = array( 'key' => $prefix . 'post_user_email', 'value' => $args['search'], 'compare' => 'LIKE' ); } $followpostusersargs['meta_key'] = $prefix . 'follow_status'; $followpostusersargs['meta_value'] = '1'; if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $metaargs[] = array( 'key' => $prefix . 'post_user_email', 'value' => $args['penci_bl_email'] ); } if ( ! empty( $metaargs ) ) { //$followpostusersargs['meta_query'] = $metaargs; } //if returns only id if ( isset( $args['fields'] ) && ! empty( $args['fields'] ) ) { $followpostusersargs['fields'] = $args['fields']; } //get order by records $followpostusersargs['order'] = 'DESC'; $followpostusersargs['orderby'] = 'date'; $guest = false; if ( isset( $args['post__in'] ) && ! empty( $args['post__in'] ) ) { $followpostusersargs = []; $followpostusersargs['post__in'] = $args['post__in']; $guest = true; } //fire query in to table for retriving data $result = new WP_Query( $followpostusersargs ); $followpostuserslist = $this->penci_bl_object_to_array( $result->posts ); if ( is_array( $followpostuserslist ) && ! $guest ) { foreach ( $followpostuserslist as $post_id => $post_data ) { if ( isset( $post_data['post_parent'] ) && $post_data['post_parent'] ) { if ( empty( get_post( $post_data['post_parent'] ) ) ) { unset( $followpostuserslist[ $post_id ] ); } } else { unset( $followpostuserslist[ $post_id ] ); } } } if ( isset( $args['count'] ) && $args['count'] == '1' ) { $followpostuserslist = count( $followpostuserslist ); } else if ( isset( $args['penci_bl_user_list_data'] ) && ! empty( $args['penci_bl_user_list_data'] ) ) { $data_res['data'] = $followpostuserslist; //To get total count of post using "found_posts" and for users "total_users" parameter $data_res['total'] = isset( $result->found_posts ) ? $result->found_posts : ''; return $data_res; } if ( is_array( $followpostuserslist ) ) { $page = isset( $args['paged'] ) && $args['paged'] ? $args['paged'] : 1; $ppp = isset( $args['posts_per_page'] ) && $args['posts_per_page'] ? $args['posts_per_page'] : 10; $total = count( $followpostuserslist ); if ( $total > $ppp ) { $followpostuserslist = array_slice( $followpostuserslist, ( $page - 1 ) * $ppp, $ppp ); } } return $followpostuserslist; } /** * Get Post User Logs data * * Handles to get user logs data for * post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_follow_post_user_logs_data( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; $followeduserlogssargs = array( 'post_type' => PENCI_BL_LOGS_POST_TYPE, 'post_status' => 'publish', 'posts_per_page' => '-1' ); //if search using post parent if ( isset( $args['logid'] ) ) { $followeduserlogssargs['post_parent'] = $args['logid']; } //if returns only id if ( isset( $args['fields'] ) && ! empty( $args['fields'] ) ) { $followeduserlogssargs['fields'] = $args['fields']; } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { //$followeduserlogssargs['s'] = $args['search']; $metaargs[] = array( 'key' => $prefix . 'log_email_data', 'value' => $args['search'], 'compare' => 'LIKE' ); } if ( ! empty( $metaargs ) ) { $followeduserlogssargs['meta_query'] = $metaargs; } //fire query in to table for retriving data $result = new WP_Query( $followeduserlogssargs ); //retrived data is in object format so assign that data to array for listing $followeduserlogslist = $this->penci_bl_object_to_array( $result->posts ); return $followeduserlogslist; } /** * Bulk Follow Post Delete Action * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_follow_post_delete( $args = array() ) { if ( isset( $args['parent_id'] ) && ! empty( $args['parent_id'] ) ) { foreach ( $args['parent_id'] as $parent_id ) { $ids = $this->penci_bl_get_follow_post_users_data( array( 'postid' => $parent_id, 'fields' => 'ids' ) ); foreach ( $ids as $id ) { $log_ids = $this->penci_bl_get_follow_post_user_logs_data( array( 'logid' => $id, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $id, true ); } } } } /** * Bulk Follow Author Delete Action * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_follow_author_delete( $args = array() ) { if ( isset( $args['authorid'] ) && ! empty( $args['authorid'] ) ) { foreach ( $args['authorid'] as $authorid ) { $ids = $this->penci_bl_get_follow_author_users_data( array( 'authorid' => $authorid, 'fields' => 'ids' ) ); foreach ( $ids as $id ) { $log_ids = $this->penci_bl_get_follow_author_user_logs_data( array( 'logid' => $id, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $id, true ); } } } } /** * Bulk Follow Term Delete Action * * @package Follow My Blog Post * @since 1.0.0 */ public function penci_bl_bulk_follow_term_delete( $args = array() ) { if( isset( $args['termid'] ) && !empty( $args['termid'] ) ) { foreach ( $args['termid'] as $termid ) { $ids = $this->penci_bl_get_follow_term_users_data( array( 'termid' => $termid, 'fields' => 'ids' ) ); foreach ( $ids as $id ) { $log_ids = $this->penci_bl_get_follow_term_user_logs_data( array( 'logid' => $id, 'fields' => 'ids' ) ); foreach ( $log_ids as $log_id ) { wp_delete_post( $log_id, true ); } wp_delete_post( $id, true ); } } } } /** * Bulk Delete Action * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_delete( $args = array() ) { if ( isset( $args['id'] ) && ! empty( $args['id'] ) ) { wp_delete_post( $args['id'], true ); } } /** * Bulk Subscribe Action * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_subscribe( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; if ( isset( $args['id'] ) && ! empty( $args['id'] ) ) { update_post_meta( $args['id'], $prefix . 'follow_status', '1' ); } } /** * Bulk Unsubscribe Action * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_bulk_unsubscribe( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; if ( isset( $args['id'] ) && ! empty( $args['id'] ) ) { update_post_meta( $args['id'], $prefix . 'follow_status', '0' ); } } /** * Convert Object To Array * * Converting Object Type Data To Array Type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_object_to_array( $result ) { $array = array(); foreach ( $result as $key => $value ) { if ( is_object( $value ) ) { $array[ $key ] = $this->penci_bl_object_to_array( $value ); } else { $array[ $key ] = $value; } } return $array; } /** * Check Enable Follow * * Handles to check enable follow me * checkbox check or not for * particular post and post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_check_enable_follow( $post_id, $shortcode = false ) { global $penci_bl_options; if ( $shortcode ) { return true; } $prefix = PENCI_BL_META_PREFIX; $post_type = get_post_type( $post_id ); // get disable follow value from post meta $disable_follow = get_post_meta( $post_id, $prefix . 'disable_follow_me', true ); // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'prevent_item_' . $post_type ] ) ? $penci_bl_options[ 'prevent_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['prevent_type'] ) ? $penci_bl_options['prevent_type'] : array(); // check if not set disable from metabox and set filter on from setting page if ( $disable_follow != '1' && ( in_array( $post_id, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return true; } else { return false; } } /** * Shortcode Replace * * Handles to replace entered shortcodes * with corresponding values * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_replace_shortcodes( $post_id, $text ) { global $current_user; $post_title = $post_content = ''; // get user details $user_info = get_user_by( 'id', $current_user->ID ); // get user name $user_name = isset( $user_info->user_login ) ? $user_info->user_login : ''; if ( ! empty( $post_id ) ) { // get post data using post id $post_data = get_post( $post_id ); $post_title = isset( $post_data->post_title ) && ! empty( $post_data->post_title ) ? $post_data->post_title : esc_html__( 'Hello world!', 'penci-bookmark-follow' ); $post_content = isset( $post_data->post_content ) ? strip_shortcodes( $post_data->post_content ) : ''; } // post name $post_name = isset( $_POST['post_title'] ) && ! empty( $_POST['post_title'] ) ? $_POST['post_title'] : $post_title; $post_name = $this->penci_bl_escape_slashes_deep( $post_name ); // post description with 260 characters $post_description = $this->penci_bl_short_content( $post_content, 260 ); // post link $post_link = '' . $post_name . ''; // site name with url $site_name = get_bloginfo( 'name' ); // site name with url $site_link = '' . $site_name . ''; // replace of shortcodes $text = str_replace( '{post_name}', $post_name, $text ); $text = str_replace( '{post_description}', $post_description, $text ); $text = str_replace( '{post_link}', $post_link, $text ); $text = str_replace( '{site_name}', $site_name, $text ); $text = str_replace( '{site_link}', $site_link, $text ); $text = str_replace( '{user_name}', $user_name, $text ); //return replaced values return apply_filters( 'penci_bl_unsubscribe_shortcode', $text, $post_id ); } /** * Send Emails With BCC for follow post * * Handle to send email with bcc for follow post * * @package Penci Bookmark Follow * @since 1.0.0 * * When disable unsubscribe confirmation checked send email individually * @since 1.7.6 */ public function penci_bl_post_send_mail_with_bcc( $followers_data, $subject, $message, $post_id = '', $type = '', $comment_data = '' ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $setmail = false; $recipients = ''; // Check if diable unsubscribe confirmation checked then send email individually if ( $penci_bl_options['recipient_per_email'] == 1 || ( isset( $penci_bl_options['unsubscribe_confirmation'] ) && ! empty( $penci_bl_options['unsubscribe_confirmation'] ) && $penci_bl_options['recipient_per_email'] == 1 ) ) { // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'post_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // unsubscribe config array send post id and type to unsubscription email $unsub_data = array( 'type' => 'post', 'id' => $value['ID'] ); // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); $penci_bl_diff_lang_email = array(); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty( $penci_bl_icl_admin_lang ) ) { // If user's admin language set then take it as user language $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } $this->penci_bl_post_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_emailid', $post_id, $unsub_data, $type, $comment_data ); } else { // send email to each user individually $setmail = $this->penci_bl_send_email( $email, $subject, $message, '', '', true, $unsub_data ); } } } else if ( empty( $penci_bl_options['recipient_per_email'] ) ) { $penci_bl_diff_langs = $penci_bl_diff_lang_email = array(); // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'post_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty ( $penci_bl_icl_admin_lang ) ) { // If user's admin language is set if ( ! in_array( $penci_bl_icl_admin_lang, $penci_bl_diff_langs ) ) { // If user's admin language is not present in our array $penci_bl_diff_langs[] = $penci_bl_icl_admin_lang; $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // Else $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } } else { if ( ! empty( $email ) ) { empty( $recipients ) ? $recipients = "$email" : $recipients .= ", $email"; // Bcc Headers now constructed by phpmailer class } } } if ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { // If our language array is not empty $unsub_data = ''; $this->penci_bl_post_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $post_id, $unsub_data, $type, $comment_data ); } } else { // we're using recipient_per_email $count = 1; $batch = $penci_bl_diff_langs = $penci_bl_diff_lang_email = array(); // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'post_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty ( $penci_bl_icl_admin_lang ) ) { // If user's admin language is set if ( ! in_array( $penci_bl_icl_admin_lang, $penci_bl_diff_langs ) ) { // If user's admin language is not present in our array $penci_bl_diff_langs[] = $penci_bl_icl_admin_lang; $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // Else $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } } else { if ( ! empty( $email ) ) { empty( $recipients ) ? $recipients = "$email" : $recipients .= ", $email"; // Bcc Headers now constructed by phpmailer class } } if ( $penci_bl_options['recipient_per_email'] == $count ) { $count = 0; if ( ! empty( $recipients ) ) { $batch[] = $recipients; $recipients = ''; } elseif ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { $unsub_data = ''; $this->penci_bl_post_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $post_id, $unsub_data, $type, $comment_data ); $penci_bl_diff_lang_email = array(); } } $count ++; } // add any partially completed batches to our batch array if ( ! empty( $recipients ) ) { $batch[] = $recipients; } elseif ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { $unsub_data = ''; $this->penci_bl_post_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $post_id, $unsub_data, $type, $comment_data ); $penci_bl_diff_lang_email = array(); } } // actually send mail if ( isset( $batch ) && ! empty( $batch ) ) { foreach ( $batch as $recipients ) { $newheaders = "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $newheaders, '', true ); } } else { if ( ! empty( $recipients ) ) { $newheaders = "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $newheaders, '', true ); } } return apply_filters( 'penci_bl_post_send_mail_with_bcc', $setmail, $followers_data ); } /** * Send Emails And Create Logs * * Handle to send email to subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_create_logs( $post_id ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $flag = false; $post_type = get_post_type( $post_id ); // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'notification_item_' . $post_type ] ) ? $penci_bl_options[ 'notification_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); // check if post have permission to display follow me form & checkbox if ( ! ( in_array( $post_id, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return false; } // Get Post subject from meta $post_email_subject = get_post_meta( $post_id, $prefix . 'email_subject', true ); // Get Post message from meta $post_email_body = get_post_meta( $post_id, $prefix . 'email_body', true ); if ( isset( $post_email_subject ) && ! empty( $post_email_subject ) ) { $subject = $post_email_subject; } else { $subject = $penci_bl_options['email_subject']; } if ( isset( $post_email_body ) && ! empty( $post_email_body ) ) { $message = $post_email_body; } else { $message = $penci_bl_options['email_body']; } // check if post have allow notification from Post / Page Notification Events > Trigger Emails > When post / page updated if ( isset( $penci_bl_options['post_trigger_notification']['post_update'] ) && $penci_bl_options['post_trigger_notification']['post_update'] == '1' ) { $post_id = apply_filters( 'pencibf_change_send_mail_post_followers', $post_id ); $flag = $this->penci_bl_post_send_mail( $subject, $message, $post_id, 'post', '' ); } // check if post have allow notification from Category / Tags Notification events > Trigger Emails > When post / page updated if ( isset( $penci_bl_options['term_trigger_notification']['post_update'] ) && $penci_bl_options['term_trigger_notification']['post_update'] == '1' ) { $flag = $this->penci_bl_all_term_send_mail( $subject, $message, $post_id, 'term_update', '' ); } // check if post have allow notification from author Notification events > Trigger Emails > When post / page updated if ( isset( $penci_bl_options['author_trigger_notification']['post_update'] ) && $penci_bl_options['author_trigger_notification']['post_update'] == '1' ) { $post = get_post( $post_id ); $post_author = $post->post_author; $flag = $this->penci_bl_all_author_send_mail( $subject, $message, $post_id, $post_author, 'author_update', '' ); } if ( $flag ) { return true; } } /** * Send Emails And Create Logs * * Handle to send email to subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_post_send_mail( $subject, $message, $post_id, $type, $comment_data ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $ids = array(); // get the list of all users who are following this post $args = array( 'postid' => $post_id, 'penci_bl_status' => 'subscribe' ); $followers_data = $this->penci_bl_get_follow_post_users_data( $args ); // check followers are not exists if ( empty( $followers_data ) ) { return false; } $subject = $this->penci_bl_replace_shortcodes( $post_id, $subject ); // replace email shortcodes with content $message = $this->penci_bl_replace_shortcodes( $post_id, $message ); $flag = $this->penci_bl_post_send_mail_with_bcc( $followers_data, $subject, $message, $post_id, $type, $comment_data ); if ( ! $flag ) { return false; } // if mail is successfully send then create log based on enable_log from settings if ( isset( $penci_bl_options['enable_log'] ) && $penci_bl_options['enable_log'] == '1' ) { // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { // get mail data $mail_data = $subject . "%$%$%" . $message; $args = array( 'post_title' => $value['post_author'], 'post_content' => '', 'post_type' => PENCI_BL_LOGS_POST_TYPE, 'post_status' => 'publish', 'post_parent' => $value['ID'], 'post_author' => $value['post_author'] ); $follow_post_log_id = wp_insert_post( $args ); if ( $follow_post_log_id ) { // update email data meta update_post_meta( $follow_post_log_id, $prefix . 'log_email_data', nl2br( $mail_data ) ); } } } // add action to use 3rd party plugin when mail is sent do_action( 'penci_bl_post_send_mail', $followers_data, $post_id ); return true; } /** * Send Emails With BCC for follow term * * Handle to send email with bcc for follow term * * @package Penci Bookmark Follow * @since 1.0.0 * * When disable unsubscribe confirmation checked send email individually * @since 1.7.6 */ public function penci_bl_term_send_mail_with_bcc( $followers_data, $subject, $message, $term_id = '', $taxonomy = '', $post_id = '', $type = '', $comment_data = '' ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $setmail = false; $recipients = ''; // Check if diable unsubscribe confirmation checked then send email individually if ( $penci_bl_options['recipient_per_email'] == 1 || ( isset( $penci_bl_options['unsubscribe_confirmation'] ) && ! empty( $penci_bl_options['unsubscribe_confirmation'] ) && $penci_bl_options['recipient_per_email'] == 1 ) ) { // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'term_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // unsubscribe config array send post id and type to unsubscription email $unsub_data = array( 'type' => 'term', 'id' => $value['ID'] ); // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); $penci_bl_diff_lang_email = array(); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty( $penci_bl_icl_admin_lang ) ) { // If user's admin language set then take it as user language $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } $setmail = $this->penci_bl_term_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_emailid', $term_id, $taxonomy, $post_id, $unsub_data, $type, $comment_data ); } else { // send email $setmail = $this->penci_bl_send_email( $email, $subject, $message, '', '', true, $unsub_data ); } } } else if ( empty( $penci_bl_options['recipient_per_email'] ) ) { $penci_bl_diff_langs = $penci_bl_diff_lang_email = array(); // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'term_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty ( $penci_bl_icl_admin_lang ) ) { // If user's admin language is set if ( ! in_array( $penci_bl_icl_admin_lang, $penci_bl_diff_langs ) ) { // If user's admin language is not present in our array $penci_bl_diff_langs[] = $penci_bl_icl_admin_lang; $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // Else $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } } else { if ( ! empty( $email ) ) { empty( $recipients ) ? $recipients = "$email" : $recipients .= ", $email"; // Bcc Headers now constructed by phpmailer class } } } if ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { // If our language array is not empty $unsub_data = ''; $setmail = $this->penci_bl_term_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $term_id, $taxonomy, $post_id, $unsub_data, $type, $comment_data ); } } else { // we're using recipient_per_email $count = 1; $batch = $penci_bl_diff_langs = $penci_bl_diff_lang_email = array(); // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'term_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty ( $penci_bl_icl_admin_lang ) ) { // If user's admin language is set if ( ! in_array( $penci_bl_icl_admin_lang, $penci_bl_diff_langs ) ) { // If user's admin language is not present in our array $penci_bl_diff_langs[] = $penci_bl_icl_admin_lang; $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // Else $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } } else { if ( ! empty( $email ) ) { empty( $recipients ) ? $recipients = "$email" : $recipients .= ", $email"; // Bcc Headers now constructed by phpmailer class } } if ( $penci_bl_options['recipient_per_email'] == $count ) { $count = 0; if ( ! empty( $recipients ) ) { $batch[] = $recipients; $recipients = ''; } elseif ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { $unsub_data = ''; $setmail = $this->penci_bl_term_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $term_id, $taxonomy, $post_id, $unsub_data, $type, $comment_data ); $penci_bl_diff_lang_email = array(); } } $count ++; } // add any partially completed batches to our batch array if ( ! empty( $recipients ) ) { $batch[] = $recipients; } elseif ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { $unsub_data = ''; $setmail = $this->penci_bl_term_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $term_id, $taxonomy, $post_id, $unsub_data, $type, $comment_data ); $penci_bl_diff_lang_email = array(); } } // actually send mail if ( isset( $batch ) && ! empty( $batch ) ) { foreach ( $batch as $recipients ) { $newheaders = "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $newheaders, '', true ); } } else { if ( ! empty( $recipients ) ) { $newheaders = "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $newheaders, '', true ); } } return apply_filters( 'penci_bl_term_send_mail_with_bcc', $setmail, $followers_data ); } /** * Send Emails With BCC for follow author * * Handle to send email with bcc for follow author * * @package Penci Bookmark Follow * @since 1.0.0 * * When disable unsubscribe confirmation checked send email individually * @since 1.7.6 */ public function penci_bl_author_send_mail_with_bcc( $followers_data, $subject, $message, $authorid = '', $post_id = '', $type = '', $comment_data = '' ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $setmail = false; $recipients = ''; // Check if diable unsubscribe confirmation checked then send email individually if ( $penci_bl_options['recipient_per_email'] == 1 || ( isset( $penci_bl_options['unsubscribe_confirmation'] ) && ! empty( $penci_bl_options['unsubscribe_confirmation'] ) && $penci_bl_options['recipient_per_email'] == 1 ) ) { // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'author_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // unsubscribe config array send post id and type to unsubscription email $unsub_data = array( 'type' => 'author', 'id' => $value['ID'] ); // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); $penci_bl_diff_lang_email = array(); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty( $penci_bl_icl_admin_lang ) ) { // If user's admin language set then take it as user language $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } $setmail = $this->penci_bl_auth_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_emailid', $post_id, $unsub_data, $authorid, $type, $comment_data ); } else { // send email $setmail = $this->penci_bl_send_email( $email, $subject, $message, '', '', true, $unsub_data ); } } } else if ( empty( $penci_bl_options['recipient_per_email'] ) ) { $penci_bl_diff_langs = $penci_bl_diff_lang_email = array(); // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'author_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty ( $penci_bl_icl_admin_lang ) ) { // If user's admin language is set if ( ! in_array( $penci_bl_icl_admin_lang, $penci_bl_diff_langs ) ) { // If user's admin language is not present in our array $penci_bl_diff_langs[] = $penci_bl_icl_admin_lang; $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // Else $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } } else { if ( ! empty( $email ) ) { empty( $recipients ) ? $recipients = "$email" : $recipients .= ", $email"; // Bcc Headers now constructed by phpmailer class } } } if ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { // If our language array is not empty $unsub_data = ''; $setmail = $this->penci_bl_auth_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $post_id, $unsub_data, $authorid, $type, $comment_data ); } } else { // we're using recipient_per_email $count = 1; $batch = $penci_bl_diff_langs = $penci_bl_diff_lang_email = array(); // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { $email = get_post_meta( $value['ID'], $prefix . 'author_user_email', true ); if ( ! empty( $value['post_author'] ) ) { $email = $this->penci_bl_get_user_email_from_id( $value['post_author'] ); } // sanity check -- make sure we have a valid email if ( ! is_email( $email ) || empty( $email ) ) { continue; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Get user data from user_email $user = get_user_by( 'email', $email ); if ( ! empty ( $user ) ) { // Get Admin Language for user, if $user is not empty $penci_bl_icl_admin_lang = get_user_meta( $user->data->ID, 'icl_admin_language', true ); } if ( ! empty ( $penci_bl_icl_admin_lang ) ) { // If user's admin language is set if ( ! in_array( $penci_bl_icl_admin_lang, $penci_bl_diff_langs ) ) { // If user's admin language is not present in our array $penci_bl_diff_langs[] = $penci_bl_icl_admin_lang; $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } else { // Else $penci_bl_diff_lang_email[ $penci_bl_icl_admin_lang ][] = $email; } } else { // If user's admin language is not set then take current admin language as user language $penci_bl_diff_lang_email[ ICL_LANGUAGE_CODE ][] = $email; } } else { if ( ! empty( $email ) ) { empty( $recipients ) ? $recipients = "$email" : $recipients .= ", $email"; // Bcc Headers now constructed by phpmailer class } } if ( $penci_bl_options['recipient_per_email'] == $count ) { $count = 0; if ( ! empty( $recipients ) ) { $batch[] = $recipients; $recipients = ''; } elseif ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { $unsub_data = ''; $setmail = $this->penci_bl_auth_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $post_id, $unsub_data, $authorid, $type, $comment_data ); $penci_bl_diff_lang_email = array(); } } $count ++; } // add any partially completed batches to our batch array if ( ! empty( $recipients ) ) { $batch[] = $recipients; } elseif ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { $unsub_data = ''; $setmail = $this->penci_bl_auth_send_email_per_lang( $penci_bl_diff_lang_email, 'pencibf_bcc', $post_id, $unsub_data, $authorid, $type, $comment_data ); $penci_bl_diff_lang_email = array(); } } // actually send mail if ( isset( $batch ) && ! empty( $batch ) ) { foreach ( $batch as $recipients ) { $newheaders = "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $newheaders, '', true ); } } else { if ( ! empty( $recipients ) ) { $newheaders = "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $newheaders, '', true ); } } return apply_filters( 'penci_bl_author_send_mail_with_bcc', $setmail, $followers_data ); } /** * Send Emails And Create Logs for Term * * Handle to send email to term subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_term_create_logs( $post_id ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $flag = false; $post_type = get_post_type( $post_id ); // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'notification_item_' . $post_type ] ) ? $penci_bl_options[ 'notification_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); // check if post have permission to display follow me form & checkbox if ( ! ( in_array( $post_id, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return false; } // Get Term subject from meta $term_email_subject = get_post_meta( $post_id, $prefix . 'term_email_subject', true ); // Get Term subject from meta $term_email_body = get_post_meta( $post_id, $prefix . 'term_email_body', true ); if ( isset( $term_email_subject ) && ! empty( $term_email_subject ) ) { $subject = $term_email_subject; } else { $subject = $penci_bl_options['term_email_subject']; } if ( isset( $term_email_body ) && ! empty( $term_email_body ) ) { $message = $term_email_body; } else { $message = $penci_bl_options['term_email_body']; } // check if post have allow notification from Category / Tags Notification events > Trigger Emails > When new post published if ( isset( $penci_bl_options['term_trigger_notification']['new_post'] ) && $penci_bl_options['term_trigger_notification']['new_post'] == '1' ) { $flag = $this->penci_bl_all_term_send_mail( $subject, $message, $post_id, 'term_new', '' ); } if ( $flag ) { return true; } return false; } /** * Send Emails And Create Logs for author * * Handle to send email to author subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_author_create_logs( $post_id ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $flag = false; $post_type = get_post_type( $post_id ); // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'notification_item_' . $post_type ] ) ? $penci_bl_options[ 'notification_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); // check if post have permission to display follow me form & checkbox if ( ! ( in_array( $post_id, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return false; } // Get author subject from meta $author_email_subject = get_post_meta( $post_id, $prefix . 'author_email_subject', true ); // Get author subject from meta $author_email_body = get_post_meta( $post_id, $prefix . 'author_email_body', true ); if ( isset( $author_email_subject ) && ! empty( $author_email_subject ) ) { $subject = $author_email_subject; } else { $subject = $penci_bl_options['author_email_subject']; } if ( isset( $author_email_body ) && ! empty( $author_email_body ) ) { $message = $author_email_body; } else { $message = $penci_bl_options['author_email_body']; } // check if post have allow notification from Authors Notification events > Trigger Emails > When new post published if ( isset( $penci_bl_options['author_trigger_notification']['new_post'] ) && $penci_bl_options['author_trigger_notification']['new_post'] == '1' ) { $post = get_post( $post_id ); $post_author = $post->post_author; $flag = $this->penci_bl_all_author_send_mail( $subject, $message, $post_id, $post_author, 'author_new', '' ); } if ( $flag ) { return true; } return false; } /** * Send Emails And Create Logs for Term * * Handle to send email to term subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_all_term_send_mail( $subject, $message, $post_id, $type = '', $comment_data = '' ) { $flag = false; $post_type = get_post_type( $post_id ); // All taxonomy for current post type $all_taxonomy = get_object_taxonomies( $post_type ); if ( ! empty( $all_taxonomy ) ) { // Check taxonomy is not empty foreach ( $all_taxonomy as $taxonomy_slug ) { // Get selected term for particular taxonomy $terms = get_the_terms( $post_id, $taxonomy_slug ); // check not generate error if ( $terms && ! is_wp_error( $terms ) ) { foreach ( $terms as $term ) { $send_mail = $this->penci_bl_term_send_mail( $term->term_id, $term->taxonomy, $subject, $message, $post_id, $type, $comment_data ); if ( $send_mail ) { $flag = true; } } } } } if ( $flag ) { return true; } return false; } /** * Send Emails And Create Logs for author * * Handle to send email to author subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_all_author_send_mail( $subject, $message, $post_id, $post_author, $type = '', $comment_data = '' ) { $flag = false; $send_mail = $this->penci_bl_author_send_mail( $post_author, $subject, $message, $post_id, $type, $comment_data ); if ( $send_mail ) { $flag = true; } if ( $flag ) { return true; } return false; } /** * Send Emails And Create Logs for author * * Handle to send email to author subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_author_send_mail( $authorid, $subject, $message, $post_id, $type = '', $comment_data = '' ) { global $penci_bl_options; if ( ! empty( $authorid ) && ! empty( $post_id ) ) { $ids = array(); $prefix = PENCI_BL_META_PREFIX; // get the list of all users who are following this post $args = array( 'authorid' => $authorid, 'penci_bl_status' => 'subscribe', ); $followers_data = $this->penci_bl_get_follow_author_users_data( $args ); // check followers are not exists if ( empty( $followers_data ) ) { return false; } $author_name = ''; // author name & author link $author_data = get_user_by( 'id', $authorid ); if ( ! empty( $author_data ) && isset( $author_data->display_name ) ) { $author_name = $author_data->display_name; } $message = str_replace( '{author_name}', $author_name, $message ); // replace email shortcodes with content $message = $this->penci_bl_replace_shortcodes( $post_id, $message ); $subject = $this->penci_bl_replace_shortcodes( $post_id, $subject ); $flag = $this->penci_bl_author_send_mail_with_bcc( $followers_data, $subject, $message, $authorid, $post_id, $type, $comment_data ); if ( ! $flag ) { return false; } // if mail is successfully send then create log based on enable_log from settings if ( isset( $penci_bl_options['enable_log'] ) && $penci_bl_options['enable_log'] == '1' ) { // foreach loop for send email to every user, then create log foreach ( $followers_data as $value ) { // get mail data $mail_data = $subject . "%$%$%" . $message; $args = array( 'post_title' => $value['post_author'], 'post_content' => '', 'post_type' => PENCI_BL_AUTHOR_LOGS_POST_TYPE, 'post_status' => 'publish', 'post_parent' => $value['ID'], 'post_author' => $value['post_author'] ); $follow_post_log_id = wp_insert_post( $args ); if ( $follow_post_log_id ) { // update email data meta update_post_meta( $follow_post_log_id, $prefix . 'log_email_data', nl2br( $mail_data ) ); } } } } // add action to use 3rd party plugin when mail is sent do_action( 'penci_bl_author_send_mail', $followers_data, $post_id ); return true; } /** * Send Emails And Create Logs * * Handle to send email to subscriber * and create its logs * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_create_comments( $comment_data ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $flag = false; $comment_text = $comment_author = ''; if ( ! empty( $comment_data ) ) { // Get the post id $post_id = $comment_data->comment_post_ID; $post_name = get_the_title( $post_id ); // check send email notification is enabled for $post_id if ( ! $this->penci_bl_check_send_email_notifications( $post_id ) ) { return false; } $is_digeest_email_schedule = apply_filters( 'penci_bl_verify_digest_comments_send_email', true, $post_id, $penci_bl_options, $comment_data ); if ( $is_digeest_email_schedule ) { $comment_text = isset( $comment_data->comment_content ) ? $comment_data->comment_content : ''; $comment_author = isset( $comment_data->comment_author ) ? $comment_data->comment_author : ''; // Get Comment subject from meta $comment_email_subject = get_post_meta( $post_id, $prefix . 'comment_email_subject', true ); // Get Comment message from meta $comment_email_body = get_post_meta( $post_id, $prefix . 'comment_email_body', true ); if ( isset( $comment_email_subject ) && ! empty( $comment_email_subject ) ) { $subject = $comment_email_subject; } else { $subject = $penci_bl_options['comment_email_subject']; } if ( isset( $comment_email_body ) && ! empty( $comment_email_body ) ) { $message = $comment_email_body; } else { $message = $penci_bl_options['comment_email_body']; } $subject = str_replace( '{user_name}', $comment_author, $subject ); $message = str_replace( '{comment_text}', $comment_text, $message ); $message = str_replace( '{user_name}', $comment_author, $message ); // check if post have allow notification from Post / Page Notification Events > Trigger Emails > When new comment added if ( isset( $penci_bl_options['post_trigger_notification']['new_comment'] ) && $penci_bl_options['post_trigger_notification']['new_comment'] == '1' ) { $flag = $this->penci_bl_post_send_mail( $subject, $message, $post_id, 'comment', $comment_data ); } // check if post have allow notification from Category / Tags Notification events > Trigger Emails > When new comment added if ( isset( $penci_bl_options['term_trigger_notification']['new_comment'] ) && $penci_bl_options['term_trigger_notification']['new_comment'] == '1' ) { $flag = $this->penci_bl_all_term_send_mail( $subject, $message, $post_id, 'comment', $comment_data ); } // check if post have allow notification from author Notification events > Trigger Emails > When new comment added if ( isset( $penci_bl_options['author_trigger_notification']['new_comment'] ) && $penci_bl_options['author_trigger_notification']['new_comment'] == '1' ) { $post = get_post( $post_id ); $post_author = $post->post_author; $flag = $this->penci_bl_all_author_send_mail( $subject, $message, $post_id, $post_author, 'comment', $comment_data ); } } } } /** * Check the current post if th shortcode has been added * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_has_shortcode( $shortcode = '' ) { $post_to_check = get_post( get_the_ID() ); // false because we have to search through the post content first $found = false; // if no shortcode was provided, return false if ( ! $shortcode ) { return $found; } if ( empty( $post_to_check ) ) { return $found; } // check the post content for the short code if ( stripos( $post_to_check->post_content, '[' . $shortcode ) !== false ) { // we have found the short code $found = true; } // return our final results return $found; } /** * Send Confirmation email * * Handles to send confirmation email * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_confirmation_email( $args = array() ) { global $penci_bl_options; $follow_user_email = $confirm_email_link = $post_id = $current_post_id = ''; if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $follow_user_email = $args['penci_bl_email']; } if ( isset( $args['post_id'] ) && ! empty( $args['post_id'] ) ) { $post_id = $args['post_id']; } if ( isset( $args['current_post_id'] ) && ! empty( $args['current_post_id'] ) ) { $current_post_id = $args['current_post_id']; } else { //if current post id empty $current_post_id = ! empty( $penci_bl_options['subscribe_manage_page'] ) ? $penci_bl_options['subscribe_manage_page'] : ''; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Switch language context� do_action( 'wpml_switch_language_for_email', $follow_user_email ); $penci_bl_options = penci_bl_get_settings(); } // subscribe url $url = get_permalink( $current_post_id ); $url_parameters = apply_filters( 'penci_bl_confirmation_email_url', array( 'penci_bl_post_id' => base64_encode( $post_id ), 'penci_bl_email' => base64_encode( rawurlencode( $follow_user_email ) ), 'penci_bl_action' => base64_encode( 'subscribe' ) ) ); $url = add_query_arg( $url_parameters, $url ); $subscribe_url = '' . esc_html__( 'Confirm Follow', 'penci-bookmark-follow' ) . ''; $subject = isset( $penci_bl_options['confirm_email_subject'] ) ? $penci_bl_options['confirm_email_subject'] : ''; $message = isset( $penci_bl_options['confirm_email_body'] ) ? $penci_bl_options['confirm_email_body'] : ''; if ( ! empty( $post_id ) ) { $subject = $this->penci_bl_replace_shortcodes( $post_id, $subject ); $message = $this->penci_bl_replace_shortcodes( $post_id, $message ); } $message = str_replace( '{subscribe_url}', $subscribe_url, $message ); // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // switch language back do_action( 'wpml_restore_language_from_email' ); } // Check message and email id are not empty if ( ! empty( $message ) && ! empty( $follow_user_email ) && is_email( $follow_user_email ) ) { $setmail = $this->penci_bl_send_email( $follow_user_email, $subject, $message ); } } /** * Send Confirmation email for follow term * * Handles to send confirmation email for follow term * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_term_confirmation_email( $args = array() ) { global $penci_bl_options; $follow_user_email = $confirm_email_link = $post_id = $current_post_id = $term_name = $taxonomy_name = ''; if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $follow_user_email = $args['penci_bl_email']; } if ( isset( $args['posttype'] ) && ! empty( $args['posttype'] ) ) { $posttype = $args['posttype']; } if ( isset( $args['taxonomy'] ) && ! empty( $args['taxonomy'] ) ) { $taxonomy = $args['taxonomy']; } if ( isset( $args['term_id'] ) && ! empty( $args['term_id'] ) ) { $term_id = $args['term_id']; } if ( isset( $args['current_post_id'] ) && ! empty( $args['current_post_id'] ) ) { $current_post_id = $args['current_post_id']; } else { //if current post id empty $current_post_id = ! empty( $penci_bl_options['subscribe_manage_page'] ) ? $penci_bl_options['subscribe_manage_page'] : ''; } // subscribe url $subscrib_args = array( 'penci_bl_posttype' => base64_encode( $posttype ), 'penci_bl_taxonomy' => base64_encode( $taxonomy ), 'penci_bl_term_id' => base64_encode( $term_id ), 'penci_bl_email' => base64_encode( rawurlencode( $follow_user_email ) ), 'penci_bl_action' => base64_encode( 'subscribeterm' ) ); if ( isset( $args['page'] ) && $args['page'] == 'penci-bf-add-follower' ) { $url = site_url(); } else { $url = get_permalink( $current_post_id ); } $url = add_query_arg( $subscrib_args, $url ); $subscribe_url = '' . esc_html__( 'Confirm Follow', 'penci-bookmark-follow' ) . ''; // term name & term link $term_data = get_term_by( 'id', $term_id, $taxonomy ); if ( ! empty( $term_data ) && isset( $term_data->name ) ) { $term_name = $term_data->name; } // taxonomy name $taxonomy_data = get_taxonomy( $taxonomy ); if ( ! empty( $taxonomy_data ) && isset( $taxonomy_data->labels ) && isset( $taxonomy_data->labels->singular_name ) ) { $taxonomy_name = $taxonomy_data->labels->singular_name; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Switch language context� do_action( 'wpml_switch_language_for_email', $follow_user_email ); $penci_bl_options = penci_bl_get_settings(); } $subject = isset( $penci_bl_options['term_confirm_email_subject'] ) ? $penci_bl_options['term_confirm_email_subject'] : ''; $message = isset( $penci_bl_options['term_confirm_email_body'] ) ? $penci_bl_options['term_confirm_email_body'] : ''; if ( ! empty( $current_post_id ) ) { $subject = $this->penci_bl_replace_shortcodes( $current_post_id, $subject ); $message = $this->penci_bl_replace_shortcodes( $current_post_id, $message ); } else { $subject = str_replace( '{site_name}', get_bloginfo( 'name' ), $subject ); } $subject = str_replace( '{term_name}', $term_name, $subject ); $message = str_replace( '{term_name}', $term_name, $message ); $message = str_replace( '{taxonomy_name}', $taxonomy_name, $message ); $message = str_replace( '{subscribe_url}', $subscribe_url, $message ); // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // switch language back do_action( 'wpml_restore_language_from_email' ); } // Check message and email id are not empty if ( ! empty( $message ) && ! empty( $follow_user_email ) && is_email( $follow_user_email ) ) { $setmail = $this->penci_bl_send_email( $follow_user_email, $subject, $message ); } } /** * Send Confirmation email for follow author * * Handles to send confirmation email for follow author * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_author_confirmation_email( $args = array() ) { global $penci_bl_options; $follow_user_email = $confirm_email_link = $post_id = $current_post_id = ''; if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $follow_user_email = $args['penci_bl_email']; } if ( isset( $args['author_id'] ) && ! empty( $args['author_id'] ) ) { $author_id = $args['author_id']; } if ( isset( $args['current_post_id'] ) && ! empty( $args['current_post_id'] ) ) { $current_post_id = $args['current_post_id']; } else { //if current post id empty $current_post_id = ! empty( $penci_bl_options['subscribe_manage_page'] ) ? $penci_bl_options['subscribe_manage_page'] : ''; } // subscribe url $subscrib_args = array( 'penci_bl_author_id' => base64_encode( $author_id ), 'penci_bl_email' => base64_encode( rawurlencode( $follow_user_email ) ), 'penci_bl_action' => base64_encode( 'subscribeauthor' ) ); if ( isset( $args['page'] ) && $args['page'] == 'penci-bf-add-follower' ) { $url = site_url(); } else { $url = get_permalink( $current_post_id ); } $url = add_query_arg( $subscrib_args, $url ); $subscribe_url = '' . esc_html__( 'Confirm Follow', 'penci-bookmark-follow' ) . ''; // author name & author link $author_data = get_user_by( 'id', $author_id ); if ( ! empty( $author_data ) && isset( $author_data->display_name ) ) { $author_name = $author_data->display_name; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Switch language context� do_action( 'wpml_switch_language_for_email', $follow_user_email ); $penci_bl_options = penci_bl_get_settings(); } $subject = isset( $penci_bl_options['author_confirm_email_subject'] ) ? $penci_bl_options['author_confirm_email_subject'] : ''; $message = isset( $penci_bl_options['author_confirm_email_body'] ) ? $penci_bl_options['author_confirm_email_body'] : ''; if ( ! empty( $current_post_id ) ) { $subject = $this->penci_bl_replace_shortcodes( $current_post_id, $subject ); $message = $this->penci_bl_replace_shortcodes( $current_post_id, $message ); } else { $subject = str_replace( '{site_name}', get_bloginfo( 'name' ), $subject ); } $subject = str_replace( '{author_name}', $author_name, $subject ); $message = str_replace( '{author_name}', $author_name, $message ); $message = str_replace( '{subscribe_url}', $subscribe_url, $message ); // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // switch language back do_action( 'wpml_restore_language_from_email' ); } // Check message and email id are not empty if ( ! empty( $message ) && ! empty( $follow_user_email ) && is_email( $follow_user_email ) ) { $setmail = $this->penci_bl_send_email( $follow_user_email, $subject, $message ); } } /** * Send Confirmation for unsubscribe email * * Handles to send confirmation for unsubscribe email * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_confirmation_unsubscribe_email( $args = array() ) { global $penci_bl_options, $post; $follow_user_email = $confirm_email_link = ''; if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $follow_user_email = $args['penci_bl_email']; } // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // Switch language context� do_action( 'wpml_switch_language_for_email', $follow_user_email ); $penci_bl_options = penci_bl_get_settings(); } $subject = isset( $penci_bl_options['unsubscribe_confirm_email_subject'] ) ? $penci_bl_options['unsubscribe_confirm_email_subject'] : ''; $message = isset( $penci_bl_options['unsubscribe_confirm_email_body'] ) ? $penci_bl_options['unsubscribe_confirm_email_body'] : ''; $unsubscribe_page_id = isset( $penci_bl_options['unsubscribe_page'] ) && ! empty( $penci_bl_options['unsubscribe_page'] ) ? $penci_bl_options['unsubscribe_page'] : $post->ID; $url = get_permalink( $unsubscribe_page_id ); $url = add_query_arg( array( 'penci_bl_action' => base64_encode( 'unsubscribe' ), 'penci_bl_email' => base64_encode( rawurlencode( $follow_user_email ) ) ), $url ); $confirm_email_link = '' . esc_html__( 'Confirm Unsubscription', 'penci-bookmark-follow' ) . ''; $subject = str_replace( '{email}', $follow_user_email, $subject ); $message = str_replace( '{email}', $follow_user_email, $message ); $message = str_replace( '{confirm_url}', $confirm_email_link, $message ); /*if ( ! empty( $post->ID ) ) { $subject = $this->penci_bl_replace_shortcodes( $post->ID, $subject ); $message = $this->penci_bl_replace_shortcodes( $post->ID, $message ); }*/ // If WPML plugin is active if ( function_exists( 'icl_object_id' ) ) { // switch language back do_action( 'wpml_restore_language_from_email' ); } return $this->penci_bl_send_email( $follow_user_email, $subject, $message ); } /** * Filter for getting follow author data with grouped * * Handles to get follow author data with grouped * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_follow_author_groupby( $groupby ) { global $wpdb; $groupby = "{$wpdb->posts}.post_parent"; return apply_filters( 'penci_bl_follow_author_groupby', $groupby ); } /** * Get author data * * Handles to get all author list * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_author_list( $args = array() ) { //check if its custom post types created or not $args = array( 'role' => 'author', 'fields' => array( 'id', 'display_name' ) ); $users = get_users( $args ); return $users; } /** * Get author data * * Handles to get author data for * followauthor post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_follow_author_data( $args = array() ) { global $current_user; $prefix = PENCI_BL_META_PREFIX; $followauthorlist = array(); $metaquery = array(); //check if its custom post types created or not $checkauthorargs = array( 'post_status' => 'publish', 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, ); /** * If current user Author * View only current login author followers */ $user_role = $current_user->roles; if ( in_array( 'author', $user_role ) ) { $checkauthorargs['post_parent'] = get_current_user_id(); } $checkauthorargs = wp_parse_args( $checkauthorargs, $args ); //if search is called then retrive searching data if ( isset( $args['search'] ) ) { global $wpdb; $search = $args['search']; // prepare query $querystr = " SELECT id FROM $wpdb->users WHERE display_name LIKE '%$search%'"; // get result from database $users_ids = $wpdb->get_results( $querystr, ARRAY_A ); $users = array(); // preare terms id array from result foreach ( $users_ids as $key => $users_id ) { $users[] = $users_id['id']; } if ( empty( $users ) ) { // if no result found then set post parent to something that never exist $checkauthorargs['post_parent'] = 9999999999; } else { // assign terms id in post parent id for searching purpose $checkauthorargs['post_parent__in'] = $users; } } if ( ! empty( $metaquery ) ) { $checkauthorargs['meta_query'] = $metaquery; } // add filter for getting follow author data with grouped add_filter( 'posts_groupby', array( $this, 'penci_bl_follow_author_groupby' ) ); //fire query in to table for retriving data $result = new WP_Query( $checkauthorargs ); // remove filter for groupby remove to post query remove_filter( 'posts_groupby', array( $this, 'penci_bl_follow_author_groupby' ) ); //retrived data is in object format so assign that data to array for listing $followauthorlist = $this->penci_bl_object_to_array( $result->posts ); // Check if post type counter from filter if ( isset( $args['count'] ) && ! empty( $args['count'] ) ) { return count( $followauthorlist ); } // if get list for author list then return data with data and total array if ( isset( $args['penci_bl_list_author_data'] ) && ! empty( $args['penci_bl_list_author_data'] ) ) { $data_res['data'] = $followauthorlist; //To get total count of post using "found_posts" and for users "total_users" parameter $data_res['total'] = isset( $result->found_posts ) ? $result->found_posts : ''; return $data_res; } return $followauthorlist; } /** * Get author Users data * * Handles to get author users data for * post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_follow_author_users_data( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; $followauthorusersargs = array( 'post_type' => PENCI_BL_AUTHOR_POST_TYPE, 'post_status' => 'publish' ); $followauthorusersargs = wp_parse_args( $followauthorusersargs, $args ); //show how many per page records if ( isset( $args['posts_per_page'] ) && ! empty( $args['posts_per_page'] ) ) { $followauthorusersargs['posts_per_page'] = $args['posts_per_page']; } else { $followauthorusersargs['posts_per_page'] = '-1'; } //show per page records if ( isset( $args['paged'] ) && ! empty( $args['paged'] ) ) { $followauthorusersargs['paged'] = $args['paged']; } //if search using post parent if ( isset( $args['authorid'] ) ) { $followauthorusersargs['post_parent'] = $args['authorid']; } //if search using author if ( isset( $args['author'] ) ) { $followauthorusersargs['author'] = $args['author']; } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { $metaargs[] = array( 'key' => $prefix . 'author_user_email', 'value' => $args['search'], 'compare' => 'LIKE' ); } if ( isset( $args['penci_bl_status'] ) && ! empty( $args['penci_bl_status'] ) ) { $status = $args['penci_bl_status'] == 'subscribe' ? '1' : '0'; $metaargs[] = array( 'key' => $prefix . 'follow_status', 'value' => $status ); } if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $metaargs[] = array( 'key' => $prefix . 'author_user_email', 'value' => $args['penci_bl_email'] ); } if ( ! empty( $metaargs ) ) { $followauthorusersargs['meta_query'] = $metaargs; } //if returns only id if ( isset( $args['fields'] ) && ! empty( $args['fields'] ) ) { $followauthorusersargs['fields'] = $args['fields']; } //get order by records $followauthorusersargs['order'] = 'DESC'; $followauthorusersargs['orderby'] = 'date'; //fire query in to table for retriving data $result = new WP_Query( $followauthorusersargs ); if ( isset( $args['count'] ) && $args['count'] == '1' ) { $followauthoruserslist = $result->post_count; } else { //retrived data is in object format so assign that data to array for listing $followauthoruserslist = $this->penci_bl_object_to_array( $result->posts ); // if get list for follow author user list then return data with data and total array if ( isset( $args['penci_bl_users_list_authors_data'] ) && ! empty( $args['penci_bl_users_list_authors_data'] ) ) { $data_res['data'] = $followauthoruserslist; //To get total count of post using "found_posts" and for users "total_users" parameter $data_res['total'] = isset( $result->found_posts ) ? $result->found_posts : ''; return $data_res; } } return $followauthoruserslist; } /** * Get author User Logs data * * Handles to get author user logs data for * post type * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_follow_author_user_logs_data( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; $followeduserlogssargs = array( 'post_type' => PENCI_BL_AUTHOR_LOGS_POST_TYPE, 'post_status' => 'publish', 'posts_per_page' => '-1' ); //if search using post parent if ( isset( $args['logid'] ) ) { $followeduserlogssargs['post_parent'] = $args['logid']; } //if returns only id if ( isset( $args['fields'] ) && ! empty( $args['fields'] ) ) { $followeduserlogssargs['fields'] = $args['fields']; } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { $metaargs[] = array( 'key' => $prefix . 'log_email_data', 'value' => $args['search'], 'compare' => 'LIKE' ); } if ( ! empty( $metaargs ) ) { $followeduserlogssargs['meta_query'] = $metaargs; } //fire query in to table for retriving data $result = new WP_Query( $followeduserlogssargs ); //retrived data is in object format so assign that data to array for listing $followeduserlogslist = $this->penci_bl_object_to_array( $result->posts ); return $followeduserlogslist; } /** * Check Follow Email is exist * * Handles to check follow email is exist * into follow posts, terms and author * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_check_follow_email( $email ) { $all_follows = array(); // args to check if this user_email is exist for follow post $args = array( 'penci_bl_email' => $email, 'penci_bl_status' => 'subscribe', 'fields' => 'ids' ); $follow_posts = $this->penci_bl_get_follow_post_users_data( $args ); $follow_authors = $this->penci_bl_get_follow_author_users_data( $args ); if ( ! empty( $follow_posts ) || ! empty( $follow_authors ) ) { $all_follows = array( 'follow_posts' => $follow_posts, 'follow_authors' => $follow_authors ); } return apply_filters( 'penci_bl_check_follow_email', $all_follows, $email ); } /** * Get Date Format * * Handles to return formatted date which format is set in backend * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_get_date_format( $date, $time = false ) { $format = $time ? get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) : get_option( 'date_format' ); $date = date_i18n( $format, strtotime( $date ) ); return apply_filters( 'penci_bl_get_date_format', $date, $time ); } /** * Get Short Content From Long Content * * Handles to return content with specific * string length * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_short_content( $content, $charlength = 30 ) { //check content is large then characterlenght if ( strlen( $content ) > $charlength ) { $subex = substr( $content, 0, $charlength - 5 ); $exwords = explode( ' ', $subex ); $excut = - ( strlen( $exwords[ count( $exwords ) - 1 ] ) ); if ( $excut < 0 ) { $content = substr( $subex, 0, $excut ); } else { $content = $subex; } $content = trim( $content ) . '...'; } //return short content if long passed then length otherwise original content will be return return apply_filters( 'penci_bl_short_content', $content, $charlength ); } /** * Check Post Update Notification for post * * Handles to check post update notification for * current post when post is going to update * * @package Penci Bookmark Follow * @since 1.0.0 **/ public function penci_bl_check_post_update_notification() { global $post, $penci_bl_options; if ( ! isset( $post->ID ) ) { return false; } $post_type = get_post_type( $post->ID ); $filter_name = 'penci_bl_check_post_update_notification'; // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'notification_item_' . $post_type ] ) ? $penci_bl_options[ 'notification_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); // check if post have permission to display follow me form & checkbox if ( ! ( in_array( $post->ID, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return apply_filters( $filter_name, false ); } // check if post have allow notification from Posts Notification Events > Trigger Emails > When post / page updated if ( isset( $penci_bl_options['post_trigger_notification']['post_update'] ) && $penci_bl_options['post_trigger_notification']['post_update'] == '1' ) { return apply_filters( $filter_name, true ); } // check if post have allow notification from Terms Notification Events > Trigger Emails > When post / page updated if ( isset( $penci_bl_options['term_trigger_notification']['post_update'] ) && $penci_bl_options['term_trigger_notification']['post_update'] == '1' ) { return apply_filters( $filter_name, true ); } // check if post have allow notification from Authors Notification Events > Trigger Emails > When post / page updated if ( isset( $penci_bl_options['author_trigger_notification']['post_update'] ) && $penci_bl_options['author_trigger_notification']['post_update'] == '1' ) { return apply_filters( $filter_name, true ); } } /** * Send Global Email * * Handles to send global email * * @package Penci Bookmark Follow * @since 1.2.0 * */ public function penci_bl_send_email( $email, $subject, $message, $appendheader = '', $email_template = '', $unsubscribe = false, $unsub_data = array() ) { global $penci_bl_options; $admin_email = get_option( 'admin_email' ); $fromEmail = ( isset( $penci_bl_options['from_email'] ) && ! empty( $penci_bl_options['from_email'] ) ) ? $penci_bl_options['from_email'] : $admin_email; $is_email = preg_match( '/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/si', $fromEmail ); // check if from email not contain email if ( ! empty( $fromEmail ) && ! $is_email ) { $fromEmail .= ' <' . $admin_email . '>'; } $headers = 'From: ' . $fromEmail . "\r\n"; $headers .= "Reply-To: " . $fromEmail . "\r\n"; $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; $headers .= $appendheader; if ( ! empty( $email_template ) ) { $email_template_option = $email_template; } else if ( isset( $penci_bl_options['email_template'] ) && ! empty( $penci_bl_options['email_template'] ) ) { $email_template_option = $penci_bl_options['email_template']; } else { $email_template_option = 'default'; } $message = do_shortcode( $message ); $message = wpautop( $message ); $html = ''; $html .= ' '; // @param email added to generate direct unsubscribe link $html = apply_filters( 'penci_bl_email_template_' . $email_template_option, $html, $message, $unsubscribe, $email, $unsub_data ); $html .= ' '; $html = apply_filters( 'penci_bl_email_html', $html, $message ); $externally_send_mail = array( 'send_mail_externally' => false ); // apply filter to send email externally $externally_send_mail = apply_filters( 'penci_bl_send_email_externaly', $externally_send_mail, $email, $subject, $headers, $message ); if ( $externally_send_mail['send_mail_externally'] == true ) { // check if email is sent from here or externally // assign return value from 3rd party plugin (true or false) $setmail = isset( $externally_send_mail['success'] ) ? $externally_send_mail['success'] : false; } else { // Filter when mail to param is blank (Note : This is for some domains on which mail will not work without 'to') if ( empty( $email ) ) { $email = apply_filters( 'penci_bl_blank_email_to', $email, $fromEmail ); } $setmail = wp_mail( $email, $subject, $html, $headers ); } return $setmail; } /** * Get Email Templates * * Handles to get all email templates * * @package Penci Bookmark Follow * @since 1.2.0 */ public function penci_bl_email_get_templates() { $templates = array( '' => esc_html__( 'HTML Template', 'penci-bookmark-follow' ), 'plain' => esc_html__( 'No template, plain text only', 'penci-bookmark-follow' ) ); return apply_filters( 'penci_bl_email_get_templates', $templates ); } /** * Send Emails With BCC for followers * * Handle to send email with bcc for followers * * @package Penci Bookmark Follow * @since 1.5.1 * * When disable unsubscribe confirmation checked send email individually * @since 1.7.6 */ public function penci_bl_send_mail_with_bcc( $followers, $subject, $message, $appendheader = '', $email_template = '', $unsubscribe = false ) { global $penci_bl_options; $prefix = PENCI_BL_META_PREFIX; $setmail = false; $recipients = ''; $followers = ( ! is_array( $followers ) ) ? (array) $followers : $followers; // Check if diable unsubscribe confirmation checked then send email individually if ( $penci_bl_options['recipient_per_email'] == 1 || ( isset( $penci_bl_options['unsubscribe_confirmation'] ) && ! empty( $penci_bl_options['unsubscribe_confirmation'] ) && $penci_bl_options['recipient_per_email'] == 1 ) ) { // foreach loop for send email to every user, then create log foreach ( $followers as $follower_email ) { // sanity check -- make sure we have a valid email if ( ! is_email( $follower_email ) || empty( $follower_email ) ) { continue; } // send email to each user individually $setmail = $this->penci_bl_send_email( $follower_email, $subject, $message, $appendheader, $email_template, $unsubscribe ); } } else if ( empty( $penci_bl_options['recipient_per_email'] ) ) { // foreach loop for send email to every user, then create log foreach ( $followers as $follower_email ) { // sanity check -- make sure we have a valid email if ( ! is_email( $follower_email ) || empty( $follower_email ) ) { continue; } if ( ! empty( $follower_email ) ) { empty( $recipients ) ? $recipients = "$follower_email" : $recipients .= ", $follower_email"; // Bcc Headers now constructed by phpmailer class } } } else { // we're using recipient_per_email $count = 1; $batch = array(); // foreach loop for send email to every user, then create log foreach ( $followers as $follower_email ) { // sanity check -- make sure we have a valid email if ( ! is_email( $follower_email ) || empty( $follower_email ) ) { continue; } if ( ! empty( $follower_email ) ) { empty( $recipients ) ? $recipients = "$follower_email" : $recipients .= ", $follower_email"; // Bcc Headers now constructed by phpmailer class } if ( $penci_bl_options['recipient_per_email'] == $count ) { $count = 0; $batch[] = $recipients; $recipients = ''; } $count ++; } // add any partially completed batches to our batch array if ( ! empty( $recipients ) ) { $batch[] = $recipients; } } // actually send mail if ( isset( $batch ) && ! empty( $batch ) ) { foreach ( $batch as $recipients ) { $appendheader .= "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $appendheader, $email_template, $unsubscribe ); } } else { if ( ! empty( $recipients ) ) { $appendheader .= "Bcc: $recipients\n"; // send email $setmail = $this->penci_bl_send_email( '', $subject, $message, $appendheader, $email_template, $unsubscribe ); } } return $setmail; } /** * Check for send email notifications * * Check whether email should send or not for particular post_id * * Handle to send email with bcc for followers * * @package Penci Bookmark Follow * @since 1.6.0 */ public function penci_bl_check_send_email_notifications( $post_id ) { return true; } /** * Get user email from user id * * @package Penci Bookmark Follow * @since 1.6.1 */ public function penci_bl_get_user_email_from_id( $userid ) { $user_email = ''; $userdata = get_user_by( 'id', $userid ); if ( ! empty( $userdata ) && ! empty( $userdata->user_email ) ) { $user_email = $userdata->user_email; } return apply_filters( 'penci_bl_get_user_email_from_id', $user_email, $userid ); } /** * Send email from an array depending on languages * for post update or comment on post * while WPML plugin is active * * @package Penci Bookmark Follow * @since 1.6.1 */ public function penci_bl_post_send_email_per_lang( $penci_bl_diff_lang_email, $header_type, $post_id, $unsub_data, $type, $comment_data ) { $prefix = PENCI_BL_META_PREFIX; if ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { foreach ( $penci_bl_diff_lang_email as $penci_bl_diff_lang_email_id => $penci_bl_diff_lang_email_val ) { // Switch language context� do_action( 'wpml_switch_language_for_email', $penci_bl_diff_lang_email_val[0] ); $penci_bl_options = penci_bl_get_settings(); if ( $type == 'comment' ) { $comment_text = $comment_author = ''; if ( ! empty( $comment_data ) ) { // Get the post id $post_id = $comment_data->comment_post_ID; $post_name = get_the_title( $post_id ); // check send email notification is enabled for $post_id if ( ! $this->penci_bl_check_send_email_notifications( $post_id ) ) { return false; } // Get disable email notification meta $disable_email_notification = get_post_meta( $post_id, $prefix . 'disable_email_notification', true ); // Check disable enail notification is checked if ( $disable_email_notification != '1' ) { $comment_text = isset( $comment_data->comment_content ) ? $comment_data->comment_content : ''; $comment_author = isset( $comment_data->comment_author ) ? $comment_data->comment_author : ''; // Get Comment subject from meta $comment_email_subject = get_post_meta( $post_id, $prefix . 'comment_email_subject', true ); // Get Comment message from meta $comment_email_body = get_post_meta( $post_id, $prefix . 'comment_email_body', true ); if ( isset( $comment_email_subject ) && ! empty( $comment_email_subject ) ) { $subject = $comment_email_subject; } else { $subject = $penci_bl_options['comment_email_subject']; } if ( isset( $comment_email_body ) && ! empty( $comment_email_body ) ) { $message = $comment_email_body; } else { $message = $penci_bl_options['comment_email_body']; } $subject = str_replace( '{user_name}', $comment_author, $subject ); $subject = str_replace( '{post_name}', $post_name, $subject ); $message = str_replace( '{comment_text}', $comment_text, $message ); $message = str_replace( '{user_name}', $comment_author, $message ); $message = str_replace( '{post_name}', $post_name, $message ); } } } elseif ( $type == 'post' ) { // Get Email subject from meta $post_email_subject = get_post_meta( $post_id, $prefix . 'email_subject', true ); // Get Post message from meta $post_email_body = get_post_meta( $post_id, $prefix . 'email_body', true ); if ( isset( $post_email_subject ) && ! empty( $post_email_subject ) ) { // If $post_email_subject is empty then assign that to $subject $subject = $post_email_subject; } else { // Else get subject from global settings $subject = $penci_bl_options['email_subject']; } if ( isset( $post_email_body ) && ! empty( $post_email_body ) ) { // If $post_email_body is empty then assign that to $message $message = $post_email_body; } else { // Else get subject from global settings $message = $penci_bl_options['email_body']; } // replace email shortcodes with content $subject = $this->penci_bl_replace_shortcodes( $post_id, $subject ); // replace email shortcodes with content $message = $this->penci_bl_replace_shortcodes( $post_id, $message ); } if ( $header_type == 'pencibf_bcc' ) { $newheaders = $email = ''; foreach ( $penci_bl_diff_lang_email_val as $penci_bl_emails ) { // Generate BCC now empty( $newheaders ) ? $newheaders = "Bcc: $penci_bl_emails" : $newheaders .= ", $penci_bl_emails"; } } else { $newheaders = $email = ''; $email = $penci_bl_diff_lang_email_val; } // send email to user's with email set under BCC $setmail = $this->penci_bl_send_email( $email, $subject, $message, $newheaders, '', true, $unsub_data ); // switch language back do_action( 'wpml_restore_language_from_email' ); } } } /** * Send email from an array depending on languages * for author new post, author post update or comment on author's post * while WPML plugin is active * * @package Penci Bookmark Follow * @since 1.6.1 */ public function penci_bl_auth_send_email_per_lang( $penci_bl_diff_lang_email, $header_type, $post_id, $unsub_data, $authorid, $type = '', $comment_data = '' ) { $prefix = PENCI_BL_META_PREFIX; if ( ! empty ( $penci_bl_diff_lang_email ) && is_array( $penci_bl_diff_lang_email ) ) { foreach ( $penci_bl_diff_lang_email as $penci_bl_diff_lang_email_id => $penci_bl_diff_lang_email_val ) { // Switch language context� do_action( 'wpml_switch_language_for_email', $penci_bl_diff_lang_email_val[0] ); $penci_bl_options = penci_bl_get_settings(); if ( $type == 'comment' ) { $comment_text = $comment_author = ''; if ( ! empty( $comment_data ) ) { // Get the post id $post_id = $comment_data->comment_post_ID; $post_name = get_the_title( $post_id ); // check send email notification is enabled for $post_id if ( ! $this->penci_bl_check_send_email_notifications( $post_id ) ) { return false; } // Get disable email notification meta $disable_email_notification = get_post_meta( $post_id, $prefix . 'disable_email_notification', true ); // Check disable enail notification is checked if ( $disable_email_notification != '1' ) { $comment_text = isset( $comment_data->comment_content ) ? $comment_data->comment_content : ''; $comment_author = isset( $comment_data->comment_author ) ? $comment_data->comment_author : ''; // Get Comment subject from meta $comment_email_subject = get_post_meta( $post_id, $prefix . 'comment_email_subject', true ); // Get Comment message from meta $comment_email_body = get_post_meta( $post_id, $prefix . 'comment_email_body', true ); if ( isset( $comment_email_subject ) && ! empty( $comment_email_subject ) ) { $subject = $comment_email_subject; } else { $subject = $penci_bl_options['comment_email_subject']; } if ( isset( $comment_email_body ) && ! empty( $comment_email_body ) ) { $message = $comment_email_body; } else { $message = $penci_bl_options['comment_email_body']; } $subject = str_replace( '{user_name}', $comment_author, $subject ); $subject = str_replace( '{post_name}', $post_name, $subject ); $message = str_replace( '{comment_text}', $comment_text, $message ); $message = str_replace( '{user_name}', $comment_author, $message ); $message = str_replace( '{post_name}', $post_name, $message ); } } } elseif ( $type == 'author_new' ) { $post_type = get_post_type( $post_id ); // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'notification_item_' . $post_type ] ) ? $penci_bl_options[ 'notification_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); // check if post have permission to display follow me form & checkbox if ( ! ( in_array( $post_id, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return false; } // Get author subject from meta $author_email_subject = get_post_meta( $post_id, $prefix . 'author_email_subject', true ); // Get author subject from meta $author_email_body = get_post_meta( $post_id, $prefix . 'author_email_body', true ); if ( isset( $author_email_subject ) && ! empty( $author_email_subject ) ) { $subject = $author_email_subject; } else { $subject = $penci_bl_options['author_email_subject']; } if ( isset( $author_email_body ) && ! empty( $author_email_body ) ) { $message = $author_email_body; } else { $message = $penci_bl_options['author_email_body']; } // get the list of all users who are following this post $args = array( 'authorid' => $authorid, 'penci_bl_status' => 'subscribe', ); $followers_data = $this->penci_bl_get_follow_author_users_data( $args ); // check followers are not exists if ( empty( $followers_data ) ) { return false; } $author_name = ''; // author name & author link $author_data = get_user_by( 'id', $authorid ); if ( ! empty( $author_data ) && isset( $author_data->display_name ) ) { $author_name = $author_data->display_name; } $message = str_replace( '{author_name}', $author_name, $message ); } elseif ( $type == 'author_update' ) { $post_type = get_post_type( $post_id ); // get post ids in which follow me will display $selected_posts = isset( $penci_bl_options[ 'notification_item_' . $post_type ] ) ? $penci_bl_options[ 'notification_item_' . $post_type ] : array(); // get post types in which follow me will display $selected_post_types = isset( $penci_bl_options['notification_type'] ) ? $penci_bl_options['notification_type'] : array(); // check if post have permission to display follow me form & checkbox if ( ! ( in_array( $post_id, $selected_posts ) || in_array( $post_type, $selected_post_types ) ) ) { return false; } // Get Post subject from meta $post_email_subject = get_post_meta( $post_id, $prefix . 'email_subject', true ); // Get Post message from meta $post_email_body = get_post_meta( $post_id, $prefix . 'email_body', true ); if ( isset( $post_email_subject ) && ! empty( $post_email_subject ) ) { $subject = $post_email_subject; } else { $subject = $penci_bl_options['email_subject']; } if ( isset( $post_email_body ) && ! empty( $post_email_body ) ) { $message = $post_email_body; } else { $message = $penci_bl_options['email_body']; } } // replace email shortcodes with content $message = $this->penci_bl_replace_shortcodes( $post_id, $message ); $subject = $this->penci_bl_replace_shortcodes( $post_id, $subject ); if ( $header_type == 'pencibf_bcc' ) { $newheaders = $email = ''; foreach ( $penci_bl_diff_lang_email_val as $penci_bl_emails ) { // Generate BCC now empty( $newheaders ) ? $newheaders = "Bcc: $penci_bl_emails" : $newheaders .= ", $penci_bl_emails"; } } else { $newheaders = $email = ''; $email = $penci_bl_diff_lang_email_val; } // send email to user's with email set under BCC $setmail = $this->penci_bl_send_email( $email, $subject, $message, $newheaders, '', true, $unsub_data ); if ( ! $setmail ) { return false; } // switch language back do_action( 'wpml_restore_language_from_email' ); } } return true; } /** * Get Term Users data * */ public function penci_bl_get_follow_term_users_data( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; $followtermusersargs = array( 'post_type' => PENCI_BL_TERM_POST_TYPE, 'post_status' => 'publish' ); $followtermusersargs = wp_parse_args( $followtermusersargs, $args ); //show how many per page records if ( isset( $args['posts_per_page'] ) && ! empty( $args['posts_per_page'] ) ) { $followtermusersargs['posts_per_page'] = $args['posts_per_page']; } else { $followtermusersargs['posts_per_page'] = '-1'; } //show per page records if ( isset( $args['paged'] ) && ! empty( $args['paged'] ) ) { $followtermusersargs['paged'] = $args['paged']; } //if search using post parent if ( isset( $args['termid'] ) ) { $followtermusersargs['post_parent'] = $args['termid']; } //if search using author if ( isset( $args['author'] ) ) { $followtermusersargs['author'] = $args['author']; } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { $metaargs[] = array( 'key' => $prefix . 'term_user_email', 'value' => $args['search'], 'compare' => 'LIKE' ); } if ( isset( $args['penci_bl_status'] ) && ! empty( $args['penci_bl_status'] ) ) { $status = $args['penci_bl_status'] == 'subscribe' ? '1' : '0'; $metaargs[] = array( 'key' => $prefix . 'follow_status', 'value' => $status ); } if ( isset( $args['penci_bl_taxonomy'] ) && ! empty( $args['penci_bl_taxonomy'] ) ) { $metaargs[] = array( 'key' => $prefix . 'taxonomy_slug', 'value' => $args['penci_bl_taxonomy'] ); } if ( isset( $args['penci_bl_email'] ) && ! empty( $args['penci_bl_email'] ) ) { $metaargs[] = array( 'key' => $prefix . 'term_user_email', 'value' => $args['penci_bl_email'] ); } if ( ! empty( $metaargs ) ) { $followtermusersargs['meta_query'] = $metaargs; } //if returns only id if ( isset( $args['fields'] ) && ! empty( $args['fields'] ) ) { $followtermusersargs['fields'] = $args['fields']; } //get order by records $followtermusersargs['order'] = 'DESC'; $followtermusersargs['orderby'] = 'date'; //fire query in to table for retriving data $result = new WP_Query( $followtermusersargs ); if ( isset( $args['count'] ) && $args['count'] == '1' ) { $followtermuserslist = $result->post_count; } else { //retrived data is in object format so assign that data to array for listing $followtermuserslist = $this->penci_bl_object_to_array( $result->posts ); // if get list for follow term user list then return data with data and total array if ( isset( $args['penci_bl_user_list_term_data'] ) && ! empty( $args['penci_bl_user_list_term_data'] ) ) { $data_res['data'] = $followtermuserslist; //To get total count of post using "found_posts" and for users "total_users" parameter $data_res['total'] = isset( $result->found_posts ) ? $result->found_posts : ''; return $data_res; } } return $followtermuserslist; } /** * Get Term User Logs data */ public function penci_bl_get_follow_term_user_logs_data( $args = array() ) { $prefix = PENCI_BL_META_PREFIX; $followeduserlogssargs = array( 'post_type' => PENCI_BL_TERM_LOGS_POST_TYPE, 'post_status' => 'publish', 'posts_per_page' => '-1' ); //if search using post parent if ( isset( $args['logid'] ) ) { $followeduserlogssargs['post_parent'] = $args['logid']; } //if returns only id if ( isset( $args['fields'] ) && ! empty( $args['fields'] ) ) { $followeduserlogssargs['fields'] = $args['fields']; } //if search is called then retrive searching data if ( isset( $args['search'] ) ) { $metaargs[] = array( 'key' => $prefix . 'log_email_data', 'value' => $args['search'], 'compare' => 'LIKE' ); } if ( ! empty( $metaargs ) ) { $followeduserlogssargs['meta_query'] = $metaargs; } //fire query in to table for retriving data $result = new WP_Query( $followeduserlogssargs ); //retrived data is in object format so assign that data to array for listing $followeduserlogslist = $this->penci_bl_object_to_array( $result->posts ); return $followeduserlogslist; } }inc/class-penci-bf-scripts.php000064400000023202147600022000012267 0ustar00= '3.5' ? '1' : '0'; //check wp version for showing media uploader wp_localize_script( 'penci-bf-admin-scripts', 'Penci_Bf_Settings', array( 'new_media_ui' => $newui, 'resetmsg' => esc_html__( 'Click OK to reset all options. All settings will be lost!', 'penci-bookmark-follow' ), 'testemailsuccess' => esc_html__( 'Test email has been sent successfully.', 'penci-bookmark-follow' ), 'testemailerror' => esc_html__( 'Test email could not sent.', 'penci-bookmark-follow' ) ) ); if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } // loads the required scripts for the meta boxes wp_enqueue_script( 'common' ); wp_enqueue_script( 'wp-lists' ); wp_enqueue_script( 'postbox' ); } } /** * Enqueue Styles for public * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_public_print_styles() { wp_enqueue_style( 'jquery.toast' ); wp_register_style( 'penci-bf-public-style', PENCI_BL_URL . '/inc/css/penci-bf-public.css', array(), PENCI_BL_VERSION ); wp_enqueue_style( 'penci-bf-public-style' ); wp_register_style( 'penci-bf-admin-styles', PENCI_BL_URL . '/inc/css/penci-bf-admin.css', array(), PENCI_BL_VERSION ); } /** * Loading Additional Java Script * * Loads the JavaScript required for toggling the meta boxes on the theme settings page. * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_send_email_page_load_scripts( $hook_suffix ) { //Get main menu slug $main_page_slug = sanitize_title( esc_html__( 'Penci Bookmark & Follow', 'penci-bookmark-follow' ) ); wp_register_script( 'penci-bf-sent-email-page-scripts', PENCI_BL_URL . '/inc/js/penci-bf-sent-email-page.js', array( 'jquery' ), PENCI_BL_VERSION, true ); wp_enqueue_script( 'penci-bf-sent-email-page-scripts' ); wp_localize_script( 'penci-bf-sent-email-page-scripts', 'Penci_Bf_Email_Settings', array( 'main_page_slug' => $main_page_slug ) ); } /** * Enqueue Scripts for frontside * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_front_scripts() { wp_enqueue_script( 'penci-bf-cookie-script', PENCI_BL_URL . '/inc/js/js.cookie.min.js', array( 'jquery' ), PENCI_BL_VERSION, true ); wp_enqueue_script( 'penci-bf-main-scripts', PENCI_BL_URL . '/inc/js/main.js', array( 'jquery' ), PENCI_BL_VERSION, true ); wp_enqueue_script( 'jquery.toast' ); $pages = get_option( 'penci_bl_set_pages' ); $bookmark_page = isset( $pages['subscribe_manage_page'] ) && $pages['subscribe_manage_page'] ? get_page_link( $pages['subscribe_manage_page'] ) : ''; $loggin_flag = is_user_logged_in() ? '1' : '0'; wp_localize_script( 'penci-bf-main-scripts', 'Penci_Bf_Vars', array( 'nonce' => wp_create_nonce( 'penci_bookmark_follow' ), 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'bookmarkpage' => esc_url( $bookmark_page ), 'emailempty' => esc_html__( 'Please enter email.', 'penci-bookmark-follow' ), 'emailinvalid' => esc_html__( 'Please enter valid email.', 'penci-bookmark-follow' ), 'loginflag' => $loggin_flag, 'processing' => esc_html__( 'Processing', 'penci-bookmark-follow' ), 'popup' => (boolean) get_theme_mod( 'pencibf_enable_popup_notify', true ), 'popup_text_cl' => get_theme_mod( 'pencibf_popup_notify_text_cl' ), 'popup_bg_cl' => get_theme_mod( 'pencibf_popup_notify_bg_cl' ), 'popup_timeout' => get_theme_mod( 'pencibf_popup_notify_timeout', '2000' ), 'popup_position' => get_theme_mod( 'pencibf_popup_position', 'bottom-center' ), 'popup_success_title' => get_theme_mod( 'pencibf_popup_success_title', __( 'Success', 'penci-bookmark-follow' ) ), 'popup_success_mess' => get_theme_mod( 'pencibf_popup_success_mess', __( 'Success add to the Bookmark list', 'penci-bookmark-follow' ) ), 'popup_remove_title' => get_theme_mod( 'pencibf_popup_remove_title', __( 'Removed', 'penci-bookmark-follow' ) ), 'popup_remove_mess' => get_theme_mod( 'pencibf_popup_remove_mess', __( 'Post remove from Bookmark list', 'penci-bookmark-follow' ) ), 'popup_success_author_title' => get_theme_mod( 'pencibf_popup_success_author_title', __( 'Success', 'penci-bookmark-follow' ) ), 'popup_success_author_mess' => get_theme_mod( 'pencibf_popup_success_author_mess', __( 'Successfully add author from the favorite list', 'penci-bookmark-follow' ) ), 'popup_remove_author_title' => get_theme_mod( 'pencibf_popup_remove_author_title', __( 'Removed', 'penci-bookmark-follow' ) ), 'popup_remove_author_mess' => get_theme_mod( 'pencibf_popup_remove_author_mess', __( 'Successfully remove author from the favorite list', 'penci-bookmark-follow' ) ), 'popup_success_term_title' => get_theme_mod( 'pencibf_popup_success_term_title', __( 'Success', 'penci-bookmark-follow' ) ), 'popup_success_term_mess' => get_theme_mod( 'pencibf_popup_success_term_mess', __( 'Successfully add category from the favorite list', 'penci-bookmark-follow' ) ), 'popup_remove_term_title' => get_theme_mod( 'pencibf_popup_remove_term_title', __( 'Removed', 'penci-bookmark-follow' ) ), 'popup_remove_term_mess' => get_theme_mod( 'pencibf_popup_remove_term_mess', __( 'Successfully remove category from the favorite list', 'penci-bookmark-follow' ) ), ) ); wp_register_script( 'ajax-chosen', PENCI_BL_URL . '/inc/js/chosen/ajax-chosen.jquery.js', array( 'jquery' ), PENCI_BL_VERSION, true ); wp_register_script( 'penci-bf-admin-scripts', PENCI_BL_URL . '/inc/js/admin.js', array( 'jquery', 'jquery-ui-datepicker', 'jquery-ui-sortable' ), PENCI_BL_VERSION, true ); } /** * Display button in post / page container * * Handles to display button in post / page container * * @package Penci Bookmark Follow * @since 1.0.0 */ public function penci_bl_shortcode_display_button( $buttons ) { array_push( $buttons, "|", "penci_bl_follow_post" ); return $buttons; } /** * style on head of page * * Handles style code display when wp head initialize * * @package Penci Bookmark Follow * @since 1.8.5 */ public function penci_bl_custom_style() { //Get custom css code global $penci_bl_options; if ( ! empty( $penci_bl_options['custom_css'] ) ) {//if custom css code not available echo ''; } } /** * Adding Hooks * * Adding proper hoocks for the scripts. * * @package Penci Bookmark Follow * @since 1.0.0 */ public function add_hooks() { //add styles for admin add_action( 'admin_enqueue_scripts', array( $this, 'penci_bl_admin_print_styles' ) ); //add scripts for admin add_action( 'admin_enqueue_scripts', array( $this, 'penci_bl_admin_enqueue_scripts' ) ); //add styles for public add_action( 'wp_enqueue_scripts', array( $this, 'penci_bl_public_print_styles' ) ); //script for front side add_action( 'wp_enqueue_scripts', array( $this, 'penci_bl_front_scripts' ) ); //style code on wp head add_action( 'wp_head', array( $this, 'penci_bl_custom_style' ) ); } }inc/class-penci-bf-pagination-public.php000064400000012727147600022000014217 0ustar00nextT = esc_html__( "Next", 'penci-bookmark-follow' ); $this->prevT = esc_html__( "Previous", 'penci-bookmark-follow' ); $this->ajaxpagination = $ajaxpagination; } /*****/ var $calculate = false; #Total items function items( $value ) { $this->total_pages = (int) $value; } #how many items to show per page function limit( $value ) { $this->limit = (int) $value; } #Page to sent the page value function target( $value ) { $this->target = $value; } #Current page function currentPage( $value ) { $this->page = (int) $value; } #How many adjacent pages should be shown on each side of the current page? function adjacents( $value ) { $this->adjacents = (int) $value; } #show counter? function showCounter( $value = "" ) { $this->showCounter = ( $value === true ) ? true : false; } #to change the class name of the pagination div function changeClass( $value = "" ) { $this->className = $value; } function nextLabel( $value ) { $this->nextT = $value; } function nextIcon( $value ) { $this->nextI = $value; } function prevLabel( $value ) { $this->prevT = $value; } function prevIcon( $value ) { $this->prevI = $value; } #to change the class name of the pagination div function parameterName( $value = "" ) { $this->parameterName = $value; } var $pagination; function pagination() { } function show() { if ( ! $this->calculate ) { if ( $this->calculate() ) { echo "
        className\">$this->pagination
        \n"; } } } function getOutput($class='') { if ( ! $this->calculate ) { if ( $this->calculate($class) ) { return "
        className\">$this->pagination
        \n"; } } } function is_render() { return $this->pagination ? true : false; } function get_pagenum_link( $id ) { if ( strpos( $this->target, '?' ) === false ) { if ( $this->urlF ) { return "javascript:void(0);"; } else { return "javascript:void(0);"; } } else { $addpar = ''; if ( isset( $_GET['search_action_name'] ) && ! empty( $_GET['search_action_name'] ) ) { $addpar .= 'search_action_name=' . $_GET['search_action_name'] . '&'; } if ( isset( $_GET['search_action_email'] ) && $_GET['search_action_email'] != '' ) { $addpar .= 'search_action_email=' . $_GET['search_action_email'] . '&'; } if ( isset( $_GET['orderby'] ) && ! empty( $_GET['orderby'] ) ) { $addpar .= 'orderby=' . $_GET['orderby'] . '&'; } if ( isset( $_GET['order'] ) && ! empty( $_GET['order'] ) ) { $addpar .= 'order=' . $_GET['order'] . '&'; } return "javascript:void(0);"; } } function calculate($class='') { $this->pagination = ""; $this->calculate == true; $error = false; if ( $this->urlF and $this->urlF != '%' and strpos( $this->target, $this->urlF ) === false ) { //Wildcard to replace one you specified, but does not exist in the target echo "Wildcard to replace one you specified, but does not exist in the target
        "; $error = true; } elseif ( $this->urlF and $this->urlF == '%' and strpos( $this->target, $this->urlF ) === false ) { echo "You must specify the target in the wildcard % to replace the page number
        "; $error = true; } if ( $this->total_pages < 0 ) { echo "It is necessary to specify the number of pages (\$class->items(1000))
        "; $error = true; } if ( $this->limit == null ) { echo "It is necessary to specify the limit of items to show per page (\$class->limit(10))
        "; $error = true; } if ( $error ) { return false; } /* Setup page vars for display. */ $next = $this->page + 1; //next page is page + 1 $lastpage = ceil( $this->total_pages / $this->limit ); //lastpage is = total pages / items per page, rounded up. /* Now we apply our rules and draw the pagination object. We're actually saving the code to a variable in case we want to draw it more than once. */ if ( $lastpage > 1 && function_exists( 'penci_get_setting' ) ) { $btn_text = penci_get_setting( 'penci_trans_load_more_posts' ); $btn_alt = penci_get_setting( 'penci_trans_no_more_posts' ); if ( $class == 'author'){ $btn_text = pencibf_get_text('moreauthors'); $btn_alt = pencibf_get_text( 'smoreauthors' ); } if ( $class == 'term'){ $btn_text = pencibf_get_text('moreterms'); $btn_alt = pencibf_get_text( 'smoreterms' ); } $this->pagination .= "" . $btn_text . "" . penci_icon_by_ver( 'fas fa-sync' ) . ""; } return true; } }inc/penci-bf-post-types.php000064400000015457147600022000011641 0ustar00 esc_html__( 'Follow Post', 'penci-bookmark-follow' ), 'singular_name' => esc_html__( 'Follow Post', 'penci-bookmark-follow' ), 'add_new' => esc_html__( 'Add New', 'penci-bookmark-follow' ), 'add_new_item' => esc_html__( 'Add New Follow Post', 'penci-bookmark-follow' ), 'edit_item' => esc_html__( 'Edit Follow Post', 'penci-bookmark-follow' ), 'new_item' => esc_html__( 'New Follow Post', 'penci-bookmark-follow' ), 'all_items' => esc_html__( 'All Follow Posts', 'penci-bookmark-follow' ), 'view_item' => esc_html__( 'View Follow Post', 'penci-bookmark-follow' ), 'search_items' => esc_html__( 'Search Follow Post', 'penci-bookmark-follow' ), 'not_found' => esc_html__( 'No follow posts found', 'penci-bookmark-follow' ), 'not_found_in_trash' => esc_html__( 'No follow posts found in Trash', 'penci-bookmark-follow' ), 'parent_item_colon' => '', 'menu_name' => esc_html__( 'Follow Posts', 'penci-bookmark-follow' ), ); $follow_post_args = array( 'labels' => $follow_post_labels, 'public' => false, 'query_var' => false, 'rewrite' => false, 'capability_type' => PENCI_BL_POST_TYPE, 'hierarchical' => false, 'supports' => array( 'title' ), ); //register follow posts post type register_post_type( PENCI_BL_POST_TYPE, $follow_post_args ); //follow post logs - post type $follow_post_logs_labels = array( 'name' => esc_html__( 'Follow Post Logs', 'penci-bookmark-follow' ), 'singular_name' => esc_html__( 'Follow Post Log', 'penci-bookmark-follow' ), 'add_new' => esc_html__( 'Add New', 'penci-bookmark-follow' ), 'add_new_item' => esc_html__( 'Add New Follow Post Log', 'penci-bookmark-follow' ), 'edit_item' => esc_html__( 'Edit Follow Post Log', 'penci-bookmark-follow' ), 'new_item' => esc_html__( 'New Follow Post Log', 'penci-bookmark-follow' ), 'all_items' => esc_html__( 'All Follow Post Logs', 'penci-bookmark-follow' ), 'view_item' => esc_html__( 'View Follow Post Log', 'penci-bookmark-follow' ), 'search_items' => esc_html__( 'Search Follow Post Log', 'penci-bookmark-follow' ), 'not_found' => esc_html__( 'No follow post logs found', 'penci-bookmark-follow' ), 'not_found_in_trash' => esc_html__( 'No follow post logs found in Trash', 'penci-bookmark-follow' ), 'parent_item_colon' => '', 'menu_name' => esc_html__( 'Follow Post Logs', 'penci-bookmark-follow' ), ); $follow_post_logs_args = array( 'labels' => $follow_post_logs_labels, 'public' => false, 'query_var' => false, 'rewrite' => false, 'capability_type' => PENCI_BL_LOGS_POST_TYPE, 'hierarchical' => false, 'supports' => array( 'title' ) ); //register follow posts logs post type register_post_type( PENCI_BL_LOGS_POST_TYPE, $follow_post_logs_args ); //follow author - post type $follow_author_labels = array( 'name' => esc_html__( 'Follow Author', 'penci-bookmark-follow' ), 'singular_name' => esc_html__( 'Follow Author', 'penci-bookmark-follow' ), 'add_new' => esc_html__( 'Add New', 'penci-bookmark-follow' ), 'add_new_item' => esc_html__( 'Add New Follow Author', 'penci-bookmark-follow' ), 'edit_item' => esc_html__( 'Edit Follow Author', 'penci-bookmark-follow' ), 'new_item' => esc_html__( 'New Follow Author', 'penci-bookmark-follow' ), 'all_items' => esc_html__( 'All Follow Authors', 'penci-bookmark-follow' ), 'view_item' => esc_html__( 'View Follow Author', 'penci-bookmark-follow' ), 'search_items' => esc_html__( 'Search Follow Author', 'penci-bookmark-follow' ), 'not_found' => esc_html__( 'No follow authors found', 'penci-bookmark-follow' ), 'not_found_in_trash' => esc_html__( 'No follow authors found in Trash', 'penci-bookmark-follow' ), 'parent_item_colon' => '', 'menu_name' => esc_html__( 'Follow Authors', 'penci-bookmark-follow' ), ); $follow_author_args = array( 'labels' => $follow_author_labels, 'public' => false, 'query_var' => false, 'rewrite' => false, 'capability_type' => PENCI_BL_AUTHOR_POST_TYPE, 'hierarchical' => false, 'supports' => array( 'title' ) ); //register follow author post type register_post_type( PENCI_BL_AUTHOR_POST_TYPE, $follow_author_args ); //follow Author logs - post type $follow_author_logs_labels = array( 'name' => esc_html__( 'Follow Author Logs', 'penci-bookmark-follow' ), 'singular_name' => esc_html__( 'Follow Author Log', 'penci-bookmark-follow' ), 'add_new' => esc_html__( 'Add New', 'penci-bookmark-follow' ), 'add_new_item' => esc_html__( 'Add New Follow Author Log', 'penci-bookmark-follow' ), 'edit_item' => esc_html__( 'Edit Follow Author Log', 'penci-bookmark-follow' ), 'new_item' => esc_html__( 'New Follow Author Log', 'penci-bookmark-follow' ), 'all_items' => esc_html__( 'All Follow Author Logs', 'penci-bookmark-follow' ), 'view_item' => esc_html__( 'View Follow Author Log', 'penci-bookmark-follow' ), 'search_items' => esc_html__( 'Search Follow Author Log', 'penci-bookmark-follow' ), 'not_found' => esc_html__( 'No follow author logs found', 'penci-bookmark-follow' ), 'not_found_in_trash' => esc_html__( 'No follow author logs found in Trash', 'penci-bookmark-follow' ), 'parent_item_colon' => '', 'menu_name' => esc_html__( 'Follow Author Logs', 'penci-bookmark-follow' ), ); $follow_author_logs_args = array( 'labels' => $follow_author_logs_labels, 'public' => false, 'query_var' => false, 'rewrite' => false, 'capability_type' => PENCI_BL_AUTHOR_LOGS_POST_TYPE, 'hierarchical' => false, 'supports' => array( 'title' ) ); //register follow authors logs post type register_post_type( PENCI_BL_AUTHOR_LOGS_POST_TYPE, $follow_author_logs_args ); } //register custom post type add_action( 'init', 'penci_bl_register_post_types', 100 ); // we need to keep priority 100, because we need to execute this init action after all other init action called. inc/class-penci-bf-message-stack.php000064400000006377147600022000013345 0ustar00messages = array(); $pencibf_message_stack = get_transient( 'pencibf_message_stack' ); if ( empty( $pencibf_message_stack ) ) { $pencibf_message_stack = array( 'messageToStack' => array() ); set_transient( 'pencibf_message_stack', $pencibf_message_stack ); } $this->messageToStack =& $pencibf_message_stack['messageToStack']; for ( $i = 0, $n = sizeof( $this->messageToStack ); $i < $n; $i ++ ) { $this->add( $this->messageToStack[ $i ]['class'], $this->messageToStack[ $i ]['text'], $this->messageToStack[ $i ]['type'] ); } $this->messageToStack = array(); } // class methods function add( $class, $message, $type = '' ) { if ( $type == 'error' ) { $this->messages[] = array( 'params' => 'class="message_stack_error"', 'class' => $class, 'text' => ' ' . $message ); } elseif ( $type == 'multierror' ) { $this->messages[] = array( 'params' => 'class="message_stack_multierror"', 'class' => $class, 'text' => ' ' . $message ); } elseif ( $type == 'success' ) { $this->messages[] = array( 'params' => 'class="message_stack_success"', 'class' => $class, 'text' => ' ' . $message ); } else { $this->messages[] = array( 'params' => 'class="message_stack_error"', 'class' => $class, 'text' => '' . $message ); } } function add_session( $class, $message, $type = '' ) { if ( $type == 'error' ) { $this->messageToStack[] = array( 'params' => 'class="message_stack_error"', 'class' => $class, 'text' => '' . $message, 'type' => $type ); } elseif ( $type == 'multierror' ) { $this->messageToStack[] = array( 'params' => 'class="message_stack_multierror"', 'class' => $class, 'text' => ' ' . $message, 'type' => $type ); } else { $this->messageToStack[] = array( 'params' => 'class="message_stack_success"', 'class' => $class, 'text' => '' . $message, 'type' => $type ); } $pencibf_message_stack['messageToStack'] = $this->messageToStack; set_transient( 'pencibf_message_stack', $pencibf_message_stack ); } function reset() { $this->messages = array(); } function output( $class ) { $str = ''; $output = array(); for ( $i = 0, $n = count( $this->messages ); $i < $n; $i ++ ) { if ( $this->messages[ $i ]['class'] == $class ) { $output[] = $this->messages[ $i ]; } } $len = count( $output ); for ( $ii = 0; $ii < $len; $ii ++ ) { $str .= '
        ' . $output[ $ii ]['text'] . '
        '; } $pencibf_message_stack = array( 'messageToStack' => array() ); set_transient( 'pencibf_message_stack', $pencibf_message_stack ); return $str; } function size( $class ) { $count = 0; for ( $i = 0, $n = sizeof( $this->messages ); $i < $n; $i ++ ) { if ( $this->messages[ $i ]['class'] == $class ) { $count ++; } } return $count; } }inc/penci-bf-template-hooks.php000064400000006444147600022000012442 0ustar00The available tags are:\n" "{post_name} - displays the title of the post
        \n" "{post_link} - displays the post title with link
        \n" "{site_name} - displays the name of your site
        \n" "{site_link} - displays the site name with link" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:59 msgid "New Post Author Subscription Email Template" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:75 msgid "" "New post added by the author \"{author_name}\": {post_name} " "{post_description} If you want to see page click below link {post_link} for " "{site_link}" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:87 msgid "Comment Subscription Email Template" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:94 msgid "New comment on \"{post_name}\" by {user_name}" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:103 msgid "" "New comment added on the post \"{post_name}\" by {user_name}, see below : " "{comment_text}" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:115 msgid "Posts Confirmation Email Template" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:122 msgid "Follow {post_name} - {site_name}" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:131 msgid "" "Hello You recently followed below blog post. This means you will receive an " "email when post is updated. Blog Post URL: {post_link} To activate, click " "confirm below. If you did not request this, please feel free to disregard " "this notice! {subscribe_url} Thanks" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:143 msgid "Author Confirmation Email Template" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:150 msgid "Follow {author_name} - {site_name}" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:152 msgid "" " \t\n" "This is the subject of the email that will be sent to the user for " "confirming his email address for subscription of any authors. Available " "template tags for subject fields are :\n" "{author_name} - displays the name of author\n" "{site_name} - displays the name of your site" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:162 msgid "" "Hello You recently followed the author \"{author_name}\". This means you " "will receive an email when any new post is published by the author " "\"{author_name}\". To activate, click confirm below. If you did not request " "this, please feel free to disregard this notice! {subscribe_url} Thanks" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:164 msgid "" "This is the body, main content of the email that will be sent to the user " "for confirming his email address for subscription of any authors. The " "available tags are:\n" "{author_name} - displays the name of the author\n" "{site_name} - displays the name of your site\n" "{site_link} - displays the site name with link\n" "{subscribe_url} - displays the subscribe url for confirm email subscription." msgstr "" #: customizer/penci_bookmark_follow_email_section.php:174 msgid "Unsubscribe Confirmation Email Template" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:181 msgid "[{site_name}] Please confirm your unsubscription request" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:183 msgid "" "This is the subject of the email that will be sent to the user for " "confirming his email address for unsubscription. Available template tags for " "subject fields are :\n" "{email} - displays the follower's email\n" "{site_name} - displays the name of your site" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:192 msgid "" "{site_name} has received a request to unsubscribe for this email address. To " "complete your request please click on the link below: {confirm_url} If you " "did not request this, please feel free to disregard this notice!\". To " "activate, click confirm below. If you did not request this, please feel free " "to disregard this notice! {subscribe_url} Thanks" msgstr "" #: customizer/penci_bookmark_follow_email_section.php:194 msgid "" "This is the body, main content of the email that will be sent to the user " "for confirming his email address for unsubscription. The available tags " "are:\n" "{email} - displays the follower's email\n" "{site_name} - displays the name of your site\n" "{site_link} - displays the site name with link\n" "{confirm_url} - displays the confirm url for confirm email unsubscription." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:8 msgid "Disable Header Bookmark Icon" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:14 msgid "Posts Type Follows" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:21 msgid "Enable Support in Post Types" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:57 msgid "Disable Guest Followers" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:58 msgid "" "Guests (non-logged-in users) have the permission to follow any post by " "default. If you check this option, then Follow button would not be displayed " "for Guest users." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:65 msgid "Auto Send Email Notification for Followers" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:66 msgid "" "If this option is checked, whenever the post is edited or receives new " "comments, the followers will receive an email notification." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:73 msgid "Disable Email Notify When Comment Added" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:74 msgid "" "This option allows you to disable email notifications when a post receives a " "new comment. It applies when you have checked the \"Auto Send Email " "Notification for Followers\" option mentioned above." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:81 msgid "" "After selecting a custom bookmark page, you need to insert the shortcodes " "[pencibf_follow_post_list] and " "[pencibf_follow_author_list] into the page to display the " "bookmarked content." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:95 msgid "Custom Bookmark Page" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:102 msgid "" "After selecting a custom Unsubscribe page, you need to insert the shortcodes " "[pencibf_unsubscribe] into the page to display the " "Unsubscribe Form." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:116 msgid "Custom Unsubscribe Email Bookmark Page" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:123 msgid "Select the page that you've inserted the Category Listing element." msgstr "" #: customizer/penci_bookmark_follow_general_section.php:137 msgid "Custom Category Listing Page" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:144 msgid "Bookmark Page Settings" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:152 msgid "Number of Bookmark Items Per Page" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:160 msgid "Show Post Date" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:168 msgid "Show Post Author" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:176 msgid "Show Post Comment Count" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:184 msgid "Show Post Views" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:192 msgid "Show Post Reading Time" msgstr "" #: customizer/penci_bookmark_follow_general_section.php:198 msgid "Colors" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:8 msgid "Require Email Confirmation" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:15 msgid "Posts Notification Events" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:22 #: customizer/penci_bookmark_follow_noti_section.php:49 msgid "Email: When post / page updated" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:29 #: customizer/penci_bookmark_follow_noti_section.php:56 msgid "Email: When new comment added" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:35 msgid "Author Notification Events" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:42 msgid "Email: When post / page published" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:62 msgid "Popup Notifications" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:70 msgid "Enable Popup Notify" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:77 msgid "Popup Text Color" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:84 msgid "Popup Background Color" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:92 msgid "Popup Timeout" msgstr "" #: customizer/penci_bookmark_follow_noti_section.php:100 msgid "Popup Position" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:7 msgid "Posts Follows" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:14 #: penci-bookmark-follow.php:290 msgid "Bookmark" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:15 msgid "Text: Bookmark" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:22 #: penci-bookmark-follow.php:291 msgid "Bookmarked" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:23 msgid "Text: Bookmarked" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:30 msgid "Un-bookmark" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:31 msgid "Text: Un-bookmark" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:37 msgid "Author Follows" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:44 #: inc/admin/class-penci-bf-admin.php:231 #: inc/admin/forms/penci-bf-add-follower.php:250 penci-bookmark-follow.php:325 #: penci-bookmark-follow.php:333 penci-bookmark-follow.php:335 msgid "Follow" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:45 msgid "Text: Follow" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:52 #: inc/admin/class-penci-bf-admin.php:232 msgid "Following" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:53 msgid "Text: Following" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:60 #: inc/admin/class-penci-bf-admin.php:233 msgid "Unfollow" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:61 msgid "Text: Unfollow" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:68 msgid "Post Popup Content" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:74 #: customizer/penci_bookmark_follow_translate_section.php:113 #: customizer/penci_bookmark_follow_translate_section.php:153 #: inc/class-penci-bf-scripts.php:178 inc/class-penci-bf-scripts.php:183 #: inc/class-penci-bf-scripts.php:188 msgid "Success" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:76 #: customizer/penci_bookmark_follow_translate_section.php:115 #: customizer/penci_bookmark_follow_translate_section.php:155 msgid "Success Heading Title" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:82 msgid "Post added to Bookmark" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:84 msgid "Success Message" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:90 #: customizer/penci_bookmark_follow_translate_section.php:129 #: customizer/penci_bookmark_follow_translate_section.php:169 #: inc/class-penci-bf-scripts.php:180 inc/class-penci-bf-scripts.php:185 #: inc/class-penci-bf-scripts.php:190 msgid "Removed" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:92 msgid "Post Remove Heading Title" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:98 #: inc/class-penci-bf-scripts.php:181 msgid "Post remove from Bookmark list" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:100 msgid "Post Remove Message" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:107 msgid "Author Popup Content" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:121 #: inc/class-penci-bf-scripts.php:184 msgid "Successfully add author from the favorite list" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:123 #: customizer/penci_bookmark_follow_translate_section.php:163 msgid "Success Content" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:131 #: customizer/penci_bookmark_follow_translate_section.php:171 msgid "Author Remove Title" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:137 #: inc/class-penci-bf-scripts.php:186 msgid "Successfully remove author from the favorite list" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:139 #: customizer/penci_bookmark_follow_translate_section.php:179 msgid "Author Remove Message" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:147 msgid "Term Popup Content" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:161 #: inc/class-penci-bf-scripts.php:189 msgid "Successfully add category from the favorite list" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:177 #: inc/class-penci-bf-scripts.php:191 msgid "Successfully remove category from the favorite list" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:185 msgid "Other Texts" msgstr "" #: customizer/penci_bookmark_follow_translate_section.php:195 msgid "Text:" msgstr "" #: inc/admin/class-penci-bf-admin.php:46 msgid "Penci Bookmark & Follow " msgstr "" #: inc/admin/class-penci-bf-admin.php:46 inc/admin/class-penci-bf-admin.php:53 #: inc/class-penci-bf-scripts.php:32 inc/class-penci-bf-scripts.php:67 #: inc/class-penci-bf-scripts.php:138 msgid "Penci Bookmark & Follow" msgstr "" #: inc/admin/class-penci-bf-admin.php:58 msgid "Penci Bookmark & Follow - Followed Posts" msgstr "" #: inc/admin/class-penci-bf-admin.php:58 msgid "Followed Posts" msgstr "" #: inc/admin/class-penci-bf-admin.php:64 msgid "Penci Bookmark & Follow - Followed Authors" msgstr "" #: inc/admin/class-penci-bf-admin.php:64 msgid "Followed Authors" msgstr "" #: inc/admin/class-penci-bf-admin.php:70 msgid "Penci Bookmark & Follow - Send Emails" msgstr "" #: inc/admin/class-penci-bf-admin.php:70 #: inc/admin/forms/penci-bf-send-email.php:46 #: inc/admin/forms/penci-bf-send-email.php:65 msgid "Send Emails" msgstr "" #: inc/admin/class-penci-bf-admin.php:76 msgid "Penci Bookmark & Follow - Add Followers" msgstr "" #: inc/admin/class-penci-bf-admin.php:76 msgid "Add Followers" msgstr "" #: inc/admin/class-penci-bf-admin.php:236 msgid "Follow {term_name}" msgstr "" #: inc/admin/class-penci-bf-admin.php:237 msgid "Following {term_name}" msgstr "" #: inc/admin/class-penci-bf-admin.php:238 msgid "Unfollow {term_name}" msgstr "" #: inc/admin/class-penci-bf-admin.php:661 msgid "Email successfully sent to all followers." msgstr "" #: inc/admin/class-penci-bf-admin.php:764 msgid "Notify followers for this update:" msgstr "" #: inc/admin/class-penci-bf-admin.php:809 msgid "Penci Bookmark & Follow - Notification" msgstr "" #: inc/admin/class-penci-bf-admin.php:892 #: inc/admin/forms/penci-bf-users-list-authors.php:181 #: inc/admin/forms/penci-bf-users-list-authors.php:267 #: inc/admin/forms/penci-bf-users-list.php:185 #: inc/admin/forms/penci-bf-users-list.php:270 #: inc/penci-bf-misc-functions.php:155 inc/penci-bf-misc-functions.php:202 msgid "Unsubscribe" msgstr "" #: inc/admin/class-penci-bf-admin.php:969 #: inc/admin/class-penci-bf-admin.php:1025 #: inc/templates/subscribe-manage/follow-posts-listing/follow-posts-listing.php:145 #: penci-bookmark-follow.php:423 msgid "(no title)" msgstr "" #: inc/admin/class-penci-bf-admin.php:1147 #, php-format msgid "Mail sent successfully to %s followers." msgstr "" #: inc/admin/class-penci-bf-admin.php:1402 #: inc/admin/class-penci-bf-admin.php:1504 #: inc/admin/forms/penci-bf-users-list-authors.php:145 #: inc/admin/forms/penci-bf-users-list.php:112 msgid "Registered User" msgstr "" #: inc/admin/class-penci-bf-admin.php:1404 #: inc/admin/class-penci-bf-admin.php:1506 #: inc/admin/forms/penci-bf-users-list-authors.php:113 #: inc/admin/forms/penci-bf-users-list.php:116 msgid "guest" msgstr "" #: inc/admin/class-penci-bf-admin.php:1405 #: inc/admin/class-penci-bf-admin.php:1507 #: inc/admin/forms/penci-bf-users-list-authors.php:145 #: inc/admin/forms/penci-bf-users-list.php:117 msgid "Guest" msgstr "" #: inc/admin/class-penci-bf-admin.php:1408 #: inc/admin/class-penci-bf-admin.php:1510 #: inc/admin/forms/penci-bf-users-list-authors.php:155 #: inc/admin/forms/penci-bf-users-list.php:159 msgid "Yes" msgstr "" #: inc/admin/class-penci-bf-admin.php:1408 #: inc/admin/class-penci-bf-admin.php:1510 #: inc/admin/forms/penci-bf-users-list-authors.php:158 #: inc/admin/forms/penci-bf-users-list.php:162 msgid "No" msgstr "" #: inc/admin/forms/penci-bf-list-authors.php:78 #: inc/admin/forms/penci-bf-list-authors.php:163 #: inc/admin/forms/penci-bf-list.php:84 inc/admin/forms/penci-bf-list.php:196 msgid "View Followers" msgstr "" #: inc/admin/forms/penci-bf-list-authors.php:132 #: inc/admin/forms/penci-bf-list-authors.php:201 #: inc/admin/forms/penci-bf-list.php:165 inc/admin/forms/penci-bf-list.php:238 #: inc/admin/forms/penci-bf-users-list-authors.php:186 #: inc/admin/forms/penci-bf-users-list-authors.php:268 #: inc/admin/forms/penci-bf-users-list.php:190 #: inc/admin/forms/penci-bf-users-list.php:271 #: inc/admin/forms/penci-bf-users-logs-list-authors.php:110 #: inc/admin/forms/penci-bf-users-logs-list-authors.php:181 #: inc/admin/forms/penci-bf-users-logs-list.php:110 #: inc/admin/forms/penci-bf-users-logs-list.php:181 msgid "Delete" msgstr "" #: inc/admin/forms/penci-bf-list-authors.php:162 penci-bookmark-follow.php:425 msgid "Author Name" msgstr "" #: inc/admin/forms/penci-bf-list-authors.php:215 #: inc/admin/forms/penci-bf-list.php:293 msgid "Export All Followers" msgstr "" #: inc/admin/forms/penci-bf-list-authors.php:299 #: inc/admin/forms/penci-bf-list.php:381 #: inc/admin/forms/penci-bf-users-list-authors.php:428 #: inc/admin/forms/penci-bf-users-list.php:433 #: inc/admin/forms/penci-bf-users-logs-list-authors.php:331 #: inc/admin/forms/penci-bf-users-logs-list.php:330 msgid "Record (s) deleted successfully." msgstr "" #: inc/admin/forms/penci-bf-list-authors.php:314 #: inc/admin/forms/penci-bf-list.php:396 #: inc/admin/forms/penci-bf-users-logs-list-authors.php:357 #: inc/admin/forms/penci-bf-users-logs-list.php:356 msgid "Search" msgstr "" #: inc/admin/forms/penci-bf-list.php:195 msgid "Post Name" msgstr "" #: inc/admin/forms/penci-bf-list.php:197 msgid "Post Type" msgstr "" #: inc/admin/forms/penci-bf-list.php:268 inc/admin/forms/penci-bf-list.php:270 msgid "Select a Post Type" msgstr "" #: inc/admin/forms/penci-bf-list.php:292 #: inc/admin/forms/penci-bf-users-list-authors.php:327 #: inc/admin/forms/penci-bf-users-list.php:330 msgid "Filter" msgstr "" #: inc/admin/forms/penci-bf-send-email.php:202 msgid "Send Email" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:94 #: inc/admin/forms/penci-bf-users-list.php:95 msgid "View Log" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:183 #: inc/admin/forms/penci-bf-users-list-authors.php:266 #: inc/admin/forms/penci-bf-users-list.php:187 #: inc/admin/forms/penci-bf-users-list.php:269 msgid "Subscribe" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:218 #: inc/admin/forms/penci-bf-users-list.php:222 msgid "User Email" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:219 #: inc/admin/forms/penci-bf-users-list.php:223 msgid "User Type" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:220 #: inc/admin/forms/penci-bf-users-list.php:225 msgid "User" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:221 #: inc/admin/forms/penci-bf-users-list-authors.php:288 #: inc/admin/forms/penci-bf-users-list.php:224 #: inc/admin/forms/penci-bf-users-list.php:291 msgid "Subscribed" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:224 #: inc/admin/forms/penci-bf-users-list.php:228 msgid "View Logs" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:289 #: inc/admin/forms/penci-bf-users-list.php:292 msgid "Unsubscribed" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:294 #: inc/admin/forms/penci-bf-users-list-authors.php:296 #: inc/admin/forms/penci-bf-users-list.php:297 #: inc/admin/forms/penci-bf-users-list.php:299 msgid "All" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:328 #: inc/admin/forms/penci-bf-users-list.php:331 msgid "Export Followers" msgstr "" #: inc/admin/forms/penci-bf-users-list-authors.php:414 #: inc/admin/forms/penci-bf-users-list.php:418 #, php-format msgid "Followers For %s" msgstr "" #: inc/admin/forms/penci-bf-users-logs-list-authors.php:142 #: inc/admin/forms/penci-bf-users-logs-list.php:142 msgid "Post Date" msgstr "" #: inc/class-penci-bf-model.php:549 msgid "Hello world!" msgstr "" #: inc/class-penci-bf-model.php:1823 inc/class-penci-bf-model.php:1895 #: inc/class-penci-bf-model.php:1990 msgid "Confirm Follow" msgstr "" #: inc/class-penci-bf-model.php:2074 msgid "Confirm Unsubscription" msgstr "" #: inc/class-penci-bf-model.php:2601 msgid "HTML Template" msgstr "" #: inc/class-penci-bf-model.php:2602 msgid "No template, plain text only" msgstr "" #: inc/class-penci-bf-pagination-public.php:28 msgid "Next" msgstr "" #: inc/class-penci-bf-pagination-public.php:29 msgid "Previous" msgstr "" #: inc/class-penci-bf-public.php:178 inc/class-penci-bf-public.php:211 msgid "Your email is unsubscribed successfully." msgstr "" #: inc/class-penci-bf-public.php:216 inc/class-penci-bf-public.php:1056 msgid "Sorry, This email id does not exist in our system." msgstr "" #: inc/class-penci-bf-public.php:301 inc/class-penci-bf-public.php:401 #: inc/class-penci-bf-public.php:492 inc/class-penci-bf-public.php:704 #: inc/class-penci-bf-public.php:745 inc/class-penci-bf-public.php:900 #: inc/class-penci-bf-public.php:939 inc/class-penci-bf-public.php:1590 #: inc/class-penci-bf-public.php:1636 msgid "Your email is subscribed successfully." msgstr "" #: inc/class-penci-bf-public.php:313 inc/class-penci-bf-public.php:725 #: inc/class-penci-bf-public.php:727 msgid "Your email is already subscribed for this post." msgstr "" #: inc/class-penci-bf-public.php:419 inc/class-penci-bf-public.php:1617 msgid "Your email is already subscribed for this term." msgstr "" #: inc/class-penci-bf-public.php:504 inc/class-penci-bf-public.php:921 #: inc/class-penci-bf-public.php:923 msgid "Your email is already subscribed for this author." msgstr "" #: inc/class-penci-bf-public.php:614 inc/class-penci-bf-public.php:802 #: inc/class-penci-bf-public.php:1128 inc/class-penci-bf-public.php:1165 msgid "Nonce verification fails." msgstr "" #: inc/class-penci-bf-public.php:657 inc/class-penci-bf-public.php:853 #: inc/class-penci-bf-public.php:1548 msgid "Please check your email inbox to confirm subscription." msgstr "" #: inc/class-penci-bf-public.php:732 #, php-format msgid "%s This Email is already subscribed for this post. %s" msgstr "" #: inc/class-penci-bf-public.php:749 inc/class-penci-bf-public.php:943 #: inc/class-penci-bf-public.php:1640 msgid "Email is subscribed successfully." msgstr "" #: inc/class-penci-bf-public.php:927 #, php-format msgid "%s Your email is already subscribed for this author. %s" msgstr "" #: inc/class-penci-bf-public.php:1049 msgid "Please check your email inbox to confirm unsubscription." msgstr "" #: inc/class-penci-bf-public.php:1051 msgid "Mail sent error." msgstr "" #: inc/class-penci-bf-public.php:1063 inc/class-penci-bf-scripts.php:170 msgid "Please enter valid email." msgstr "" #: inc/class-penci-bf-public.php:1069 inc/class-penci-bf-scripts.php:169 msgid "Please enter email." msgstr "" #: inc/class-penci-bf-public.php:1092 penci-bookmark-follow.php:432 msgid "You have not follow any posts yet." msgstr "" #: inc/class-penci-bf-public.php:1113 penci-bookmark-follow.php:433 msgid "You have not follow any authors yet." msgstr "" #: inc/class-penci-bf-public.php:1260 #, php-format msgid "Followers %s" msgstr "" #: inc/class-penci-bf-public.php:1272 #, php-format msgid "Following %s" msgstr "" #: inc/class-penci-bf-public.php:1310 #, php-format msgid "" "%s NOTE: %s Guest users who have followed the @%s have not been listed here." msgstr "" #: inc/class-penci-bf-public.php:1404 msgid "Followers " msgstr "" #: inc/class-penci-bf-public.php:1412 msgid "Following " msgstr "" #: inc/class-penci-bf-public.php:1436 msgid "Notify followers for this update" msgstr "" #: inc/class-penci-bf-public.php:1461 msgid "You have not follow any terms yet." msgstr "" #: inc/class-penci-bf-public.php:1619 msgid "Your email is already subscribed for this item." msgstr "" #: inc/class-penci-bf-public.php:1624 #, php-format msgid "%s This Email is already subscribed for this term. %s" msgstr "" #: inc/class-penci-bf-scripts.php:95 msgid "Click OK to reset all options. All settings will be lost!" msgstr "" #: inc/class-penci-bf-scripts.php:96 msgid "Test email has been sent successfully." msgstr "" #: inc/class-penci-bf-scripts.php:97 msgid "Test email could not sent." msgstr "" #: inc/class-penci-bf-scripts.php:172 msgid "Processing" msgstr "" #: inc/class-penci-bf-scripts.php:179 msgid "Success add to the Bookmark list" msgstr "" #: inc/class-penci-bf-shortcodes.php:50 msgid "Please enter post id." msgstr "" #: inc/penci-bf-post-types.php:30 inc/penci-bf-post-types.php:31 msgid "Follow Post" msgstr "" #: inc/penci-bf-post-types.php:32 inc/penci-bf-post-types.php:61 #: inc/penci-bf-post-types.php:90 inc/penci-bf-post-types.php:119 msgid "Add New" msgstr "" #: inc/penci-bf-post-types.php:33 msgid "Add New Follow Post" msgstr "" #: inc/penci-bf-post-types.php:34 msgid "Edit Follow Post" msgstr "" #: inc/penci-bf-post-types.php:35 msgid "New Follow Post" msgstr "" #: inc/penci-bf-post-types.php:36 msgid "All Follow Posts" msgstr "" #: inc/penci-bf-post-types.php:37 msgid "View Follow Post" msgstr "" #: inc/penci-bf-post-types.php:38 msgid "Search Follow Post" msgstr "" #: inc/penci-bf-post-types.php:39 msgid "No follow posts found" msgstr "" #: inc/penci-bf-post-types.php:40 msgid "No follow posts found in Trash" msgstr "" #: inc/penci-bf-post-types.php:42 msgid "Follow Posts" msgstr "" #: inc/penci-bf-post-types.php:59 inc/penci-bf-post-types.php:71 msgid "Follow Post Logs" msgstr "" #: inc/penci-bf-post-types.php:60 msgid "Follow Post Log" msgstr "" #: inc/penci-bf-post-types.php:62 msgid "Add New Follow Post Log" msgstr "" #: inc/penci-bf-post-types.php:63 msgid "Edit Follow Post Log" msgstr "" #: inc/penci-bf-post-types.php:64 msgid "New Follow Post Log" msgstr "" #: inc/penci-bf-post-types.php:65 msgid "All Follow Post Logs" msgstr "" #: inc/penci-bf-post-types.php:66 msgid "View Follow Post Log" msgstr "" #: inc/penci-bf-post-types.php:67 msgid "Search Follow Post Log" msgstr "" #: inc/penci-bf-post-types.php:68 msgid "No follow post logs found" msgstr "" #: inc/penci-bf-post-types.php:69 msgid "No follow post logs found in Trash" msgstr "" #: inc/penci-bf-post-types.php:88 inc/penci-bf-post-types.php:89 #: penci-bookmark-follow.php:298 msgid "Follow Author" msgstr "" #: inc/penci-bf-post-types.php:91 msgid "Add New Follow Author" msgstr "" #: inc/penci-bf-post-types.php:92 msgid "Edit Follow Author" msgstr "" #: inc/penci-bf-post-types.php:93 msgid "New Follow Author" msgstr "" #: inc/penci-bf-post-types.php:94 msgid "All Follow Authors" msgstr "" #: inc/penci-bf-post-types.php:95 msgid "View Follow Author" msgstr "" #: inc/penci-bf-post-types.php:96 msgid "Search Follow Author" msgstr "" #: inc/penci-bf-post-types.php:97 msgid "No follow authors found" msgstr "" #: inc/penci-bf-post-types.php:98 msgid "No follow authors found in Trash" msgstr "" #: inc/penci-bf-post-types.php:100 msgid "Follow Authors" msgstr "" #: inc/penci-bf-post-types.php:117 inc/penci-bf-post-types.php:129 msgid "Follow Author Logs" msgstr "" #: inc/penci-bf-post-types.php:118 msgid "Follow Author Log" msgstr "" #: inc/penci-bf-post-types.php:120 msgid "Add New Follow Author Log" msgstr "" #: inc/penci-bf-post-types.php:121 msgid "Edit Follow Author Log" msgstr "" #: inc/penci-bf-post-types.php:122 msgid "New Follow Author Log" msgstr "" #: inc/penci-bf-post-types.php:123 msgid "All Follow Author Logs" msgstr "" #: inc/penci-bf-post-types.php:124 msgid "View Follow Author Log" msgstr "" #: inc/penci-bf-post-types.php:125 msgid "Search Follow Author Log" msgstr "" #: inc/penci-bf-post-types.php:126 msgid "No follow author logs found" msgstr "" #: inc/penci-bf-post-types.php:127 msgid "No follow author logs found in Trash" msgstr "" #: inc/templates/author-followers/author-followers-listing.php:61 msgid " ( guest )" msgstr "" #: penci-bookmark-follow.php:87 msgid "Bookmark Subscription Management" msgstr "" #: penci-bookmark-follow.php:101 msgid "Unsubscribe Email Bookmark Notifications" msgstr "" #: penci-bookmark-follow.php:292 msgid "Un-Bookmark" msgstr "" #: penci-bookmark-follow.php:294 penci-bookmark-follow.php:296 #: penci-bookmark-follow.php:302 msgid "Followers" msgstr "" #: penci-bookmark-follow.php:299 msgid "Following Author" msgstr "" #: penci-bookmark-follow.php:300 msgid "Unfollow Author" msgstr "" #: penci-bookmark-follow.php:322 msgid "If you want to unsubscribe, click on" msgstr "" #: penci-bookmark-follow.php:323 #, php-format msgid "Post %1$s updated at %2$s" msgstr "" #: penci-bookmark-follow.php:324 #, php-format msgid "Post %s updated" msgstr "" #: penci-bookmark-follow.php:324 penci-bookmark-follow.php:330 #: penci-bookmark-follow.php:332 msgid "If you want to see page click below link" msgstr "" #: penci-bookmark-follow.php:324 penci-bookmark-follow.php:330 #: penci-bookmark-follow.php:332 msgid "for" msgstr "" #: penci-bookmark-follow.php:326 penci-bookmark-follow.php:334 #: penci-bookmark-follow.php:336 msgid "Hello" msgstr "" #: penci-bookmark-follow.php:326 msgid "" "You recently followed below blog post. This means you will receive an email " "when post is updated." msgstr "" #: penci-bookmark-follow.php:326 msgid "Blog Post URL" msgstr "" #: penci-bookmark-follow.php:326 penci-bookmark-follow.php:334 #: penci-bookmark-follow.php:336 msgid "" "To activate, click confirm below. If you did not request this, please feel " "free to disregard this notice!" msgstr "" #: penci-bookmark-follow.php:326 penci-bookmark-follow.php:334 #: penci-bookmark-follow.php:336 msgid "Thanks" msgstr "" #: penci-bookmark-follow.php:327 #, php-format msgid "New comment on %1$s by %2$s" msgstr "" #: penci-bookmark-follow.php:328 #, php-format msgid "New comment added on the post %1$s by %2$s, see below :" msgstr "" #: penci-bookmark-follow.php:329 penci-bookmark-follow.php:331 msgid "[New Post]" msgstr "" #: penci-bookmark-follow.php:330 msgid "New post added under the" msgstr "" #: penci-bookmark-follow.php:332 msgid "New post added by the author" msgstr "" #: penci-bookmark-follow.php:334 msgid "You recently followed the" msgstr "" #: penci-bookmark-follow.php:334 msgid "" "This means you will receive an email when any new post is published under the" msgstr "" #: penci-bookmark-follow.php:336 msgid "You recently followed the author" msgstr "" #: penci-bookmark-follow.php:336 msgid "" "This means you will receive an email when any new post is published by the " "author" msgstr "" #: penci-bookmark-follow.php:337 msgid "Please confirm your unsubscription request" msgstr "" #: penci-bookmark-follow.php:338 #, php-format msgid "" "%s has received a request to unsubscribe for this email address. To complete " "your request please click on the link below:" msgstr "" #: penci-bookmark-follow.php:338 msgid "If you did not request this, please feel free to disregard this notice!" msgstr "" #: penci-bookmark-follow.php:418 msgid "Posts Being Followed" msgstr "" #: penci-bookmark-follow.php:419 msgid "Authors Being Followed" msgstr "" #: penci-bookmark-follow.php:420 msgid "Categories Being Followed" msgstr "" #: penci-bookmark-follow.php:421 msgid "This post has been deleted." msgstr "" #: penci-bookmark-follow.php:422 msgid "This user has been deleted." msgstr "" #: penci-bookmark-follow.php:424 msgid "Avatar" msgstr "" #: penci-bookmark-follow.php:426 msgid "Followed Date" msgstr "" #: penci-bookmark-follow.php:427 msgid "Action" msgstr "" #: penci-bookmark-follow.php:428 msgid "Load More Authors" msgstr "" #: penci-bookmark-follow.php:429 msgid "Sorry, No More Authors" msgstr "" #: penci-bookmark-follow.php:430 msgid "Load More Items" msgstr "" #: penci-bookmark-follow.php:431 msgid "Sorry, No More Items" msgstr "" #: penci-bookmark-follow.php:434 #, php-format msgid "" "You can find more categories to follow by clicking on this link" msgstr "" languages/en.mo000064400000000641147600022000007441 0ustar00Þ•$,8g9Project-Id-Version: PO-Revision-Date: 2023-09-07 21:03+0700 Last-Translator: Language-Team: Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 3.2.2 X-Poedit-Basepath: . X-Poedit-KeywordsList: __;_e;esc__;esc_html__ X-Poedit-SearchPath-0: . index.php000064400000000036147600022000006352 0ustar00penci-bookmark-follow.php000064400000061415147600022000011454 0ustar00 'page', 'post_status' => 'publish', 'post_title' => esc_html__( 'Bookmark Subscription Management', 'penci-bookmark-follow' ), 'post_content' => '[pencibf_follow_post_list]' . "\n\r" . '[pencibf_follow_term_list]' . "\n\r" . '[pencibf_follow_author_list]', 'post_author' => $user_ID, 'menu_order' => 0, 'comment_status' => 'closed', ); // create subscribe manage page $subscribe_manage_page_id = wp_insert_post( $subscribe_manage_page ); $unsubscribe_page = array( 'post_type' => 'page', 'post_status' => 'publish', 'post_parent' => $subscribe_manage_page_id, 'post_title' => esc_html__( 'Unsubscribe Email Bookmark Notifications', 'penci-bookmark-follow' ), 'post_content' => '[pencibf_unsubscribe]', 'post_author' => $user_ID, 'menu_order' => 0, 'comment_status' => 'closed', ); // create unsubscribe page $unsubscribe_page_id = wp_insert_post( $unsubscribe_page ); // this option contains all page ID(s) to just pass it to ww_fp_default_settings function update_option( 'penci_bl_set_pages', array( 'subscribe_manage_page' => $subscribe_manage_page_id, 'unsubscribe_page' => $unsubscribe_page_id, ) ); } //check fp options empty or not } add_filter( 'display_post_states', 'penci_bf_add_post_state', 10, 2 ); function penci_bf_add_post_state( $post_states, $post ) { $pages = get_option( 'penci_bl_set_pages' ); if ( isset( $pages['subscribe_manage_page'] ) && $pages['subscribe_manage_page'] && $post->ID == $pages['subscribe_manage_page'] ) { $post_states[] = 'Bookmark Page'; } if ( isset( $pages['unsubscribe_page'] ) && $pages['unsubscribe_page'] && $post->ID == $pages['unsubscribe_page'] ) { $post_states[] = 'Unsubscribe from Email Bookmark Notifications'; } return $post_states; } add_action( 'init', function () { $pages = get_option( 'penci_bl_set_pages' ); $spage = get_theme_mod( 'pencibf_custom_subscribe_page' ); $upage = get_theme_mod( 'pencibf_custom_unsubscribe_page' ); $should_update = false; $subscribe_manage_page = isset( $pages['subscribe_manage_page'] ) && $pages['subscribe_manage_page'] ? $pages['subscribe_manage_page'] : ''; $unsubscribe_page = isset( $pages['unsubscribe_page'] ) && $pages['unsubscribe_page'] ? $pages['unsubscribe_page'] : ''; if ( $spage && $subscribe_manage_page != $spage ) { $subscribe_manage_page = $spage; $should_update = true; } if ( $upage && $unsubscribe_page != $upage ) { $unsubscribe_page = $upage; $should_update = true; } if ( $should_update ) { update_option( 'penci_bl_set_pages', array( 'subscribe_manage_page' => $subscribe_manage_page, 'unsubscribe_page' => $unsubscribe_page, ) ); } } ); /** * Plugin Setup (On Deactivation) * * Delete plugin options. * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_uninstall() { global $wpdb; // IMP Call of Function // Need to call when custom post type is being used in plugin flush_rewrite_rules(); // get all options of settings $penci_bl_options = get_option( 'penci_bl_options' ); if ( isset( $penci_bl_options['del_all_options'] ) && ! empty( $penci_bl_options['del_all_options'] ) && $penci_bl_options['del_all_options'] == '1' ) { // get all page ID(s) which are created when plugin is activating first time $pages = get_option( 'penci_bl_set_pages' ); wp_delete_post( $pages['subscribe_manage_page'], true );// delete subscribe manage page wp_delete_post( $pages['unsubscribe_page'], true );// delete unsubscribe page delete_option( 'penci_bl_options' ); delete_option( 'penci_bl_set_pages' ); delete_option( 'penci_bl_set_option' ); $post_types = array( 'pencibfpost', 'pencibfpostlogs', 'pencibfterm', 'pencibftermlogs', 'pencibfauthor', 'pencibfauthorlogs', ); foreach ( $post_types as $post_type ) { $args = array( 'post_type' => $post_type, 'post_status' => 'any', 'numberposts' => '-1', ); $all_posts = get_posts( $args ); foreach ( $all_posts as $post ) { wp_delete_post( $post->ID, true ); } } } } /** * Get Settings From Option Page * * Handles to return all settings value * * @package Penci Bookmark Follow * @since 1.0.0 */ function penci_bl_get_settings() { $settings = is_array( get_option( 'penci_bl_options' ) ) ? get_option( 'penci_bl_options' ) : array(); return $settings; } // Add action to read plugin default option to Make it WPML Compatible add_action( 'plugins_loaded', 'penci_bl_read_default_options', 999 ); /** * Re-read all options to make it wpml compatible * * @package Penci Bookmark Follow * @since 1.6.4 */ function penci_bl_read_default_options() { global $penci_bl_options; // get values for created pages $pages = get_option( 'penci_bl_set_pages' ); // default for all created pages $unsubscribe = $subscribemanage = ''; // get all post type $post_types = get_post_types( array( 'public' => true ), 'names' ); foreach ( $post_types as $key => $post_type ) { if ( $key == 'attachment' ) { unset( $post_types[ $key ] ); } } // check pages are created or not if ( ! empty( $pages ) ) { // check if subscribe manage page is created then set to default if ( isset( $pages['subscribe_manage_page'] ) ) { $subscribemanage = $pages['subscribe_manage_page']; } if ( isset( $pages['unsubscribe_page'] ) ) { $unsubscribe = $pages['unsubscribe_page']; } } $from_email = get_option( 'blogname' ) . ' <' . get_option( 'admin_email' ) . '>'; $penci_bl_options = array( 'disable_follow_guest' => get_theme_mod( 'pencibf_disable_follow_guest' ), 'enable_notify_followers' => get_theme_mod( 'pencibf_enable_notify_followers' ), 'disable_auto_follow_add_comment' => get_theme_mod( 'pencibf_disable_auto_follow_add_comment' ), 'double_opt_in' => get_theme_mod( 'pencibf_double_opt_in' ), 'double_opt_in_guest' => false, 'subscribe_manage_page' => $subscribemanage, 'unsubscribe_page' => $unsubscribe, 'follow_buttons' => array( 'follow' => get_theme_mod( 'pencibf_followtext', esc_html__( 'Bookmark', 'penci-bookmark-follow' ) ), 'following' => get_theme_mod( 'pencibf_followingtext', esc_html__( 'Bookmarked', 'penci-bookmark-follow' ) ), 'unfollow' => get_theme_mod( 'pencibf_unfollowtext', esc_html__( 'Un-Bookmark', 'penci-bookmark-follow' ) ), ), 'follow_message' => get_theme_mod( 'pencibf_follow_message', '( {followers_count} ' . esc_html__( 'Followers', 'penci-bookmark-follow' ) . ' )' ), 'prevent_type' => get_theme_mod( 'pencibf_prevent_type', $post_types ), 'term_follow_message' => get_theme_mod( 'pencibf_tax_follow_message', '( {followers_count} ' . esc_html__( 'Followers', 'penci-bookmark-follow' ) . ' )' ), 'authors_follow_buttons' => array( 'follow' => get_theme_mod( 'pencibf_author_followtext', esc_html__( 'Follow Author', 'penci-bookmark-follow' ) ), 'following' => get_theme_mod( 'pencibf_author_followingtext', esc_html__( 'Following Author', 'penci-bookmark-follow' ) ), 'unfollow' => get_theme_mod( 'pencibf_author_unfollowtext', esc_html__( 'Unfollow Author', 'penci-bookmark-follow' ) ), ), 'authors_follow_message' => get_theme_mod( 'pencibf_author_follow_message', '( {followers_count} ' . esc_html__( 'Followers', 'penci-bookmark-follow' ) . ' )' ), 'notification_type' => $post_types, 'recipient_per_email' => '0', 'post_trigger_notification' => array( 'post_update' => get_theme_mod( 'pencibf_post_trigger_notification_post_update' ), 'new_comment' => get_theme_mod( 'pencibf_post_trigger_notification_new_comment' ), ), 'term_trigger_notification' => array( 'new_post' => get_theme_mod( 'pencibf_term_trigger_notification_post_published' ), 'post_update' => get_theme_mod( 'pencibf_term_trigger_notification_post_update' ), 'new_comment' => get_theme_mod( 'pencibf_term_trigger_notification_new_comment' ), ), 'author_trigger_notification' => array( 'new_post' => get_theme_mod( 'pencibf_author_trigger_notification_post_published' ), 'post_update' => get_theme_mod( 'pencibf_author_trigger_notification_post_update' ), 'new_comment' => get_theme_mod( 'pencibf_author_trigger_notification_new_comment' ), ), 'email_template' => 'plain', 'from_email' => $from_email, 'enable_unsubscribe_url' => '1', 'unsubscribe_message' => get_theme_mod( 'pencibf_unsubscribe_message', esc_html__( 'If you want to unsubscribe, click on', 'penci-bookmark-follow' ) . ' {unsubscribe_url}' ), 'email_subject' => get_theme_mod( 'pencibf_email_subject', sprintf( esc_html__( 'Post %1$s updated at %2$s', 'penci-bookmark-follow' ), '{post_name}', '{site_name}' ) ), 'email_body' => get_theme_mod( 'pencibf_email_body', sprintf( esc_html__( 'Post %s updated', 'penci-bookmark-follow' ), '{post_name}' ) . "\n\n" . esc_html__( 'If you want to see page click below link', 'penci-bookmark-follow' ) . "\n\n" . '{post_link} ' . esc_html__( 'for', 'penci-bookmark-follow' ) . ' {site_link}' ), 'confirm_email_subject' => get_theme_mod( 'pencibf_confirm_email_subject', esc_html__( 'Follow', 'penci-bookmark-follow' ) . ' {post_name} - {site_name}' ), 'confirm_email_body' => get_theme_mod( 'pencibf_confirm_email_body', esc_html__( 'Hello', 'penci-bookmark-follow' ) . "\n\n" . esc_html__( 'You recently followed below blog post. This means you will receive an email when post is updated.', 'penci-bookmark-follow' ) . "\n\n" . esc_html__( 'Blog Post URL', 'penci-bookmark-follow' ) . ': {post_link}' . "\n\n" . esc_html__( 'To activate, click confirm below. If you did not request this, please feel free to disregard this notice!', 'penci-bookmark-follow' ) . "\n\n" . '{subscribe_url}' . "\n\n" . esc_html__( 'Thanks', 'penci-bookmark-follow' ) ), 'comment_email_subject' => get_theme_mod( 'pencibf_comment_email_subject', sprintf( esc_html__( 'New comment on %1$s by %2$s', 'penci-bookmark-follow' ), '"{post_name}"', '{user_name}' ) ), 'comment_email_body' => get_theme_mod( 'pencibf_comment_email_body', sprintf( esc_html__( 'New comment added on the post %1$s by %2$s, see below :', 'penci-bookmark-follow' ), '"{post_name}"', '{user_name}' ) . "\n\n" . '{comment_text}' ), 'term_email_subject' => get_theme_mod( 'pencibf_term_email_subject', esc_html__( '[New Post]', 'penci-bookmark-follow' ) . ' {post_name}' ), 'term_email_body' => get_theme_mod( 'pencibf_term_email_body', esc_html__( 'New post added under the', 'penci-bookmark-follow' ) . ' {taxonomy_name} "{term_name}":' . "\n\n" . '{post_name}' . "\n\n" . '{post_description}' . "\n\n" . esc_html__( 'If you want to see page click below link', 'penci-bookmark-follow' ) . "\n\n" . '{post_link} ' . esc_html__( 'for', 'penci-bookmark-follow' ) . ' {site_link}' ), 'author_email_subject' => get_theme_mod( 'pencibf_author_email_subject', esc_html__( '[New Post]', 'penci-bookmark-follow' ) . ' {post_name}' ), 'author_email_body' => get_theme_mod( 'pencibf_author_email_body', esc_html__( 'New post added by the author', 'penci-bookmark-follow' ) . ' "{author_name}":' . "\n\n" . '{post_name}' . "\n\n" . '{post_description}' . "\n\n" . esc_html__( 'If you want to see page click below link', 'penci-bookmark-follow' ) . "\n\n" . '{post_link} ' . esc_html__( 'for', 'penci-bookmark-follow' ) . ' {site_link}' ), 'term_confirm_email_subject' => get_theme_mod( 'pencibf_term_confirm_email_subject', esc_html__( 'Follow', 'penci-bookmark-follow' ) . ' {term_name} - {site_name}' ), 'term_confirm_email_body' => get_theme_mod( 'pencibf_term_confirm_email_body', esc_html__( 'Hello', 'penci-bookmark-follow' ) . "\n\n" . esc_html__( 'You recently followed the', 'penci-bookmark-follow' ) . ' {taxonomy_name} "{term_name}". ' . esc_html__( 'This means you will receive an email when any new post is published under the', 'penci-bookmark-follow' ) . ' {taxonomy_name} "{term_name}".' . "\n\n" . esc_html__( 'To activate, click confirm below. If you did not request this, please feel free to disregard this notice!', 'penci-bookmark-follow' ) . "\n\n" . '{subscribe_url}' . "\n\n" . esc_html__( 'Thanks', 'penci-bookmark-follow' ) ), 'author_confirm_email_subject' => get_theme_mod( 'pencibf_author_confirm_email_subject', esc_html__( 'Follow', 'penci-bookmark-follow' ) . ' {author_name} - {site_name}' ), 'author_confirm_email_body' => get_theme_mod( 'pencibf_author_confirm_email_body', esc_html__( 'Hello', 'penci-bookmark-follow' ) . "\n\n" . esc_html__( 'You recently followed the author', 'penci-bookmark-follow' ) . ' "{author_name}". ' . esc_html__( 'This means you will receive an email when any new post is published by the author', 'penci-bookmark-follow' ) . ' "{author_name}".' . "\n\n" . esc_html__( 'To activate, click confirm below. If you did not request this, please feel free to disregard this notice!', 'penci-bookmark-follow' ) . "\n\n" . '{subscribe_url}' . "\n\n" . esc_html__( 'Thanks', 'penci-bookmark-follow' ) ), 'unsubscribe_confirm_email_subject' => get_theme_mod( 'pencibf_unsubscribe_confirm_email_subject', '[{site_name}] ' . esc_html__( 'Please confirm your unsubscription request', 'penci-bookmark-follow' ) ), 'unsubscribe_confirm_email_body' => get_theme_mod( 'pencibf_unsubscribe_confirm_email_body', sprintf( esc_html__( '%s has received a request to unsubscribe for this email address. To complete your request please click on the link below:', 'penci-bookmark-follow' ), '{site_name}' ) . "\n\n" . '{confirm_url}' . "\n\n" . esc_html__( 'If you did not request this, please feel free to disregard this notice!', 'penci-bookmark-follow' ) ), ); } // global variables global $penci_bl_model, $penci_bl_public, $penci_bl_admin, $penci_bl_script, $penci_bl_options, $penci_bl_message, $penci_bl_shortcode; // Misc Functions File require_once PENCI_BL_DIR . '/inc/penci-bf-misc-functions.php'; $penci_bl_options = penci_bl_get_settings(); require_once PENCI_BL_DIR . '/inc/class-penci-bf-message-stack.php'; // message class, handles the messages after review submission $penci_bl_message = new Penci_Bf_Message_Stack(); // Script Class to add styles and scripts to admin and public side require_once PENCI_BL_DIR . '/inc/class-penci-bf-scripts.php'; $penci_bl_script = new Penci_Bf_Scripts(); $penci_bl_script->add_hooks(); // Register Post Types require_once PENCI_BL_DIR . '/inc/penci-bf-post-types.php'; // Pagination Class require_once PENCI_BL_DIR . '/inc/class-penci-bf-pagination-public.php'; // front end pagination class require_once PENCI_BL_DIR . '/inc/class-penci-bf-model.php'; $penci_bl_model = new Penci_Bf_Model(); // Shortcodes class for handling shortcodes require_once PENCI_BL_DIR . '/inc/class-penci-bf-shortcodes.php'; $penci_bl_shortcode = new Penci_Bf_Shortcodes(); $penci_bl_shortcode->add_hooks(); // Public Class to handle most of the functionalities of public side require_once PENCI_BL_DIR . '/inc/class-penci-bf-public.php'; $penci_bl_public = new Penci_Bf_Public(); $penci_bl_public->add_hooks(); // Admin Pages Class for admin side require_once PENCI_BL_ADMIN_DIR . '/class-penci-bf-admin.php'; $penci_bl_admin = new Penci_Bf_Admin(); $penci_bl_admin->add_hooks(); // loads the Templates Functions file require_once PENCI_BL_DIR . '/inc/penci-bf-template-functions.php'; // Load Template Hook File require_once PENCI_BL_DIR . '/inc/penci-bf-template-hooks.php'; // Load Settings add_action( 'init', function () { if ( class_exists( 'SoledadFW\Customizer\CustomizerOptionAbstract' ) ) { require_once plugin_dir_path( __FILE__ ) . 'customizer/panel.php'; require_once plugin_dir_path( __FILE__ ) . 'customizer/settings.php'; \SoledadFW\PenciBookmarkFollowCustomizer::getInstance(); } } ); add_action( 'penci_top_search', function () { if ( get_theme_mod( 'pencibf_disable_header_icon' ) ) { return; } $pages = get_option( 'penci_bl_set_pages' ); if ( isset( $pages['subscribe_manage_page'] ) && $pages['subscribe_manage_page'] && function_exists( 'penci_get_setting' ) ) { echo ''; } }, 9999 ); if ( ! function_exists( 'pencibg_default_text' ) ) { function pencibg_default_text() { return array( 'postIfollow' => __( 'Posts Being Followed', 'penci-bookmark-follow' ), 'authorIfollow' => __( 'Authors Being Followed', 'penci-bookmark-follow' ), 'catIfollow' => __( 'Categories Being Followed', 'penci-bookmark-follow' ), 'deletedpost' => __( 'This post has been deleted.', 'penci-bookmark-follow' ), 'deletedauthor' => __( 'This user has been deleted.', 'penci-bookmark-follow' ), 'notitle' => __( '(no title)', 'penci-bookmark-follow' ), 'avatar' => __( 'Avatar', 'penci-bookmark-follow' ), 'authorname' => __( 'Author Name', 'penci-bookmark-follow' ), 'followeddate' => __( 'Followed Date', 'penci-bookmark-follow' ), 'actions' => __( 'Action', 'penci-bookmark-follow' ), 'moreauthors' => __( 'Load More Authors', 'penci-bookmark-follow' ), 'smoreauthors' => __( 'Sorry, No More Authors', 'penci-bookmark-follow' ), 'moreterms' => __( 'Load More Items', 'penci-bookmark-follow' ), 'smoreterms' => __( 'Sorry, No More Items', 'penci-bookmark-follow' ), 'nopostfollow' => __( 'You have not follow any posts yet.', 'penci-bookmark-follow' ), 'noauthorfollow' => __( 'You have not follow any authors yet.', 'penci-bookmark-follow' ), 'term_follow' => __( 'You can find more categories to follow by clicking on this link', 'penci-bookmark-follow' ), ); } } if ( ! function_exists( 'pencibf_get_text' ) ) { function pencibf_get_text( $text ) { $texts = pencibg_default_text(); return get_theme_mod( 'pencibf_text_' . $text ) ? get_theme_mod( 'pencibf_text_' . $text ) : $texts[ $text ]; } } if ( ! function_exists( 'pencibf_soledad_time_link' ) ) : /** * Gets a nicely formatted string for the published date. */ function pencibf_soledad_time_link( $id = null, $dformat = null ) { $get_the_date = get_the_date( DATE_W3C, $id ); $get_the_time = get_the_time( get_option( 'date_format' ), $id ); $get_the_datem = get_the_modified_date( DATE_W3C, $id ); $get_the_timem = get_the_modified_date( get_option( 'date_format' ), $id ); $classes = 'published'; $format = get_theme_mod( 'penci_date_format' ); if ( 'timeago' == $dformat ) { $format = 'timeago'; } elseif ( 'normal' == $dformat ) { $format = 'normal'; } if ( $id ) { if ( get_theme_mod( 'penci_show_modified_date' ) ) { $get_the_date = $get_the_datem; $get_the_time = $get_the_timem; } if ( 'timeago' == $format ) { $current_time = current_time( 'timestamp' ); $post_time = get_the_time( 'U', $id ); if ( get_theme_mod( 'penci_show_modified_date' ) ) { $post_time = get_the_modified_time( 'U', $id ); } if ( $current_time > $post_time ) { $get_the_time = penci_get_setting( 'penci_trans_beforeago' ) . ' ' . human_time_diff( $post_time, $current_time ) . ' ' . penci_get_setting( 'penci_trans_tago' ); } } $time_string = ''; if ( get_the_time( 'U', $id ) !== get_the_modified_time( 'U', $id ) ) { if ( get_theme_mod( 'penci_show_modified_date' ) ) { $classes = 'updated'; } $time_string = ''; } printf( $time_string, $get_the_date, $get_the_time ); } } endif; add_action( 'soledad_theme/custom_css', function () { $styles = array( 'pencibf_bm_cl' => '.penci-bf-follow-post-wrapper .pencibf-following-text:before{color:{{VALUE}}}', 'pencibf_bm_bcl' => '.penci-bf-follow-post-wrapper .pencibf-following-text:before{border-color:{{VALUE}}}', 'pencibf_bm_bgcl' => '.penci-bf-follow-post-wrapper .pencibf-following-text:before{background-color:{{VALUE}}}', 'pencibf_bm_hcl' => '.penci-bf-follow-post-wrapper .pencibf-following-text:hover:before{color:{{VALUE}}}', 'pencibf_bm_hbcl' => '.penci-bf-follow-post-wrapper .pencibf-following-text:hover:before{border-color:{{VALUE}}}', 'pencibf_bm_hbgcl' => '.penci-bf-follow-post-wrapper .pencibf-following-text:hover:before{background-color:{{VALUE}}}', 'pencibf_bm_bmcl' => '.penci-bf-follow-post-wrapper .penci-bf-following-button .pencibf-following-text:before{color:{{VALUE}}}', 'pencibf_bm_bmbcl' => '.penci-bf-follow-post-wrapper .penci-bf-following-button .pencibf-following-text:before{border-color:{{VALUE}}}', 'pencibf_bm_bmbgcl' => '.penci-bf-follow-post-wrapper .penci-bf-following-button .pencibf-following-text:before{background-color:{{VALUE}}}', ); $css = ''; foreach ( $styles as $mod => $prop ) { $val = get_theme_mod( $mod ); if ( $val ) { $css .= str_replace( '{{VALUE}}', $val, $prop ); } } echo $css; } ); add_action( 'penci_get_options_data', function ( $options ) { $options['penci_bookmark_follow_panel'] = array( 'priority' => 30, 'path' => PENCI_BL_DIR . '/customizer/', 'panel' => array( 'icon' => 'fas fa-bookmark', 'title' => esc_html__( 'Bookmark & Follow', 'soledad' ), ), 'penci_bookmark_follow_general_section' => array( 'title' => esc_html__( 'General', 'penci-bookmark-follow' ) ), 'penci_bookmark_follow_noti_section' => array( 'title' => esc_html__( 'Notifications Settings', 'penci-bookmark-follow' ) ), 'penci_bookmark_follow_email_section' => array( 'title' => esc_html__( 'Email Settings', 'penci-bookmark-follow' ) ), 'penci_bookmark_follow_translate_section' => array( 'title' => esc_html__( 'Quick Text Translation', 'penci-bookmark-follow' ) ), ); return $options; } ); add_action( 'plugins_loaded', function () { load_plugin_textdomain( 'penci-bookmark-follow', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); } );