Exemplo n.º 1
0
 function test_add_get_remove()
 {
     $this->assertFalse(WebPush_DB::is_subscription('http://localhost/1'));
     $this->assertFalse(WebPush_DB::is_subscription('http://localhost/2'));
     WebPush_DB::add_subscription('http://localhost/1', 'aKey1', '89IdFKBhvi9H5LlvawK9Iw==');
     $this->assertTrue(WebPush_DB::is_subscription('http://localhost/1'));
     $this->assertFalse(WebPush_DB::is_subscription('http://localhost/2'));
     WebPush_DB::add_subscription('http://localhost/2', 'aKey2', '89IdFKBhvi9H5LlvawK9Iw==');
     $this->assertTrue(WebPush_DB::is_subscription('http://localhost/1'));
     $this->assertTrue(WebPush_DB::is_subscription('http://localhost/2'));
     $subscriptions = WebPush_DB::get_subscriptions();
     $this->assertEquals(2, count($subscriptions));
     $this->assertEquals('http://localhost/1', $subscriptions[0]->endpoint);
     $this->assertEquals('aKey1', $subscriptions[0]->userKey);
     $this->assertEquals('http://localhost/2', $subscriptions[1]->endpoint);
     $this->assertEquals('aKey2', $subscriptions[1]->userKey);
     WebPush_DB::remove_subscription('http://localhost/1');
     $this->assertFalse(WebPush_DB::is_subscription('http://localhost/1'));
     $this->assertTrue(WebPush_DB::is_subscription('http://localhost/2'));
     $subscriptions = WebPush_DB::get_subscriptions();
     $this->assertEquals(1, count($subscriptions));
     $this->assertEquals('http://localhost/2', $subscriptions[0]->endpoint);
     $this->assertEquals('aKey2', $subscriptions[0]->userKey);
     WebPush_DB::remove_subscription('http://localhost/2');
     $this->assertFalse(WebPush_DB::is_subscription('http://localhost/1'));
     $this->assertFalse(WebPush_DB::is_subscription('http://localhost/2'));
     $subscriptions = WebPush_DB::get_subscriptions();
     $this->assertEquals(0, count($subscriptions));
 }
Exemplo n.º 2
0
 public static function on_transition_post_status($new_status, $old_status, $post)
 {
     if (empty($post) || $new_status !== "publish") {
         return;
     }
     $title_option = get_option('webpush_title');
     update_option('webpush_payload', array('title' => $title_option === 'blog_title' ? get_bloginfo('name') : $title_option, 'body' => get_the_title($post->ID), 'url' => get_permalink($post->ID)));
     $subscriptions = WebPush_DB::get_subscriptions();
     foreach ($subscriptions as $subscription) {
         if (!sendNotification($subscription->endpoint)) {
             // If there's an error while sending the push notification,
             // the subscription is no longer valid, hence we remove it.
             WebPush_DB::remove_subscription($subscription->endpoint);
         }
     }
 }
Exemplo n.º 3
0
 public static function sendNotification($title, $body, $icon, $url, $post)
 {
     require_once plugin_dir_path(__FILE__) . 'web-push.php';
     $webPush = new WebPush();
     update_option('webpush_payload', array('title' => html_entity_decode($title, ENT_COMPAT, get_option('blog_charset')), 'body' => html_entity_decode($body, ENT_COMPAT, get_option('blog_charset')), 'icon' => $icon, 'url' => $url, 'postID' => $post ? $post->ID : ''));
     $gcmKey = get_option('webpush_gcm_key');
     $webPush->setGCMKey($gcmKey);
     $webPush->setVAPIDInfo(get_option('webpush_vapid_key'), get_option('webpush_vapid_audience'), get_option('webpush_vapid_subject'));
     $notification_count = 0;
     // Sending notifications could take some time, so we extend the maximum
     // execution time for the script.
     set_time_limit(120);
     $subscriptions = WebPush_DB::get_subscriptions();
     $subscription_num = count($subscriptions);
     foreach ($subscriptions as $subscription) {
         // Ignore GCM endpoints if we don't have a GCM key.
         $isGCM = strpos($subscription->endpoint, GCM_REQUEST_URL) === 0;
         if (!$gcmKey && $isGCM) {
             continue;
         }
         $webPush->addRecipient($subscription->endpoint, function ($success) use($subscription, &$notification_count) {
             if (!$success) {
                 // If there's an error while sending the push notification,
                 // the subscription is no longer valid, hence we remove it.
                 WebPush_DB::remove_subscription($subscription->endpoint);
             } else {
                 $notification_count++;
             }
         });
     }
     $webPush->sendNotifications();
     return $notification_count;
 }