| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | <?php/** * @file * Flag module integration *//** * Destination class implementing when you want just an insert into flag_content table. */class MigrateDestinationFlagSimple extends MigrateDestination {  public function __construct($fid) {    parent::__construct();    $this->fid = $fid;  }  public function __toString() {    $flag = flag_get_flag(NULL, $this->fid);    return t('flag (!flag)', array('!flag' => $flag->name));  }  static public function getKeySchema() {    return array(      'fcid' => array(        'type' => 'int',        'not null' => TRUE,      ),    );  }  /**   * Delete a membership.   *   * @param $id   *  IDs to be deleted.   */  public function bulkRollback(array $ids) {    migrate_instrument_start(__METHOD__);    db_delete('flag_content')      ->condition('fcid', $ids, 'IN')      ->execute();    migrate_instrument_stop(__METHOD__);  }  /**   * Import a single flag_content.   *   * @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) {    if (isset($entity->timestamp)) {      $entity->timestamp = Migration::timestamp($entity->timestamp);    }    $entity->fid = $this->fid;    if (!empty($entity->fcid)) {      $return = drupal_write_record('flag_content', $entity, 'fcid');    }    else {      $return = drupal_write_record('flag_content', $entity);    }    if ($return) {      // Update the flag_counts table.      $count = db_select('flag_content')        ->fields('flag_content')        ->condition('fid', $this->fid)        ->condition('content_type', $entity->content_type)        ->condition('content_id', $entity->content_id)        ->countQuery()        ->execute()        ->fetchField();      db_merge('flag_counts')        ->key(array(          'fid' => $this->fid,          'content_id' => $entity->content_id,        ))        ->fields(array(          'content_type' => $entity->content_type,          'count' => $count,          'last_updated' => REQUEST_TIME,        ))        ->execute();      return array($entity->fcid);    }  }  public function fields() {    return array(        'fcid' => 'Flag content ID',        'fid' => 'Flag ID',        'content_type' => '',        'content_id' => '',        'uid' => 'User ID',        'timestamp' => '',    );  }}/** * Field handler - this will expose flags as fields on the object they're * attached to, and set the flag to the value mapped in addFieldMapping(). */abstract class MigrateExtrasFlagHandler extends MigrateDestinationHandler {  /**   * Make the flags assigned to this object visible.   */  public function fields($entity_type, $bundle) {    $fields = array();    if (module_exists('flag')) {      $flags = flag_get_flags($entity_type, $bundle);      foreach ($flags as $flag_name => $flag) {        $fields[$flag_name] = $flag->title;      }    }    return $fields;  }}/** * Because we can't identify what kind of entity is passed to complete, we * implement a separate handler for each type. */class MigrateExtrasNodeFlagHandler extends MigrateExtrasFlagHandler {  public function __construct() {    $this->registerTypes(array('node'));  }  public function complete($node, stdClass $row) {    if (!module_exists('flag')) return;    $flags = flag_get_flags('node', $node->type);    $fields = array();    foreach ($flags as $flag_name => $flag) {      if (!empty($node->$flag_name)) {        flag('flag', $flag_name, $node->nid);      }    }  }}class MigrateExtrasUserFlagHandler extends MigrateExtrasFlagHandler {  public function __construct() {    $this->registerTypes(array('user'));  }  public function complete($user, stdClass $row) {    if (!module_exists('flag')) return;    $flags = flag_get_flags('user', 'user');    $fields = array();    foreach ($flags as $flag_name => $flag) {      if (!empty($user->$flag_name)) {        flag('flag', $flag_name, $user->uid);      }    }  }}
 |