/**
  * @see LTIToolProviderOutcomesResourceEntityControllerInterface::save
  */
 public function save($entity)
 {
     $transaction = db_transaction();
     try {
         $entity->is_new = empty($enity->lti_tool_provider_outcomes_resource_id);
         if (empty($entity->lti_tool_provider_outcomes_resource_timestamp_created)) {
             $entity->lti_tool_provider_outcomes_resource_timestamp_created = REQUEST_TIME;
         }
         field_attach_presave('lti_tool_provider_outcomes_resource', $entity);
         $primary_key = $entity->lti_tool_provider_outcomes_resource_id ? 'lti_tool_provider_outcomes_resource_id' : array();
         if (empty($primary_key)) {
             drupal_write_record('lti_tool_provider_outcomes_resource', $entity);
             field_attach_insert('lti_tool_provider_outcomes_resource', $entity);
             $op = 'insert';
         } else {
             drupal_write_record('lti_tool_provider_outcomes_resource', $entity, $primary_key);
             $op = 'update';
         }
         $function = 'field_attach_' . $op;
         $function('lti_tool_provider_outcomes_resource', $entity);
         module_invoke_all('entity_' . $op, $entity, 'lti_tool_provider_outcomes_resource');
         unset($entity->is_new);
         db_ignore_slave();
         return $entity;
     } catch (Exception $e) {
         $transaction->rollback();
         drupal_set_message(t('%e', array('%e' => $entity->{$e})));
         watchdog_exception('lti_tool_provider_outcomes_resource', $e, NULL, WATCHDOG_ERROR);
         return FALSE;
     }
 }
Пример #2
0
function api_node_save($node)
{
    $transaction = db_transaction();
    try {
        // Load the stored entity, if any.
        if (!empty($node->nid) && !isset($node->original)) {
            $node->original = entity_load_unchanged('node', $node->nid);
        }
        field_attach_presave('node', $node);
        global $user;
        // Determine if we will be inserting a new node.
        if (!isset($node->is_new)) {
            $node->is_new = empty($node->nid);
        }
        /*
            // Set the timestamp fields.
            if (empty($node->created)) {
              $node->created = REQUEST_TIME;
            }
            // The changed timestamp is always updated for bookkeeping purposes,
            // for example: revisions, searching, etc.
            $node->changed = REQUEST_TIME;
        
            $node->timestamp = REQUEST_TIME;
        */
        $update_node = TRUE;
        // Let modules modify the node before it is saved to the database.
        module_invoke_all('node_presave', $node);
        module_invoke_all('entity_presave', $node, 'node');
        if ($node->is_new || !empty($node->revision)) {
            // When inserting either a new node or a new node revision, $node->log
            // must be set because {node_revision}.log is a text column and therefore
            // cannot have a default value. However, it might not be set at this
            // point (for example, if the user submitting a node form does not have
            // permission to create revisions), so we ensure that it is at least an
            // empty string in that case.
            // @todo: Make the {node_revision}.log column nullable so that we can
            // remove this check.
            if (!isset($node->log)) {
                $node->log = '';
            }
        } elseif (!isset($node->log) || $node->log === '') {
            // If we are updating an existing node without adding a new revision, we
            // need to make sure $node->log is unset whenever it is empty. As long as
            // $node->log is unset, drupal_write_record() will not attempt to update
            // the existing database column when re-saving the revision; therefore,
            // this code allows us to avoid clobbering an existing log entry with an
            // empty one.
            unset($node->log);
        }
        // When saving a new node revision, unset any existing $node->vid so as to
        // ensure that a new revision will actually be created, then store the old
        // revision ID in a separate property for use by node hook implementations.
        if (!$node->is_new && !empty($node->revision) && $node->vid) {
            $node->old_vid = $node->vid;
            unset($node->vid);
        }
        // Save the node and node revision.
        if ($node->is_new) {
            // For new nodes, save new records for both the node itself and the node
            // revision.
            drupal_write_record('node', $node);
            _node_save_revision($node, $user->uid);
            $op = 'insert';
        } else {
            // For existing nodes, update the node record which matches the value of
            // $node->nid.
            drupal_write_record('node', $node, 'nid');
            // Then, if a new node revision was requested, save a new record for
            // that; otherwise, update the node revision record which matches the
            // value of $node->vid.
            if (!empty($node->revision)) {
                _node_save_revision($node, $user->uid);
            } else {
                _node_save_revision($node, $user->uid, 'vid');
                $update_node = FALSE;
            }
            $op = 'update';
        }
        if ($update_node) {
            db_update('node')->fields(array('vid' => $node->vid))->condition('nid', $node->nid)->execute();
        }
        // Call the node specific callback (if any). This can be
        // node_invoke($node, 'insert') or
        // node_invoke($node, 'update').
        node_invoke($node, $op);
        // Save fields.
        $function = "field_attach_{$op}";
        $function('node', $node);
        module_invoke_all('node_' . $op, $node);
        module_invoke_all('entity_' . $op, $node, 'node');
        // Update the node access table for this node.
        node_access_acquire_grants($node);
        // Clear internal properties.
        unset($node->is_new);
        unset($node->original);
        // Clear the static loading cache.
        entity_get_controller('node')->resetCache(array($node->nid));
        // Ignore slave server temporarily to give time for the
        // saved node to be propagated to the slave.
        db_ignore_slave();
    } catch (Exception $e) {
        $transaction->rollback();
        watchdog_exception('node', $e);
        throw $e;
    }
}
 /**
  * Do a fast delete without loading entities of firing delete hooks.
  *
  * @param array $ids
  *   An array of entity IDs.
  * @param \DatabaseTransaction $transaction
  *   Optionally a DatabaseTransaction object to use. Allows overrides to pass
  *   in their transaction object.
  *
  * @throws \Exception
  *   When there is a database error.
  */
 protected function fastDelete($ids, \DatabaseTransaction $transaction = NULL)
 {
     $transaction = isset($transaction) ? $transaction : db_transaction();
     try {
         db_delete($this::getTableName())->condition($this::getTableIdkey(), $ids, 'IN')->execute();
         // Reset the cache as soon as the changes have been applied.
         $this->resetCache($ids);
         // Ignore slave server temporarily.
         db_ignore_slave();
     } catch (\Exception $e) {
         $transaction->rollback();
         watchdog_exception($this->entityType, $e);
         throw $e;
     }
 }