示例#1
0
 /**
  * все сохранение делается внутри транзакции (включая beforeSave и afterSave), если будет исключение - транзакция будет откачена PDO
  */
 public function save()
 {
     ActiveRecordHelper::exceptionIfObjectIsIncompatibleWithActiveRecord($this);
     $obj_class_name = get_class($this);
     $obj_db_id = $obj_class_name::DB_ID;
     $transaction_is_my = false;
     if (!DBWrapper::inTransaction($obj_db_id)) {
         DBWrapper::beginTransaction($obj_db_id);
         $transaction_is_my = true;
     }
     $this->beforeSave();
     \OLOG\Model\ActiveRecordHelper::saveModelObj($this);
     // не вызываем afterSave если это вызов save для этого объекта изнутри aftersave этого же объекта (для предотвращения бесконечного рекурсивного вызова afterSave)
     static $__inprogress = [];
     $inprogress_key = FullObjectId::getFullObjectId($this);
     if (!array_key_exists($inprogress_key, $__inprogress)) {
         $__inprogress[$inprogress_key] = 1;
         $this->afterSave();
         unset($__inprogress[$inprogress_key]);
     }
     // комитим только если мы же и стартовали транзакцию (на случай вложенных вызовов)
     if ($transaction_is_my) {
         DBWrapper::commitTransaction($obj_db_id);
     }
 }
示例#2
0
 public function testFullObjectId()
 {
     $this->assertEquals('not_object', \OLOG\FullObjectId::getFullObjectId(''));
     $id = rand(1, 1000);
     $test_obj = new \Tests\TestObject($id);
     $this->assertEquals(\Tests\TestObject::class . '.' . $id, \OLOG\FullObjectId::getFullObjectId($test_obj));
 }
示例#3
0
 /**
  * @param $obj InterfaceOwner
  * Does not saves object - designed to be called from constructor.
  */
 public static function assignCurrentUserAsOwnerToObj($obj)
 {
     Assert::assert($obj instanceof InterfaceOwner);
     Assert::assert($obj instanceof InterfaceLoad);
     static $__inprogress = [];
     $inprogress_key = FullObjectId::getFullObjectId($obj);
     if (array_key_exists($inprogress_key, $__inprogress)) {
         return;
     }
     $__inprogress[$inprogress_key] = 1;
     // заполняем при создании объекта
     if (!$obj->getId()) {
         $current_user_id = Auth::currentUserId();
         if ($current_user_id) {
             $obj->setOwnerUserId($current_user_id);
             $current_user_obj = User::factory($current_user_id);
             $obj->setOwnerGroupId($current_user_obj->getPrimaryGroupId());
         }
     }
     unset($__inprogress[$inprogress_key]);
 }