/**
  * add one record
  *
  * @param   Tinebase_Record_Interface $_record
  * @param   boolean $_duplicateCheck
  * @return  Tinebase_Record_Interface
  * @throws  Tinebase_Exception_AccessDenied
  */
 public function create(Tinebase_Record_Interface $_record, $_duplicateCheck = true)
 {
     $this->_checkRight('create');
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_record->toArray(), true));
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Create new ' . $this->_modelName);
     }
     $db = method_exists($this->_backend, 'getAdapter') ? $this->_backend->getAdapter() : Tinebase_Core::getDb();
     try {
         $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction($db);
         // add personal container id if container id is missing in record
         if ($_record->has('container_id') && empty($_record->container_id)) {
             $containers = Tinebase_Container::getInstance()->getPersonalContainer(Tinebase_Core::getUser(), $this->_applicationName, Tinebase_Core::getUser(), Tinebase_Model_Grants::GRANT_ADD);
             $_record->container_id = $containers[0]->getId();
         }
         $_record->isValid(TRUE);
         $this->_checkGrant($_record, 'create');
         // added _doForceModlogInfo behavior
         if ($_record->has('created_by')) {
             $origRecord = clone $_record;
             Tinebase_Timemachine_ModificationLog::setRecordMetaData($_record, 'create');
             $this->_forceModlogInfo($_record, $origRecord, 'create');
         }
         $this->_inspectBeforeCreate($_record);
         if ($_duplicateCheck) {
             $this->_duplicateCheck($_record);
         }
         $this->_setAutoincrementValues($_record);
         $createdRecord = $this->_backend->create($_record);
         $this->_inspectAfterCreate($createdRecord, $_record);
         $this->_setRelatedData($createdRecord, $_record, null, TRUE);
         $this->_setNotes($createdRecord, $_record);
         if ($this->sendNotifications()) {
             $this->doSendNotifications($createdRecord, Tinebase_Core::getUser(), 'created');
         }
         $this->_increaseContainerContentSequence($createdRecord, Tinebase_Model_ContainerContent::ACTION_CREATE);
         Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId);
     } catch (Exception $e) {
         $this->_handleRecordCreateOrUpdateException($e);
     }
     if ($this->_clearCustomFieldsCache) {
         Tinebase_Core::getCache()->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('customfields'));
     }
     /** @noinspection PhpUndefinedVariableInspection */
     return $this->get($createdRecord);
 }
Example #2
0
 /**
  * add one record
  *
  * @param   Tinebase_Record_Interface $_record
  * @param   boolean $_duplicateCheck
  * @return  Tinebase_Record_Interface
  * @throws  Tinebase_Exception_AccessDenied
  */
 public function create(Tinebase_Record_Interface $_record, $_duplicateCheck = TRUE)
 {
     $this->_checkRight('create');
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_record->toArray(), true));
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Create new ' . $this->_modelName);
     }
     try {
         $db = $this->_backend->getAdapter();
         $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction($db);
         // add personal container id if container id is missing in record
         if ($_record->has('container_id') && empty($_record->container_id)) {
             $containers = Tinebase_Container::getInstance()->getPersonalContainer($this->_currentAccount, $this->_applicationName, $this->_currentAccount, Tinebase_Model_Grants::GRANT_ADD);
             $_record->container_id = $containers[0]->getId();
         }
         $_record->isValid(TRUE);
         $this->_checkGrant($_record, 'create');
         if ($_record->has('created_by')) {
             Tinebase_Timemachine_ModificationLog::setRecordMetaData($_record, 'create');
         }
         $this->_inspectBeforeCreate($_record);
         if ($_duplicateCheck) {
             $this->_duplicateCheck($_record);
         }
         $createdRecord = $this->_backend->create($_record);
         $this->_inspectAfterCreate($createdRecord, $_record);
         $this->_setRelatedData($createdRecord, $_record);
         $this->_setNotes($createdRecord, $_record);
         if ($this->sendNotifications()) {
             $this->doSendNotifications($createdRecord, $this->_currentAccount, 'created');
         }
         $this->_increaseContainerContentSequence($createdRecord, Tinebase_Model_ContainerContent::ACTION_CREATE);
         Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId);
     } catch (Exception $e) {
         $this->_handleRecordCreateOrUpdateException($e);
     }
     return $this->get($createdRecord);
 }