array( 'type' => 'int', 'not null' => TRUE, ), ); } /** * Delete the provided votes and recalculate the results. * * @param $id * IDs to be deleted. */ public function bulkRollback(array $ids) { migrate_instrument_start(__METHOD__); foreach ($ids as $id) { $votes[]['vote_id'] = $id; } votingapi_delete_votes($votes); // foreach($votes as $vote) { // votingapi_recalculate_results($vote['content_type'], $vote['content_id'], TRUE); // } migrate_instrument_stop(__METHOD__); } /** * Import a single vote. * * @param $entity * Object object to build. Prefilled with any fields mapped in the Migration. * @param $row * Raw source data object - passed through to prepare/complete handlers. * @return array * Array of key fields of the object that was saved if * successful. FALSE on failure. */ public function import(stdClass $entity, stdClass $row) { $this->prepare($entity, $row); // Votes have to be assigned to an entity. if (empty($entity->entity_id)) { watchdog('VotingAPI Import', 'Skipped import due to empty entity_id for vote import: @serial', array('@serial' => json_encode($row)), WATCHDOG_ERROR); return FALSE; } if (isset($entity->timestamp)) { $entity->timestamp = Migration::timestamp($entity->timestamp); } // Just converting $entity to an array doesn't work... $vote = array(); $vote['entity_type'] = $entity->entity_type; $vote['entity_id'] = $entity->entity_id; $vote['value_type'] = $entity->value_type; $vote['value'] = $entity->value; $vote['uid'] = $entity->uid; $vote['tag'] = $entity->tag; $vote['timestamp'] = $entity->timestamp; $vote['vote_source'] = $entity->vote_source; votingapi_add_votes($vote); if (isset($vote[0]['vote_id'])) { $entity->vote_id = $vote[0]['vote_id']; $this->complete($entity, $row); $this->importedIds[$entity->entity_type][] = $entity->entity_id; return array($entity->vote_id); } else { return FALSE; } } /** * We're done with importing votes, recalculate the results. */ function postImport() { foreach ($this->importedIds as $entity_type => $entity_ids) { $this->importedIds = array_unique($this->importedIds); foreach ($entity_ids as $entity_id) { votingapi_recalculate_results($entity_type, $entity_id, TRUE); } } } /** * Returns a list of fields available to be mapped/ * * @return array * Keys: machine names of the fields (to be passed to addFieldMapping) * Values: Human-friendly descriptions of the fields. */ public function fields() { return array( 'vote_id' => 'Vote ID', 'entity_type' => "Entity Type (defaults to 'node')", 'entity_id' => 'Entity ID', 'value' => 'Numeric vote value', 'value_type' => "Value type (percent/points, defaults to 'percent')", 'tag' => "Tag (defaults to 'vote')", 'uid' => 'User ID', 'timestamp' => 'Timestamp', 'vote_source' => 'Vote Source IP Address', ); } /** * Give handlers a shot at modifying the object before saving it. * * @param $entity * Entity object to build. Prefilled with any fields mapped in the Migration. * @param $source_row * Raw source data object - passed through to prepare handlers. */ public function prepare(stdClass $entity, stdClass $source_row) { $migration = Migration::currentMigration(); $entity->migrate = array( 'machineName' => $migration->getMachineName(), ); // Call any prepare handler for this specific Migration. if (method_exists($migration, 'prepare')) { $migration->prepare($entity, $source_row); } } /** * Give handlers a shot at modifying the object (or taking additional action) * after saving it. * * @param $object * Entity object to build. This is the complete object after saving. * @param $source_row * Raw source data object - passed through to complete handlers. */ public function complete(stdClass $entity, stdClass $source_row) { $migration = Migration::currentMigration(); // Call any complete handler for this specific Migration. if (method_exists($migration, 'complete')) { $migration->complete($entity, $source_row); } } }