/// <summary>
        /// Delete an inventory folder
        /// </summary>
        /// <param name="folderID">Id of folder to delete</param>
        public void deleteInventoryFolder(UUID folderID)
        {
            using (SqlConnection connection = database.DatabaseConnection())
            {
                List <InventoryFolderBase> subFolders;
                using (SqlCommand command = new SqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID", connection))
                {
                    command.Parameters.Add(database.CreateParameter("@parentID", UUID.Zero));

                    AutoClosingSqlCommand autoCommand = new AutoClosingSqlCommand(command);

                    subFolders = getFolderHierarchy(folderID, autoCommand);
                }

                //Delete all sub-folders
                foreach (InventoryFolderBase f in subFolders)
                {
                    DeleteOneFolder(f.ID, connection);
                    DeleteItemsInFolder(f.ID, connection);
                }

                //Delete the actual row
                DeleteOneFolder(folderID, connection);
                DeleteItemsInFolder(folderID, connection);

                connection.Close();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Loads the estate settings.
        /// </summary>
        /// <param name="regionID">region ID.</param>
        /// <returns></returns>
        public EstateSettings LoadEstateSettings(UUID regionID)
        {
            EstateSettings es = new EstateSettings();

            string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = @RegionID";

            bool insertEstate = false;

            using (AutoClosingSqlCommand cmd = _Database.Query(sql))
            {
                cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID));

                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        foreach (string name in FieldList)
                        {
                            if (_FieldMap[name].GetValue(es) is bool)
                            {
                                int v = Convert.ToInt32(reader[name]);
                                if (v != 0)
                                {
                                    _FieldMap[name].SetValue(es, true);
                                }
                                else
                                {
                                    _FieldMap[name].SetValue(es, false);
                                }
                            }
                            else if (_FieldMap[name].GetValue(es) is UUID)
                            {
                                _FieldMap[name].SetValue(es, new UUID((Guid)reader[name]));  // uuid);
                            }
                            else
                            {
                                es.EstateID = Convert.ToUInt32(reader["EstateID"].ToString());
                            }
                        }
                    }
                    else
                    {
                        insertEstate = true;
                    }
                }
            }


            if (insertEstate)
            {
                List <string> names = new List <string>(FieldList);

                names.Remove("EstateID");

                sql = string.Format("insert into estate_settings ({0}) values ( @{1})", String.Join(",", names.ToArray()), String.Join(", @", names.ToArray()));

                //_Log.Debug("[DB ESTATE]: SQL: " + sql);
                using (SqlConnection connection = _Database.DatabaseConnection())
                {
                    using (SqlCommand insertCommand = connection.CreateCommand())
                    {
                        insertCommand.CommandText = sql + " SET @ID = SCOPE_IDENTITY()";

                        foreach (string name in names)
                        {
                            insertCommand.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es)));
                        }
                        SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int);
                        idParameter.Direction = ParameterDirection.Output;
                        insertCommand.Parameters.Add(idParameter);

                        insertCommand.ExecuteNonQuery();

                        es.EstateID = Convert.ToUInt32(idParameter.Value);
                    }
                }

                using (AutoClosingSqlCommand cmd = _Database.Query("INSERT INTO [estate_map] ([RegionID] ,[EstateID]) VALUES (@RegionID, @EstateID)"))
                {
                    cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID));
                    cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID));
                    // This will throw on dupe key
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception e)
                    {
                        _Log.DebugFormat("[ESTATE DB]: Error inserting regionID and EstateID in estate_map: {0}", e);
                    }
                }

                // Munge and transfer the ban list

                sql = string.Format("insert into estateban select {0}, bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = @UUID", es.EstateID);
                using (AutoClosingSqlCommand cmd = _Database.Query(sql))
                {
                    cmd.Parameters.Add(_Database.CreateParameter("@UUID", regionID));
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception)
                    {
                        _Log.Debug("[ESTATE DB]: Error setting up estateban from regionban");
                    }
                }

                //TODO check if this is needed??
                es.Save();
            }

            LoadBanList(es);

            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");

            //Set event
            es.OnSave += StoreEstateSettings;
            return(es);
        }