/** * Get all migrated version numbers * * @return array */ public function fetchAll() { $helper = $this->helper; $dbResult = $this->db->query(sprintf('SELECT %s FROM %s ORDER BY %1$s ASC', $helper->quote('version'), $helper->quote($this->tableName))); $versions = array(); while ($row = $dbResult->fetch()) { $versions[] = $row['version']; } return $versions; }
/** * Executes a query to the database. * * - query($sql) * - query($sql, $limit) * - query($sql, $offset, $limit) * - query($sql, $binds) * - query($sql, $binds, $limit) * - query($sql, $binds, $offset, $limit) * * @param string $sql Sql query. * @param array $binds,... Array of binds. * @param int $offset,... Offset of first row returned. * @param int $limit,... Limit rows count. * * @return Result * @throws \Bitrix\Main\Db\SqlQueryException */ public function query($sql) { list($sql, $binds, $offset, $limit) = self::parseQueryFunctionArgs(func_get_args()); if (!empty($binds)) { $binds1 = $binds2 = ""; foreach ($binds as $key => $value) { if (strlen($value) > 0) { if ($binds1 != "") { $binds1 .= ","; $binds2 .= ","; } $binds1 .= $key; $binds2 .= ":" . $key; } } if ($binds1 != "") { $sql .= " RETURNING " . $binds1 . " INTO " . $binds2; } } return parent::query($sql, $binds, $offset, $limit); }
/** * Returns list of id of objects which act by positive rights on descendants objects by the same ACCESS_CODE. * @param int $objectId Object id. * @param string $accessCode Access code. * @return array */ private function getConflictRightsInSubTree($objectId, $accessCode) { $objectId = (int) $objectId; $accessCode = $this->sqlHelper->forSql($accessCode); $rights = $this->connection->query("\n\t\t\tSELECT r.OBJECT_ID\n\t\t\tFROM b_disk_right r\n\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = r.OBJECT_ID\n\t\t\tWHERE\n\t\t\t\tp.PARENT_ID = {$objectId} AND\n\t\t\t\tr.NEGATIVE = 0 AND\n\t\t\t\tr.ACCESS_CODE = '{$accessCode}'\n\t\t")->fetchAll(); $ids = array(); foreach ($rights as $i => $right) { $ids[] = $right['OBJECT_ID']; } unset($right); return $ids; }
private function moveCommonElements($storageId, $rootObjectId, $iblock) { $iblockId = $iblock['ID']; $sqlHelper = $this->connection->getSqlHelper(); if ($iblock['VERSION'] == 2) { $props = $this->connection->query("SELECT * FROM b_iblock_property WHERE VERSION = 2 AND IBLOCK_ID = {$iblockId} AND CODE IN ('WEBDAV_SIZE', 'FILE', 'WEBDAV_VERSION')")->fetchAll(); $joinTable = 'b_iblock_element_prop_s' . $iblockId; $columnForFileId = $columnForSize = 'null'; $columnForVersion = '1'; foreach ($props as $prop) { switch ($prop['CODE']) { case 'WEBDAV_SIZE': $columnForSize = 'PROPERTY_' . $prop['ID']; break; case 'FILE': $columnForFileId = 'PROPERTY_' . $prop['ID']; break; case 'WEBDAV_VERSION': $columnForVersion = 'PROPERTY_' . $prop['ID']; break; } } unset($prop); if ($this->isMysql) { $sql = "\n\t\t\t\t\t\tINSERT IGNORE INTO b_disk_object (FILE_ID, SIZE, GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT {$columnForFileId}, {$columnForSize}, {$columnForVersion}, child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN {$joinTable} props ON props.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t"; } elseif ($this->isOracle || $this->isMssql) { $sql = "\n\t\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT {$columnForFileId}, {$columnForSize}, {$columnForVersion}, child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN {$joinTable} props ON props.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object WHERE NAME = child.NAME AND PARENT_ID = child.IBLOCK_SECTION_ID AND child.IBLOCK_SECTION_ID IS NOT NULL)\n\t\t\t\t\t"; } $this->connection->queryExecute($sql); $this->connection->queryExecute("\n\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\tSELECT {$columnForFileId}, {$columnForSize}, {$columnForVersion}, " . $this->getConcatFunction('child.ID', 'child.NAME') . ", 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID FROM b_iblock_element child\n\n\t\t\t\t\tINNER JOIN {$joinTable} props ON props.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tchild.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object do WHERE do.WEBDAV_ELEMENT_ID=child.ID)\n\n\t\t\t\t"); } else { if ($this->isMysql) { $sql = "\n\t\t\t\t\t\tINSERT IGNORE INTO b_disk_object (FILE_ID, SIZE, GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT PROP_FILE_EL.VALUE, PROP_SIZE_EL.VALUE, " . $sqlHelper->getIsNullFunction('PPROP_VERSION_G_EL.VALUE', 1) . ", child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_SIZE ON PROP_SIZE.IBLOCK_ID = child.IBLOCK_ID AND PROP_SIZE.CODE = 'WEBDAV_SIZE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_SIZE_EL ON PROP_SIZE_EL.IBLOCK_PROPERTY_ID = PROP_SIZE.ID AND PROP_SIZE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_FILE ON PROP_FILE.IBLOCK_ID = child.IBLOCK_ID AND PROP_FILE.CODE = 'FILE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_FILE_EL ON PROP_FILE_EL.IBLOCK_PROPERTY_ID = PROP_FILE.ID AND PROP_FILE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tLEFT JOIN b_iblock_property PROP_VERSION_G ON PROP_VERSION_G.IBLOCK_ID = child.IBLOCK_ID AND PROP_VERSION_G.CODE = 'WEBDAV_VERSION'\n\t\t\t\t\t\tLEFT JOIN b_iblock_element_property PPROP_VERSION_G_EL ON PPROP_VERSION_G_EL.IBLOCK_PROPERTY_ID = PROP_VERSION_G.ID AND PPROP_VERSION_G_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t"; } elseif ($this->isOracle || $this->isMssql) { $sql = "\n\t\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\t\tSELECT PROP_FILE_EL.VALUE, PROP_SIZE_EL.VALUE, " . $sqlHelper->getIsNullFunction('PPROP_VERSION_G_EL.VALUE', 1) . ", child.NAME, 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID FROM b_iblock_element child\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_SIZE ON PROP_SIZE.IBLOCK_ID = child.IBLOCK_ID AND PROP_SIZE.CODE = 'WEBDAV_SIZE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_SIZE_EL ON PROP_SIZE_EL.IBLOCK_PROPERTY_ID = PROP_SIZE.ID AND PROP_SIZE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tINNER JOIN b_iblock_property PROP_FILE ON PROP_FILE.IBLOCK_ID = child.IBLOCK_ID AND PROP_FILE.CODE = 'FILE'\n\t\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_FILE_EL ON PROP_FILE_EL.IBLOCK_PROPERTY_ID = PROP_FILE.ID AND PROP_FILE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tLEFT JOIN b_iblock_property PROP_VERSION_G ON PROP_VERSION_G.IBLOCK_ID = child.IBLOCK_ID AND PROP_VERSION_G.CODE = 'WEBDAV_VERSION'\n\t\t\t\t\t\tLEFT JOIN b_iblock_element_property PPROP_VERSION_G_EL ON PPROP_VERSION_G_EL.IBLOCK_PROPERTY_ID = PROP_VERSION_G.ID AND PPROP_VERSION_G_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\t\tWHERE child.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object WHERE NAME = child.NAME AND PARENT_ID = child.IBLOCK_SECTION_ID AND child.IBLOCK_SECTION_ID IS NOT NULL)\n\t\t\t\t\t"; } $this->connection->queryExecute($sql); $this->connection->queryExecute("\n\t\t\t\t\tINSERT INTO b_disk_object (FILE_ID, " . $this->sqlHelper->quote('SIZE') . ", GLOBAL_CONTENT_VERSION, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_ELEMENT_ID, WEBDAV_IBLOCK_ID)\n\t\t\t\t\tSELECT PROP_FILE_EL.VALUE, PROP_SIZE_EL.VALUE, " . $sqlHelper->getIsNullFunction('PPROP_VERSION_G_EL.VALUE', 1) . ", " . $this->getConcatFunction('child.ID', 'child.NAME') . ", 3, null, {$storageId}, " . $sqlHelper->getIsNullFunction('child.IBLOCK_SECTION_ID', $rootObjectId) . ", child.DATE_CREATE, " . $this->sqlHelper->getIsNullFunction('child.TIMESTAMP_X', 'child.DATE_CREATE') . ", " . $this->sqlHelper->getIsNullFunction('child.CREATED_BY', 0) . ", child.MODIFIED_BY, child.ID, child.ID, child.IBLOCK_ID FROM b_iblock_element child\n\n\t\t\t\t\tINNER JOIN b_iblock_property PROP_SIZE ON PROP_SIZE.IBLOCK_ID = child.IBLOCK_ID AND PROP_SIZE.CODE = 'WEBDAV_SIZE'\n\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_SIZE_EL ON PROP_SIZE_EL.IBLOCK_PROPERTY_ID = PROP_SIZE.ID AND PROP_SIZE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tINNER JOIN b_iblock_property PROP_FILE ON PROP_FILE.IBLOCK_ID = child.IBLOCK_ID AND PROP_FILE.CODE = 'FILE'\n\t\t\t\t\tINNER JOIN b_iblock_element_property PROP_FILE_EL ON PROP_FILE_EL.IBLOCK_PROPERTY_ID = PROP_FILE.ID AND PROP_FILE_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tLEFT JOIN b_iblock_property PROP_VERSION_G ON PROP_VERSION_G.IBLOCK_ID = child.IBLOCK_ID AND PROP_VERSION_G.CODE = 'WEBDAV_VERSION'\n\t\t\t\t\tLEFT JOIN b_iblock_element_property PPROP_VERSION_G_EL ON PPROP_VERSION_G_EL.IBLOCK_PROPERTY_ID = PROP_VERSION_G.ID AND PPROP_VERSION_G_EL.IBLOCK_ELEMENT_ID = child.ID\n\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tchild.IBLOCK_ID = {$iblockId} AND child.IBLOCK_SECTION_ID IS NULL\n\t\t\t\t\t\tAND NOT EXISTS(SELECT 'x' FROM b_disk_object do WHERE do.WEBDAV_ELEMENT_ID=child.ID)\n\n\t\t\t\t"); } }
private function getConflictRightsInSubTree($accessCode, $taskId) { $objectId = (int) $this->object->getId(); $accessCode = $this->sqlHelper->forSql($accessCode); $accessCodeForSql = $this->sqlHelper->forSql($accessCode); $taskId = (int) $taskId; $rights = $this->connection->query("\n\t\t\tSELECT r.OBJECT_ID, r.NEGATIVE, r.DOMAIN\n\t\t\tFROM b_disk_right r\n\t\t\t\tINNER JOIN b_disk_object_path p ON p.OBJECT_ID = r.OBJECT_ID\n\t\t\tWHERE\n\t\t\t\tp.PARENT_ID = {$objectId} AND\n\t\t\t\tr.ACCESS_CODE = '{$accessCodeForSql}' AND\n\t\t\t\tr.TASK_ID = {$taskId}\n\t\t")->fetchAll(); foreach ($rights as $i => $right) { $rights[$i]['ACCESS_CODE'] = $accessCode; $rights[$i]['TASK_ID'] = $taskId; } unset($right); return $rights; }