/** * 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); }
/** * 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); }
/** * 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))); }
/** * 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'); } }
/** * 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; }