Exemplo n.º 1
0
 /**
  * Test exists method
  */
 public function testExists()
 {
     $subscriptionType = 'ezcomcomment';
     //insert a subscriber object and subscription object
     $time = time();
     $testemail = '*****@*****.**';
     $subscriber = ezcomSubscriber::create();
     $subscriber->setAttribute('email', $testemail);
     $subscriber->setAttribute('user_id', 10);
     $subscriber->setAttribute('enabled', 0);
     $subscriber->store();
     $subscription = ezcomSubscription::create();
     $subscription->setAttribute('user_id', 15);
     $subscription->setAttribute('subscriber_id', $subscriber->attribute('id'));
     $subscription->setAttribute('subscription_type', $subscriptionType);
     $subscription->setAttribute('content_id', '210');
     $subscription->setAttribute('subscription_time', $time);
     $subscription->setAttribute('enabled', 1);
     $subscription->setAttribute('language_id', 2);
     $subscription->store();
     //1. test if the subscription exists by contentID
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType);
     $this->assertTrue($exists);
     $exists = ezcomSubscription::exists('20009', '2', $subscriptionType);
     $this->assertFalse($exists);
     $exists = ezcomSubscription::exists('20009', '2', 'othertypesssss');
     $this->assertFalse($exists);
     $exists = ezcomSubscription::exists('20009', '2', 'othertypesssss', null, null);
     $this->assertNull($exists);
     //2. test if the subsription exists by contenetID and enabled
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, null, 0);
     $this->assertTrue($exists);
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, null, 1);
     $this->assertFalse($exists);
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, null, 12);
     $this->assertNull($exists);
     //3. test if the subscription exists by contentID and email
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, $testemail);
     $this->assertTrue($exists);
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, '*****@*****.**');
     $this->assertFalse($exists);
     //4. test if the subscription exists by contentID, email and enabled
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, $testemail, 0);
     $this->assertTrue($exists);
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, $testemail, 1);
     $this->assertFalse($exists);
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, '*****@*****.**', 0);
     $this->assertFalse($exists);
     $exists = ezcomSubscription::exists('210', '2', $subscriptionType, $testemail, 46);
     $this->assertNull($exists);
 }
 /**
  * Add an subscription. If the subscriber is disabled, throw an exception
  * If there is no subscriber, add one.
  * If there is no subscription for the content, add one
  * @param $email: user's email
  * @return void
  */
 public function addSubscription($email, $user, $contentID, $languageID, $subscriptionType, $currentTime, $activate = true)
 {
     //1. insert into subscriber
     $ezcommentsINI = eZINI::instance('ezcomments.ini');
     $subscriber = ezcomSubscriber::fetchByEmail($email);
     //if there is no data in subscriber for same email, save it
     if (is_null($subscriber)) {
         $subscriber = ezcomSubscriber::create();
         $subscriber->setAttribute('user_id', $user->attribute('contentobject_id'));
         $subscriber->setAttribute('email', $email);
         if ($user->isAnonymous()) {
             $util = ezcomUtility::instance();
             $hashString = $util->generateSusbcriberHashString($subscriber);
             $subscriber->setAttribute('hash_string', $hashString);
         }
         $subscriber->store();
         eZDebugSetting::writeNotice('extension-ezcomments', 'Subscriber does not exist, added one', __METHOD__);
         $subscriber = ezcomSubscriber::fetchByEmail($email);
     } else {
         if ($subscriber->attribute('enabled') == false) {
             throw new Exception('Subscription can not be added because the subscriber is disabled.', self::ERROR_SUBSCRIBER_DISABLED);
         }
     }
     //3 insert into subscription table
     // if there is no data in ezcomment_subscription with given contentobject_id and subscriber_id
     $hasSubscription = ezcomSubscription::exists($contentID, $languageID, $subscriptionType, $email);
     if ($hasSubscription === false) {
         $subscription = ezcomSubscription::create();
         $subscription->setAttribute('user_id', $user->attribute('contentobject_id'));
         $subscription->setAttribute('subscriber_id', $subscriber->attribute('id'));
         $subscription->setAttribute('subscription_type', $subscriptionType);
         $subscription->setAttribute('content_id', $contentID);
         $subscription->setAttribute('language_id', $languageID);
         $subscription->setAttribute('subscription_time', $currentTime);
         $defaultActivated = $ezcommentsINI->variable('CommentSettings', 'SubscriptionActivated');
         if ($user->isAnonymous() && $defaultActivated !== 'true' && $activate === true) {
             $subscription->setAttribute('enabled', 0);
             $utility = ezcomUtility::instance();
             $subscription->setAttribute('hash_string', $utility->generateSubscriptionHashString($subscription));
             $subscription->store();
             $result = ezcomSubscriptionManager::sendActivationEmail(eZContentObject::fetch($contentID), $subscriber, $subscription);
             if (!$result) {
                 eZDebug::writeError("Error sending mail to '{$email}'", __METHOD__);
             }
         } else {
             $subscription->setAttribute('enabled', 1);
             $subscription->store();
         }
         eZDebugSetting::writeNotice('extension-ezcomments', 'No existing subscription for this content and user, added one', __METHOD__);
     }
 }
 public function testActivateSubscription()
 {
     $subscriber = ezcomSubscriber::create();
     $subscriber->setAttribute('email', '*****@*****.**');
     $subscriber->setAttribute('user_id', 10);
     $subscriber->store();
     $subscription = ezcomSubscription::create();
     $subscription->setAttribute('subscriber_id', $subscriber->attribute('id'));
     $subscription->setAttribute('subscriber_type', 'ezcomcomment');
     $subscription->setAttribute('enabled', 0);
     $subscription->setAttribute('content_id', '10_2');
     $hashString = ezcomUtility::instance()->generateSubscriptionHashString($subscription);
     $subscription->setAttribute('hash_string', $hashString);
     $subscription->store();
     $id = $subscription->attribute('id');
     $tpl = eZTemplate::factory();
     $subscriptionManager = ezcomSubscriptionManager::instance($tpl, null, null, 'ezcomSubscriptionManager');
     $subscriptionManager->activateSubscription($hashString);
     $subscriptionActivated = ezcomSubscription::fetch($id);
     $this->assertEquals(1, $subscriptionActivated->attribute('enabled'));
 }
 /**
  * Test the addcomment method in ezcomComment
  */
 public function testAddComment()
 {
     //1. test adding a comment without notification
     $time = time();
     $contentObjectID = 209;
     $languageID = 2;
     $comment = ezcomComment::create();
     $comment->setAttribute('name', 'xc');
     $comment->setAttribute('email', '*****@*****.**');
     $comment->setAttribute('text', 'This is a test comment:)');
     $comment->setAttribute('contentobject_id', $contentObjectID);
     $comment->setAttribute('language_id', $languageID);
     $comment->setAttribute('created', $time);
     $comment->setAttribute('modified', $time);
     $user = eZUser::currentUser();
     $commentManager = ezcomCommentManager::instance();
     //1.1 without subscription
     $result = $commentManager->addComment($comment, $user);
     $this->assertSame(true, $result);
     //1.2 with subscription
     //add subscriber
     $time = $time + 1;
     $comment = ezcomComment::create();
     $comment->setAttribute('name', 'xc');
     $comment->setAttribute('email', '*****@*****.**');
     $comment->setAttribute('text', 'This is a test comment:)');
     $comment->setAttribute('contentobject_id', $contentObjectID);
     $comment->setAttribute('language_id', $languageID);
     $comment->setAttribute('created', $time);
     $comment->setAttribute('modified', $time);
     $subscriber = ezcomSubscriber::create();
     $subscriber->setAttribute('user_id', $user->attribute('contentobject_id'));
     $subscriber->setAttribute('email', $comment->attribute('email'));
     $subscriber->store();
     //add subscription
     $subscription = ezcomSubscription::create();
     $subscription->setAttribute('subscriber_id', $subscriber->attribute('id'));
     $subscription->setAttribute('content_id', $contentObjectID);
     $subscription->setAttribute('language_id', $languageID);
     $subscription->setAttribute('user_id', $user->attribute('contentobject_id'));
     $subscription->setAttribute('subscription_type', 'ezcomcomment');
     $subscription->setAttribute('subscription_time', $time);
     $subscription->store();
     //add comment
     $result = $commentManager->addComment($comment, $user);
     $this->assertSame(true, $result);
     //verify the notification
     $notifications = ezcomNotification::fetchNotificationList(1, 1, 0, array('id' => 'desc'));
     $this->assertEquals($contentObjectID, $notifications[0]->attribute('contentobject_id'));
     $this->assertEquals($comment->attribute('id'), $notifications[0]->attribute('comment_id'));
     $this->assertEquals($languageID, $notifications[0]->attribute('language_id'));
     //2. test adding a comment with notification
     $time2 = time() + 3;
     $contentObjectID = 210;
     $languageID = 2;
     $comment2 = ezcomComment::create();
     $comment2->setAttribute('name', 'chen');
     $comment2->setAttribute('email', '*****@*****.**');
     $comment2->setAttribute('text', 'notified comment');
     $comment2->setAttribute('contentobject_id', $contentObjectID);
     $comment2->setAttribute('language_id', $languageID);
     $comment2->setAttribute('created', $time2);
     $comment2->setAttribute('modified', $time2);
     $user2 = eZUser::currentUser();
     //2.1 if there is no subscription
     $result2 = $commentManager->addComment($comment2, $user2, $time2);
     $this->assertSame(true, $result2);
     $notifications = ezcomNotification::fetchNotificationList(1, 1, 0, array('id' => 'desc'));
     $this->assertNotEquals($notifications[0]->attribute('comment_id'), $comment2->attribute('id'));
     //assert that there is no new notification
     //2.2 if there is already subscription
     $comment2 = ezcomComment::create();
     $comment2->setAttribute('name', 'chen');
     $comment2->setAttribute('email', '*****@*****.**');
     $comment2->setAttribute('text', 'notified comment');
     $comment2->setAttribute('contentobject_id', $contentObjectID);
     $comment2->setAttribute('language_id', $languageID);
     $time2 = $time2 + 1;
     //add subscriber
     $subscriber = ezcomSubscriber::create();
     $subscriber->setAttribute('user_id', $user2->attribute('contentobject_id'));
     $subscriber->setAttribute('email', $comment2->attribute('email'));
     $subscriber->store();
     //add subscription
     $subscription = ezcomSubscription::create();
     $subscription->setAttribute('subscriber_id', $subscriber->attribute('id'));
     $subscription->setAttribute('content_id', $contentObjectID);
     $subscription->setAttribute('language_id', $languageID);
     $subscription->setAttribute('user_id', $user2->attribute('contentobject_id'));
     $subscription->setAttribute('subscription_type', 'ezcomcomment');
     $subscription->setAttribute('subscription_time', $time2);
     $subscription->store();
     //add comment
     $comment2->setAttribute('created', $time2);
     $comment2->setAttribute('modified', $time2);
     $result = $commentManager->addComment($comment2, $user2, $time2);
     $this->assertSame(true, $result);
     //vertify the notification
     $notifications = ezcomNotification::fetchNotificationList(1, 1, 0, array('id' => 'desc'));
     $this->assertEquals($contentObjectID, $notifications[0]->attribute('contentobject_id'));
     $this->assertEquals($comment2->attribute('id'), $notifications[0]->attribute('comment_id'));
     $this->assertEquals($languageID, $notifications[0]->attribute('language_id'));
 }