{"id":8053972,"date":"2016-01-19T20:54:36","date_gmt":"2016-01-19T20:54:36","guid":{"rendered":"https:\/\/wordpress.org\/support\/topic\/bot-detected-this-plugin-sends-outside-notifications\/"},"modified":"2016-09-03T04:15:09","modified_gmt":"2016-09-03T04:15:09","slug":"bot-detected-this-plugin-sends-outside-notifications","status":"publish","type":"topic","link":"https:\/\/wordpress.org\/support\/topic\/bot-detected-this-plugin-sends-outside-notifications\/","title":{"rendered":"Code review : Bot detected : this plugin sends outside notifications"},"content":{"rendered":"<p>Hello, <\/p>\n<p>The description is not correct. This plugin sends notifications, and downloaders are not informed : &#8220;This plugin only does one task, adding your posts&#8217; featured image to the RSS feed in tag. It will show your full size featured image url in the tag.&#8221;<\/p>\n<p>Here is the source code of version 3.0<\/p>\n<p>&lt;?php<br \/>\n\/*<br \/>\nPlugin Name: JMS Rss Feed<br \/>\nPlugin URI: http:\/\/www.jmsliu.com\/products\/jms-rss-feed<br \/>\nDescription: Adds the featured image tag &lt;jms-featured-image&gt; to your posts to the RSS feed.<br \/>\nAuthor: James Liu<br \/>\nVersion: 3.0<br \/>\nAuthor URI: http:\/\/jmsliu.com\/<br \/>\n*\/<\/p>\n<p>\tglobal $jms_rss_db_version;<br \/>\n\t$jms_rss_db_version = &#8216;1.0&#8217;;<\/p>\n<p>\tadd_action(&#8216;rss2_item&#8217;, &#8216;add_jms_img_rss_node&#8217;);<br \/>\n\tadd_action( &#8216;publish_post&#8217;, &#8216;send_push_notification&#8217;, 10, 2 );<\/p>\n<p>\t\/\/work together<br \/>\n\tadd_filter(&#8216;query_vars&#8217;, &#8216;add_jms_single_post_var&#8217;);<br \/>\n\tadd_action(&#8216;parse_request&#8217;, &#8216;return_jms_single_post&#8217;);<\/p>\n<p>\t\/\/install database<br \/>\n\tregister_activation_hook( __FILE__, &#8216;install_jms&#8217; );<\/p>\n<p>\tfunction add_jms_img_rss_node() {<br \/>\n\t\tglobal $post;<br \/>\n\t\tif(has_post_thumbnail($post-&gt;ID)) {<br \/>\n\t\t\t$thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id($post-&gt;ID), &#8220;full&#8221;);<br \/>\n\t\t\techo &#8220;&lt;jms-featured-image&gt;&#8221;.$thumbnail[0].&#8221;&lt;\/jms-featured-image&gt;&#8221;;<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tfunction add_jms_single_post_var($vars) {<br \/>\n\t\t$vars[] = &#8216;jms_rss_post_url&#8217;;<br \/>\n\t\t$vars[] = &#8216;jms_rss_action&#8217;;<br \/>\n\t\t$vars[] = &#8216;jms_rss_token&#8217;;<br \/>\n\t\t$vars[] = &#8216;jms_rss_send&#8217;;<br \/>\n\t\treturn $vars;<br \/>\n\t}<\/p>\n<p>\tfunction send_push_notification($ID, $post) {<br \/>\n\t\tglobal $wpdb;<br \/>\n\t\t$table_name = $wpdb-&gt;prefix . &#8216;jms_rss_android_listener&#8217;;<br \/>\n\t\t$devicesList = $wpdb-&gt;get_results(&#8220;SELECT * FROM $table_name WHERE state=1&#8221;, &#8220;ARRAY_A&#8221;);<br \/>\n\t\t$wpdb-&gt;flush();<\/p>\n<p>\t\tif ( $devicesList )\t{<\/p>\n<p>\t\t\tdefine(&#8220;GOOGLE_API_KEY&#8221;, &#8220;AIzaSyDYVTahqUmT4RX6brZnReUr6Rq2KNEUv90&#8221;);<\/p>\n<p>\t\t\t$deviceList = array();<\/p>\n<p>\t\t\tforeach ( $devicesList as $device )\t{<br \/>\n\t\t\t\t$token = $device[&#8220;device_token&#8221;];<br \/>\n\t\t\t\tif(strlen($token) &gt; 10) {<br \/>\n\t\t\t\t\t$deviceList[] = $token;<br \/>\n\t\t\t\t}<br \/>\n\t\t\t}<\/p>\n<p>\t\t\t\/\/$author = $post-&gt;post_author; \/\/Post author ID<br \/>\n\t\t\t\/\/$name = get_the_author_meta( &#8216;display_name&#8217;, $author );<br \/>\n\t\t\t\/\/$email = get_the_author_meta( &#8216;user_email&#8217;, $author );<br \/>\n\t\t\t$title = $post-&gt;post_title;<br \/>\n\t\t\t\/\/$permalink = get_permalink( $ID );<br \/>\n\t\t\t\/\/$edit = get_edit_post_link( $ID, &#8221; );<\/p>\n<p>\t\t\t\/\/$subject = sprintf( &#8216;Published: %s&#8217;, $title );<br \/>\n\t\t\t$message = sprintf (&#8216;The article \u201c%s\u201d has been published.&#8217;, $title);<\/p>\n<p>\t\t\t\/\/$message .= sprintf( &#8216;View: %s&#8217;, $permalink );<br \/>\n\t\t\tsendNotification($deviceList, $message);<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tfunction return_jms_single_post($wp) {<br \/>\n\t\tglobal $wpdb;<\/p>\n<p>\t\t\/\/this is for test<br \/>\n\t\tif(array_key_exists(&#8216;jms_rss_send&#8217;, $wp-&gt;query_vars)) {<br \/>\n\t\t\t$action = $wp-&gt;query_vars[&#8216;jms_rss_send&#8217;];<br \/>\n\t\t\tif($action == &#8216;1&#8217;) {<br \/>\n\t\t\t\t$table_name = $wpdb-&gt;prefix . &#8216;jms_rss_android_listener&#8217;;<br \/>\n\t\t\t\t$devicesList = $wpdb-&gt;get_results(&#8220;SELECT * FROM $table_name WHERE state=1&#8221;, &#8220;ARRAY_A&#8221;);<br \/>\n\t\t\t\t$wpdb-&gt;flush();<\/p>\n<p>\t\t\t\tif ( $devicesList )\t{<\/p>\n<p>\t\t\t\t\tdefine(&#8220;GOOGLE_API_KEY&#8221;, &#8220;AIzaSyDYVTahqUmT4RX6brZnReUr6Rq2KNEUv90&#8221;);<\/p>\n<p>\t\t\t\t\t$deviceList = array();<\/p>\n<p>\t\t\t\t\tforeach ( $devicesList as $device )\t{<br \/>\n\t\t\t\t\t\t$token = $device[&#8220;device_token&#8221;];<br \/>\n\t\t\t\t\t\tif(strlen($token) &gt; 10) {<br \/>\n\t\t\t\t\t\t\t$deviceList[] = $token;<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\tsendNotification($deviceList, &#8220;Hello World!&#8221;);<br \/>\n\t\t\t\t}<br \/>\n\t\t\t}<\/p>\n<p>\t\t\texit;<br \/>\n\t\t}<\/p>\n<p>\t\tif (array_key_exists(&#8216;jms_rss_action&#8217;, $wp-&gt;query_vars)) {<br \/>\n\t\t\t$action = $wp-&gt;query_vars[&#8216;jms_rss_action&#8217;];<\/p>\n<p>\t\t\tif(!empty($action)) {<br \/>\n\t\t\t\tif($action == &#8220;register_android&#8221;) {<br \/>\n\t\t\t\t\t$token = $wp-&gt;query_vars[&#8216;jms_rss_token&#8217;];<br \/>\n\t\t\t\t\t$table_name = $wpdb-&gt;prefix . &#8216;jms_rss_android_listener&#8217;;<\/p>\n<p>\t\t\t\t\t$wpdb-&gt;query( $wpdb-&gt;prepare(<br \/>\n\t\t\t\t\t\t&#8220;<br \/>\n\t\t\t\t\t\t\tINSERT INTO $table_name<br \/>\n\t\t\t\t\t\t\t( device_token, state, reg_date )<br \/>\n\t\t\t\t\t\t\tVALUES ( %s, %d, %s )<br \/>\n\t\t\t\t\t\t&#8220;,<br \/>\n\t\t\t\t\t\t\tarray(<br \/>\n\t\t\t\t\t\t\t\t$token,<br \/>\n\t\t\t\t\t\t\t\t1,<br \/>\n\t\t\t\t\t\t\t\tcurrent_time(&#8216;mysql&#8217;, 1)<br \/>\n\t\t\t\t\t\t\t)<br \/>\n\t\t\t\t\t) );<\/p>\n<p>\t\t\t\t\techo $wpdb-&gt;insert_id;<br \/>\n\t\t\t\t\texit;<br \/>\n\t\t\t\t}<br \/>\n\t\t\t}<br \/>\n\t\t}<\/p>\n<p>\t\tif (array_key_exists(&#8216;jms_rss_post_url&#8217;, $wp-&gt;query_vars)) {<br \/>\n\t\t\t\/\/for old usage only<br \/>\n\t\t\t$url = $wp-&gt;query_vars[&#8216;jms_rss_post_url&#8217;];<br \/>\n\t\t\t$postid = url_to_postid( $url );<br \/>\n\t\t\t$post = get_post($postid);<br \/>\n\t\t\t\/\/print_r($post);<br \/>\n\t\t\techo $post-&gt;post_content;<br \/>\n\t\t\texit;<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tfunction install_jms() {<br \/>\n\t\tglobal $jms_rss_db_version;<br \/>\n\t\tglobal $wpdb;<\/p>\n<p>\t\t$installed_ver = get_option( &#8220;jms_rss_db_version&#8221;, null );<br \/>\n\t\tif ( $installed_ver == null ) {<br \/>\n\t\t\t$table_name = $wpdb-&gt;prefix . &#8220;jms_rss_android_listener&#8221;;<br \/>\n\t\t\t$charset_collate = $wpdb-&gt;get_charset_collate();<\/p>\n<p>\t\t\t$sql = &#8220;CREATE TABLE IF NOT EXISTS $table_name (<br \/>\n\t\t\t  <code>id<\/code> INT NOT NULL AUTO_INCREMENT ,<br \/>\n\t\t\t  <code>device_token<\/code> VARCHAR(255) NOT NULL ,<br \/>\n\t\t\t  <code>state<\/code> TINYINT NOT NULL COMMENT &#8216;0 disabled\\n1 enabled&#8217; ,<br \/>\n\t\t\t  <code>reg_date<\/code> DATETIME NOT NULL ,<br \/>\n\t\t\t  PRIMARY KEY (<code>id<\/code>),<br \/>\n\t\t\t  UNIQUE INDEX <code>id_UNIQUE<\/code> (<code>id<\/code> ASC) ,<br \/>\n\t\t\t  UNIQUE INDEX <code>device_token_UNIQUE<\/code> (<code>device_token<\/code> ASC)<br \/>\n\t\t\t  ) ENGINE = INNODB $charset_collate;&#8221;;<\/p>\n<p>\t\t\trequire_once( ABSPATH . &#8216;wp-admin\/includes\/upgrade.php&#8217; );<br \/>\n\t\t\tdbDelta( $sql );<\/p>\n<p>\t\t\tadd_option( &#8220;jms_rss_db_version&#8221;, $jms_rss_db_version );<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tfunction sendNotification($registrationIDs, $message) {<br \/>\n\t\t\/\/$registrationIDs = array( &#8220;reg id1&#8243;,&#8221;reg id2&#8221;);<br \/>\n\t\t$url = &#8216;https:\/\/gcm-http.googleapis.com\/gcm\/send&#8217;;<\/p>\n<p>\t\t$fields = array(<br \/>\n\t\t\t&#8216;registration_ids&#8217; =&gt; $registrationIDs,<br \/>\n\t\t\t&#8216;data&#8217; =&gt; array( &#8220;message&#8221; =&gt; $message ),<br \/>\n\t\t);<\/p>\n<p>\t\t$headers = array(<br \/>\n\t\t\t&#8216;Authorization: key=&#8217; . GOOGLE_API_KEY,<br \/>\n\t\t\t&#8216;Content-Type: application\/json&#8217;<br \/>\n\t\t);<\/p>\n<p>\t\t\/\/ Open connection<br \/>\n\t\t$ch = curl_init();<\/p>\n<p>\t\t\/\/ Set the URL, number of POST vars, POST data<br \/>\n\t\tcurl_setopt( $ch, CURLOPT_URL, $url);<br \/>\n\t\tcurl_setopt( $ch, CURLOPT_POST, true);<br \/>\n\t\tcurl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);<br \/>\n\t\tcurl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);<br \/>\n\t\t\/\/curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields));<\/p>\n<p>\t\tcurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);<br \/>\n\t\t\/\/ curl_setopt($ch, CURLOPT_POST, true);<br \/>\n\t\t\/\/ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br \/>\n\t\tcurl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $fields));<\/p>\n<p>\t\t\/\/ Execute post<br \/>\n\t\t$result = curl_exec($ch);<\/p>\n<p>\t\t\/\/ Close connection<br \/>\n\t\tcurl_close($ch);<br \/>\n\t\techo $result;<br \/>\n\t\t\/\/print_r($result);<br \/>\n\t\t\/\/var_dump($result);<br \/>\n\t}<\/p>\n<p>?&gt;<\/p>\n","protected":false},"template":"","class_list":["post-8053972","topic","type-topic","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/8053972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic"}],"about":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/8053972\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/media?parent=8053972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}