Making WordPress.org

Ticket #1806: jetpack-follow-link-for-o2.php

File jetpack-follow-link-for-o2.php, 5.3 KB (added by pento, 10 years ago)
Line 
1<?php
2/*
3Plugin Name: Jetpack Follow Link for o2
4Description: Easily subscribe to an o2 comment thread without commenting using a "Follow" action link like WordPress.com has
5*/
6
7
8class o2_follow {
9
10 // Use the old p2 meta key, for backwards compatiblity.
11 const user_meta_key = 'jpflfp2_posts_following';
12
13 /**
14 * Construct the plugin
15 */
16 function __construct() {
17 add_action( 'init', array( $this, 'action_init' ) );
18 }
19
20 /**
21 *
22 */
23 function action_init() {
24
25 if ( ! current_theme_supports( 'o2' ) || ! class_exists( 'Jetpack_Subscriptions' ) ) {
26 return;
27 }
28
29 // Only logged in users should be able to subscribe for now because we use the registered email address
30 if ( !is_user_logged_in() )
31 return;
32
33 add_action( 'o2_post_form_extras', array( $this, 'subscription_o2_post_form' ) );
34
35 add_action( 'init', array( $this, 'subscribe_o2_register_post_action_states' ) );
36 add_filter( 'o2_filter_post_actions', array( $this, 'subscription_o2_add_comment_subscriber_link' ), 10, 2 );
37
38 add_filter( 'o2_comment_form_extras', array( $this, 'subscribe_o2_comment_form' ), 10, 2 );
39 add_filter( 'o2_options', array( $this, 'subscribe_add_o2_options' ) );
40 add_filter( 'o2_post_fragment', array( $this, 'subscribe_add_o2_post_fragment' ), 10, 2 );
41 }
42
43 function subscribe_o2_comment_form( $comment_form_extras = '', $post_ID = false ) {
44 if ( !$post_ID ) {
45 global $post;
46 $post_ID = $post->post_ID;
47 }
48
49 $output = '<p class="comment-subscription-form">';
50 $output .= '<input type="checkbox" name="subscribe" id="subscribe" value="subscribe" style="width: auto;"' . checked( $checked, true, false ) . '/> ';
51 $output .= '<label class="subscribe-label" id="subscribe-label" for="subscribe" style="display: inline;">' . __( 'Notify me of new comments via email.' ) . '</label>';
52 $output .= '</p>';
53
54
55 $output .= '<p class="post-subscription-form"><input type="checkbox" name="subscribe_blog" id="subscribe_blog" value="subscribe" style="width: auto;"/> ';
56 $output .= '<label class="subscribe-label" id="subscribe-blog-label" for="subscribe_blog" style="display: inline;">'. __( 'Notify me of new posts via email.' ) .'</label>';
57 $output .= '</p>';
58
59 return $comment_form_extras . $output;
60 }
61
62 function subscribe_add_o2_options( $options ) {
63 global $wpdb;
64
65 $subscribed_ids = (array)get_user_meta( wp_get_current_user()->ID, self::user_meta_key, true );
66
67 $options['options']['followingBlog'] = false;
68 $options['options']['followingAllComments'] = false;
69 return $options;
70 }
71
72 function subscribe_add_o2_post_fragment( $fragment = array(), $post_ID = false ) {
73 global $wpdb;
74 if ( !$post_ID ) {
75 global $post;
76 $post_ID = $post->post_ID;
77 }
78 if ( ! array_key_exists( 'postMeta', $fragment ) )
79 $fragment['postMeta'] = array();
80
81 $subscribed_ids = (array)get_user_meta( wp_get_current_user()->ID, self::user_meta_key, true );
82 $fragment['postMeta']['isFollowing'] = in_array( get_the_ID(), $subscribed_ids );
83 return $fragment;
84 }
85
86 /**
87 * Add 'subscribe' checkbox to o2 post form
88 *
89 * @param string
90 * @return void
91 **/
92 function subscription_o2_post_form( $post_form_extras = '' ) {
93 $output = '';
94 $label = __( 'Notify me of new comments via email.' );
95 $output .= '<p style="margin-top: 1.5em;" class="comment-subscription-form"><input type="checkbox" name="post_subscribe" id="post_subscribe" value="post_subscribe" style="margin-left: .5em;"/>';
96 $output .= '<label style="font-size: 1.2em; margin-bottom: .5em;" id="post_subscribe_label" for="post_subscribe"><small>' . $label . '</small></label>';
97 $output .= '</p>';
98
99 return $post_form_extras . $output;
100 }
101
102 function subscribe_o2_register_post_action_states() {
103 echo 1;
104 if ( ! function_exists( 'o2_register_post_action_states' ) ) {
105 return;
106 }
107echo 2;
108 o2_register_post_action_states( 'follow',
109 array(
110 'normal' => array(
111 'shortText' => __( 'Follow', 'o2' ),
112 'title' => __( 'Follow comments', 'o2' ),
113 'classes' => array(),
114 'genericon' => 'genericon-subscribe',
115 'nextState' => 'subscribed'
116 ),
117 'subscribed' => array(
118 'shortText' => __( 'Following', 'o2' ),
119 'title' => __( 'Unfollow comments', 'o2' ),
120 'classes' => array( 'post-comments-subscribed' ),
121 'genericon' => 'genericon-unsubscribe',
122 'nextState' => 'normal'
123 )
124 )
125 );
126 }
127
128 function subscription_o2_add_comment_subscriber_link( $actions, $id = false ) {
129 global $post, $wpdb;
130 if ( !$id ) {
131 $id = $post->ID;
132 }
133
134 if ( comments_open( $id ) ) {
135 $protocol = is_ssl() ? 'https' : 'http';
136 $query_args = array();
137 $initial_state = 'normal';
138
139 $subscribed_ids = (array)get_user_meta( wp_get_current_user()->ID, self::user_meta_key, true );
140
141 if ( in_array( $id, $subscribed_ids ) ) {
142 $query_args = array(
143 'post-id' => $id,
144 'action' => 'post-comment-unsubscribe',
145 );
146 $initial_state = 'subscribed';
147 } else {
148 $query_args = array(
149 'post-id' => $id,
150 'action' => 'post-comment-subscribe',
151 );
152 }
153
154 $link = add_query_arg( $query_args, home_url( '', $protocol ) );
155 $link = wp_nonce_url( $link, 'post-comment-subscribe' );
156
157 $actions[31] = array(
158 'action' => 'follow',
159 'href' => $link,
160 'classes' => array( 'subscription-link', 'o2-follow' ),
161 'rel' => false,
162 'initialState' => $initial_state
163 );
164 }
165
166 return $actions;
167 }
168}
169
170global $o2_follow;
171$o2_follow = new o2_follow();