| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | <?php/** * TripalEntityController extends DrupalDefaultEntityController. * * Our subclass of DrupalDefaultEntityController lets us add a few * important create, update, and delete methods. */class TripalEntityController extends EntityAPIController {  public function __construct($entityType) {    parent::__construct($entityType);  }  /**   * Create a Tripal data entity - we first set up the values that are specific   * to our data schema but then also go through the EntityAPIController   * function.   *   * @param $type   *   The machine-readable type of the entity.   *   * @return   *   An object with all default fields initialized.   */  public function create(array $values = array()) {    // Add values that are specific to our entity    $values += array(      'id' => '',      'bundle' => '',      'title' => '',      'created' => '',      'changed' => '',    );    return parent::create($values);  }  /**   * Delete a single entity.   *   * Really a convenience function for deleteMultiple().   */  public function delete($entity) {    $this->deleteMultiple(array($entity));  }  /**   * Delete one or more tripal_entities entities.   *   * Deletion is unfortunately not supported in the base   * DrupalDefaultEntityController class.   *   * @param array $entities   *   An array of entity IDs or a single numeric ID.   */  public function deleteMultiple($entities) {    dpm($entities);    $ids = array();    if (!empty($entities)) {      $transaction = db_transaction();      try {        foreach ($entities as $entity_id) {          // Invoke hook_entity_delete().          $entity = entity_load($entity_id);          module_invoke_all('entity_delete', $entity, $entity->type);          field_attach_delete($entity->type, $entity);          $ids[] = $entity->id;        }        db_delete('tripal_entity')          ->condition('id', $ids, 'IN')          ->execute();      }      catch (Exception $e) {        $transaction->rollback();        watchdog_exception('entity_example', $e);        throw $e;      }    }  }  /**   * Sets the title for an entity.   *   * @param $entity   * @param $title   */  public function setTitle($entity, $title) {    db_update('tripal_entity')      ->fields(array(        'title' => $title      ))      ->condition('id', $entity->id)      ->execute();  }  /**   * Saves the custom fields using drupal_write_record().   */  public function save($entity) {    global $user;    $pkeys = array();    // If our entity has no id, then we need to give it a    // time of creation.    if (empty($entity->id)) {      $entity->created = time();      $invocation = 'entity_insert';    }    else {      $invocation = 'entity_update';      $pkeys = array('id');    }    // Invoke hook_entity_presave().    module_invoke_all('entity_presave', $entity, $entity->type);    // Write out the entity record.    $record = array(      'cvterm_id' => $entity->cvterm_id,      'type'      => $entity->type,      'bundle'    => $entity->bundle,      'title'     => $entity->title,      'uid'       => $user->uid,      'created'   => $entity->created,      'changed'   => time(),    );    if ($invocation == 'entity_update') {      $record['id'] = $entity->id;    }    $success = drupal_write_record('tripal_entity', $record, $pkeys);    if ($success == SAVED_NEW) {      $entity->id = $record['id'];    }    // Now we need to either insert or update the fields which are    // attached to this entity. We use the same primary_keys logic    // to determine whether to update or insert, and which hook we    // need to invoke.    if ($invocation == 'entity_insert') {      field_attach_insert($entity->type, $entity);    }    else {      field_attach_update($entity->type, $entity);    }    // Invoke either hook_entity_update() or hook_entity_insert().    module_invoke_all('entity_postsave', $entity, $entity->type);    module_invoke_all($invocation, $entity, $entity->type);    return $entity;  }}
 |