Example #1
0
 /**
  * Fills descendants simple rights by simple rights of object.
  * @internal
  * @param int $objectId Id of object.
  */
 public static function fillDescendants($objectId)
 {
     $tableName = static::getTableName();
     $pathTableName = ObjectPathTable::getTableName();
     $connection = Application::getConnection();
     $objectId = (int) $objectId;
     $connection->queryExecute("\n\t\t\tINSERT INTO {$tableName} (OBJECT_ID, ACCESS_CODE)\n\t\t\tSELECT path.OBJECT_ID, sright.ACCESS_CODE FROM {$pathTableName} path\n\t\t\t\tINNER JOIN {$tableName} sright ON sright.OBJECT_ID = path.PARENT_ID\n\t\t\tWHERE path.PARENT_ID = {$objectId}\n\t\t");
 }
Example #2
0
 public static function checkFields(Result $result, $primary, array $data)
 {
     if ($result instanceof DeleteResult) {
         if (!ObjectPathTable::isLeaf($primary)) {
             $result->addError(new EntityError(Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_DELETE_NODE")));
         }
     }
     parent::checkFields($result, $primary, $data);
 }
Example #3
0
 /**
  * Move object from node to another node.
  * Use this method instead update.
  * @param $primary
  * @param $newParentId
  * @return \Bitrix\Main\Entity\UpdateResult
  */
 public static function move($primary, $newParentId)
 {
     $newParentId = (int) $newParentId;
     // check primary
     static::normalizePrimary($primary);
     static::validatePrimary($primary);
     $data = array('PARENT_ID' => $newParentId);
     $entity = static::getEntity();
     $result = new UpdateResult();
     $event = new Event($entity, self::EVENT_ON_BEFORE_MOVE, array("id" => $primary, "fields" => $data));
     $event->send();
     $event->getErrors($result);
     $data = $event->mergeFields($data);
     // check data
     //		static::checkFields($result, $primary, $data);
     if (!$result->isSuccess(true)) {
         return $result;
     }
     $event = new Event($entity, self::EVENT_ON_MOVE, array("id" => $primary, "fields" => $data));
     $event->send();
     ObjectPathTable::moveTo($primary['ID'], $newParentId);
     // save data
     $connection = Main\Application::getConnection();
     $helper = $connection->getSqlHelper();
     $tableName = static::getEntity()->getDBTableName();
     $update = $helper->prepareUpdate($tableName, array('PARENT_ID' => $newParentId));
     $id = array();
     foreach ($primary as $k => $v) {
         $id[] = $helper->prepareAssignment($tableName, $k, $v);
     }
     $where = implode(' AND ', $id);
     $sql = "UPDATE " . $tableName . " SET " . $update[0] . " WHERE " . $where;
     $connection->queryExecute($sql, $update[1]);
     $result = new UpdateResult();
     $result->setAffectedRowsCount($connection);
     $result->setData(array('PARENT_ID' => $newParentId));
     $event = new Event($entity, self::EVENT_ON_AFTER_MOVE, array("id" => $primary, "fields" => $data));
     $event->send();
     return $result;
 }
Example #4
0
 private function deleteSimpleFromSelfAndChildren()
 {
     $connection = Application::getInstance()->getConnection();
     $objectId = (int) $this->object->getId();
     $simpleTable = SimpleRightTable::getTableName();
     if ($this->object instanceof File) {
         $sql = "DELETE FROM {$simpleTable} WHERE OBJECT_ID = {$objectId}";
     } else {
         $pathTable = ObjectPathTable::getTableName();
         if ($connection instanceof MysqlCommonConnection || $connection instanceof MssqlConnection) {
             $sql = "DELETE sr FROM {$simpleTable} sr\n\t\t\t\t\t\t\tJOIN {$pathTable} path ON path.OBJECT_ID = sr.OBJECT_ID\n\t\t\t\t\t\tWHERE path.PARENT_ID = {$objectId}\n\t\t\t\t";
         } elseif ($connection instanceof OracleConnection) {
             $sql = "DELETE FROM {$simpleTable}\n\t\t\t\t\t\tWHERE ID IN (\n\t\t\t\t\t\t\tSELECT sr.ID FROM {$simpleTable} sr\n\t\t\t\t\t\t\t\tJOIN {$pathTable} path ON path.OBJECT_ID = sr.OBJECT_ID\n\t\t\t\t\t\t\tWHERE path.PARENT_ID = {$objectId}\n\t\t\t\t\t\t)\n\t\t\t\t";
         }
     }
     $connection->queryExecute($sql);
 }