Example #1
0
 /**
  * Verify that Mollom data can be deleted.
  */
 function testDelete()
 {
     // Create a data record.
     $data1 = (object) array('entity' => 'type1', 'id' => 123, 'form_id' => 'type1_form', 'contentId' => 1);
     ResponseDataStorage::save($data1);
     // Create a second data record; same ID, different entity type.
     $data2 = (object) array('entity' => 'type2', 'id' => 123, 'form_id' => 'type2_form', 'contentId' => 2);
     ResponseDataStorage::save($data2);
     // Verify that both records exist.
     $this->assertMollomData($data1->entity, $data1->id, 'contentId', $data1->contentId);
     $this->assertMollomData($data2->entity, $data2->id, 'contentId', $data2->contentId);
     // Delete the first data record.
     ResponseDataStorage::delete($data1->entity, $data1->id);
     // Verify that only the second record remained and was not changed.
     $this->assertNoMollomData($data1->entity, $data1->id);
     $this->assertMollomData($data2->entity, $data2->id, 'contentId', $data2->contentId);
 }
Example #2
0
 /**
  * Form submit handler to flush Mollom session and form information from cache.
  *
  * This is necessary as the entity forms will no longer automatically save
  * the data with the entity.
  *
  * @todo: Possible problems:
  *   - This submit handler is invoked too late; the primary submit handler might
  *     send out e-mails directly after saving the entity (e.g.,
  *     user_register_form_submit()), so mollom_mail_alter() is invoked before
  *     Mollom session data has been saved.
  */
 public static function submitForm($form, FormState $form_state)
 {
     // Some modules are implementing multi-step forms without separate form
     // submit handlers. In case we reach here and the form will be rebuilt, we
     // need to defer our submit handling until final submission.
     $is_rebuilding = $form_state->isRebuilding();
     if ($is_rebuilding) {
         return;
     }
     $mollom = $form_state->getValue('mollom');
     $form_object = $form_state->getFormObject();
     // If an 'entity' and a 'post_id' mapping was provided via
     // hook_mollom_form_info(), try to automatically store Mollom session data.
     if (empty($mollom) || empty($mollom['entity']) || !$form_state->getFormObject() instanceof EntityFormInterface) {
         return;
     }
     /* @var $form_object \Drupal\Core\Entity\EntityFormInterface */
     $entity_id = $form_object->getEntity()->id();
     $data = (object) $mollom;
     $data->id = $entity_id;
     $data->moderate = $mollom['require_moderation'] ? 1 : 0;
     $stored_data = ResponseDataStorage::save($data);
     $form_state->setValue(['mollom', 'data'], $stored_data);
 }
Example #3
0
 /**
  * Assert that no Mollom session data exists for a certain entity.
  */
 protected function assertNoMollomData($entity, $id)
 {
     $data = ResponseDataStorage::loadByEntity($entity, $id);
     $this->assertFalse($data, t('No Mollom session data exists for %entity @id.', array('%entity' => $entity, '@id' => $id)));
 }
Example #4
0
 /**
  * Test that calling the mollom action function triggers the unpublish of
  * nodes and marking as spam.
  */
 function testNodeActions()
 {
     $node_storage = \Drupal::entityManager()->getStorage('node');
     $this->drupalLogin($this->adminUser);
     $this->drupalGet('admin/content');
     $this->assertOption('edit-action', 'mollom_node_unpublish_action');
     $contentIds = [];
     $nodes = $node_storage->loadMultiple();
     $i = 0;
     $edit = ['action' => 'mollom_node_unpublish_action'];
     /* @var $node \Drupal\node\NodeInterface */
     foreach ($nodes as $node) {
         $edit['node_bulk_form[' . $i . ']'] = TRUE;
         $this->assertTrue($node->isPublished(), 'Initial node is published.');
         $data = ResponseDataStorage::loadByEntity('node', $node->id());
         $contentIds[] = $data->contentId;
         $i++;
     }
     $this->drupalPostForm(NULL, $edit, t('Apply'));
     // Verify that all nodes are now unpublished.
     $node_storage->resetCache();
     $nodes = $node_storage->loadMultiple();
     foreach ($nodes as $node) {
         $this->assertFalse($node->isPublished(), 'Node is now unpublished.');
         $server = $this->getServerRecord('feedback');
         $this->assertTrue(in_array($server['contentId'], $contentIds));
         $this->assertEqual($server['source'], 'mollom_action_unpublish_node');
         $this->assertEqual($server['reason'], 'spam');
         $this->assertEqual($server['type'], 'moderate');
     }
 }
Example #5
0
 /**
  * Sends feedback for multiple Mollom session data records.
  *
  * @param $entity
  *   The entity type to send feedback for.
  * @param $ids
  *   An array of entity ids to send feedback for.
  * @param $feedback
  *   The feedback reason for reporting content.
  * @param $type
  *   The type of feedback, one of 'moderate' or 'flag'.
  * @param $source
  *   An optional single word string identifier for the user interface source.
  *   This is tracked along with the feedback to provide a more complete picture
  *   of how feedback is used and submitted on the site.
  */
 public static function sendFeedbackMultiple($entity, array $ids, $feedback, $type = 'moderate', $source = 'mollom_data_report_multiple')
 {
     $return = TRUE;
     foreach ($ids as $id) {
         // Load the Mollom session data.
         $data = ResponseDataStorage::loadByEntity($entity, $id);
         if (empty($data)) {
             continue;
         }
         // Send feedback, if we have session data.
         if (!empty($data->contentId) || !empty($data->captchaId)) {
             $result = self::sendFeedbackToMollom($data, $feedback, $type, $source);
             $return = $return && $result;
         }
         $data->moderate = 0;
         ResponseDataStorage::save($data);
     }
     return $return;
 }