Exemplo n.º 1
0
 void ChangePassword()
 {
     logger.Info("Отправляем новый пароль на сервер...");
     if (Session.IsSaasConnection)
     {
         ISaaSService svc = Session.GetSaaSService();
         if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text))
         {
             logger.Error("Ошибка установки пароля!");
         }
         else
         {
             logger.Info("Пароль изменен. Ok");
         }
     }
     else
     {
         string sql;
         try {
             QSMain.CheckConnectionAlive();
             sql = "SET PASSWORD FOR @login = PASSWORD(@password)";
             MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
             cmd.Parameters.AddWithValue("@login", entryLogin.Text);
             cmd.Parameters.AddWithValue("@password", entryPassword.Text);
             cmd.ExecuteNonQuery();
             cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)";
             cmd.ExecuteNonQuery();
             logger.Info("Пароль изменен. Ok");
         } catch (Exception ex) {
             logger.Error(ex, "Ошибка установки пароля!");
             QSMain.ErrorMessage(this, ex);
         }
     }
 }
Exemplo n.º 2
0
        public bool TestUserExistByLogin(bool CreateNotExist)
        {
            logger.Info("Проверка наличия пользователя в базе...");
            if (loadedInConstructor)
            {
                logger.Warn("Информация о пользователе загружена в момент входа, это старый метод, его вызов не требуется.");
                return(true);
            }
            try {
                QSMain.CheckConnectionAlive();

                bool   Exist = false;
                string sql   = "SELECT COUNT(*) AS cnt FROM users WHERE login = @login";

                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", login);

                using (var rdr = cmd.ExecuteReader()) {
                    rdr.Read();
                    Exist = (rdr ["cnt"].ToString() != "0");
                }

                if (CreateNotExist && !Exist)
                {
                    CreateUserRow();
                    Exist = true;
                }
                return(Exist);
            } catch (Exception ex) {
                logger.ErrorException("Ошибка проверки пользователя!", ex);
                return(false);
            }
        }
Exemplo n.º 3
0
 /// <summary>Заполняет комбобокс уникальными значениями поля
 /// </summary>
 public static void ComboFillUniqueValue(ComboBox combo, string tablename, string fieldname, bool SetDefault = true)
 {
     ((ListStore)combo.Model).Clear();
     logger.Info("Запрос всех значений {0}.{1} ...", tablename, fieldname);
     try
     {
         QSMain.CheckConnectionAlive();
         int       count = 0;
         string    sql   = "SELECT DISTINCT " + fieldname + " FROM " + tablename;
         DbCommand cmd   = QSMain.ConnectionDB.CreateCommand();
         cmd.CommandText = sql;
         using (DbDataReader rdr = cmd.ExecuteReader())
         {
             while (rdr.Read())
             {
                 if (rdr[0] != DBNull.Value)
                 {
                     combo.AppendText(rdr.GetString(0));
                     count++;
                 }
             }
         }
         if (SetDefault && count == 1)
         {
             combo.Active = 0;
         }
         logger.Info("Ok");
     }
     catch (Exception ex)
     {
         logger.Error(ex, "Ошибка получения списка уникальных значений!");
     }
 }
Exemplo n.º 4
0
        public void UpdateUserInfoByLogin()
        {
            logger.Info("Чтение информации о пользователе...");
            if (loadedInConstructor)
            {
                logger.Warn("Информация о пользовтеле загружена в момент входа, вызов функции не требуется при старте программы. Если нужно обновить информацию используйте метод LoadUserInfo");
                return;
            }
            try {
                string sql = "SELECT * FROM users WHERE login = @login";
                QSMain.CheckConnectionAlive();
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", login);
                using (var rdr = cmd.ExecuteReader()) {
                    rdr.Read();

                    Name  = rdr ["name"].ToString();
                    Id    = rdr.GetInt32("id");
                    Admin = rdr.GetBoolean(QSMain.AdminFieldName);

                    Permissions = new Dictionary <string, bool> ();
                    foreach (KeyValuePair <string, UserPermission> Right in QSMain.ProjectPermission)
                    {
                        string FieldName = Right.Value.DataBaseName;
                        Permissions.Add(Right.Key, rdr.GetBoolean(FieldName));
                    }
                }
                Email = tryGetUserEmail();
            } catch (Exception ex) {
                logger.ErrorException("Ошибка чтения информации о пользователе!", ex);
            }
        }
Exemplo n.º 5
0
 protected void OnDestroyed(object sender, EventArgs e)
 {
     if (RefChanged)
     {
         QSMain.OnReferenceUpdated(TableRef);
     }
 }
Exemplo n.º 6
0
 protected void OnButtonOkClicked(object sender, EventArgs e)
 {
     NewPassword = entryPassword.Text;
     if (WorkMode == Mode.Manual)
     {
         return;
     }
     if (Session.IsSaasConnection)
     {
         ISaaSService svc = Session.GetSaaSService();
         if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword))
         {
             logger.Error("Ошибка установки пароля!");
             return;
         }
         logger.Info("Пароль изменен.");
     }
     else
     {
         logger.Info("Отправляем новый пароль на сервер...");
         string sql;
         sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')";
         try {
             QSMain.CheckConnectionAlive();
             DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
             cmd.CommandText = sql;
             cmd.ExecuteNonQuery();
             logger.Info("Пароль изменен. Ok");
         } catch (Exception ex) {
             logger.Error(ex, "Ошибка установки пароля!");
             QSMain.ErrorMessage(this, ex);
         }
     }
 }
Exemplo n.º 7
0
        protected void OnRemoveActionActivated(object sender, System.EventArgs e)
        {
            TreeIter iter;

            treeviewref.Selection.GetSelected(out iter);
            SelectedID = (int)filter.GetValue(iter, 0);
            bool result;

            if (QSMain.IsOrmDeletionConfigered)
            {
                result = QSMain.OnOrmDeletion(TableRef, SelectedID);
            }
            else
            {
                Delete winDelete = new Delete();
                result = winDelete.RunDeletion(TableRef, SelectedID);
                winDelete.Destroy();
            }

            if (result)
            {
                UpdateList();
                RefChanged = true;
            }
        }
Exemplo n.º 8
0
        /// <summary>Заполняет комбобокс уникальными значениями поля
        /// </summary>
        public static ListStore CreateWithUniqueValue(string tablename, string fieldname)
        {
            logger.Info("Запрос всех значений {0}.{1} ...", tablename, fieldname);
            ListStore list = new ListStore(typeof(string));

            try
            {
                string sql = "SELECT DISTINCT " + fieldname + " FROM " + tablename;
                QSMain.CheckConnectionAlive();
                DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                cmd.CommandText = sql;
                using (DbDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        if (rdr[0] != DBNull.Value)
                        {
                            list.AppendValues(rdr.GetString(0));
                        }
                    }
                }
                logger.Info("Ok");
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Ошибка получения списка уникальных значений!");
            }
            return(list);
        }
Exemplo n.º 9
0
        protected void OnButtonOkClicked(object sender, EventArgs e)
        {
            NewPassword = entryPassword.Text;
            if (WorkMode == Mode.Manual)
            {
                return;
            }
            if (Session.IsSaasConnection)
            {
                ISaaSService svc = Session.GetSaaSService();
                if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword))
                {
                    logger.Error("Ошибка установки пароля!");
                    return;
                }
                logger.Info("Пароль изменен.");
            }
            else
            {
                logger.Info("Отправляем новый пароль на сервер...");
                string sql;

                try {
                    var reg = new Regex("password=(.+?)(;|$)");
                    QSMain.CheckConnectionAlive();
                    DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = "SELECT version();";
                    var version = (string)cmd.ExecuteScalar();
                    logger.Debug("Server version: " + version);
                    if (version.EndsWith("-MariaDB"))
                    {
                        sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')";
                    }
                    else if (Version.Parse(version) >= new Version(8, 0, 13))
                    {
                        var    match       = reg.Match(QSMain.ConnectionString);
                        string oldPassword = match.Success ? match.Groups[1].Value : null;
                        sql = $"SET PASSWORD='******' REPLACE '{oldPassword}';";
                    }
                    else
                    {
                        sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')";
                    }

                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                    logger.Info("Пароль изменен. Ok");

                    //Заменяем пароль с текущей строке одключения, для того чтобы при переподключении не было ошибок
                    //и чтобы при смене пароля еще раз был текущий пароль.
                    QSMain.ConnectionString = reg.Replace(QSMain.ConnectionString, $"password={entryPassword.Text};");
                } catch (Exception ex) {
                    logger.Error(ex, "Ошибка установки пароля!");
                    QSMain.ErrorMessage(this, ex);
                }
            }
        }
Exemplo n.º 10
0
 public static void SubscribeToUnhadledExceptions()
 {
     AppDomain.CurrentDomain.UnhandledException += delegate(object sender, UnhandledExceptionEventArgs e) {
         logger.Fatal((Exception)e.ExceptionObject, "Поймано необработаное исключение в Application Domain.");
         QSMain.ErrorMessage((Exception)e.ExceptionObject);
     };
     GLib.ExceptionManager.UnhandledException += delegate(GLib.UnhandledExceptionArgs a) {
         logger.Fatal((Exception)a.ExceptionObject, "Поймано необработаное исключение в GTK.");
         QSMain.ErrorMessage((Exception)a.ExceptionObject);
     };
 }
Exemplo n.º 11
0
        protected void OnButtonSaveOrdinalClicked(object sender, EventArgs e)
        {
            int[] Numbers = new int[RefListStore.IterNChildren()];
            int   n       = 0;

            foreach (object[] row in RefListStore)
            {
                Numbers[n] = (int)row[OrdinalColumn];
                n++;
            }
            Array.Sort(Numbers);

            string        sql = String.Format("UPDATE {0} SET {1} = @ord WHERE id = @id", TableRef, _OrdinalField);
            DbCommand     cmd;
            DbTransaction trans = QSMain.ConnectionDB.BeginTransaction();

            QSMain.CheckConnectionAlive();
            try
            {
                n   = 0;
                cmd = QSMain.ConnectionDB.CreateCommand();
                DbParameter paramId = cmd.CreateParameter();
                paramId.ParameterName = "@id";
                cmd.Parameters.Add(paramId);
                DbParameter paramOrd = cmd.CreateParameter();
                paramOrd.ParameterName = "@ord";
                cmd.Parameters.Add(paramOrd);
                cmd.CommandText = sql;
                cmd.Prepare();

                foreach (object[] row in RefListStore)
                {
                    if (Numbers[n] != (int)row[OrdinalColumn])
                    {
                        paramId.Value  = row[0];
                        paramOrd.Value = Numbers[n];
                        cmd.ExecuteNonQuery();
                    }
                    n++;
                }
                trans.Commit();
                UpdateList();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                logger.Error(ex, "Ошибка записи последовательности в {0}!", nameRef);
                QSMain.ErrorMessage(this, ex);
            }
        }
Exemplo n.º 12
0
        void ChangePassword()
        {
            logger.Info("Отправляем новый пароль на сервер...");
            if (Session.IsSaasConnection)
            {
                ISaaSService svc = Session.GetSaaSService();
                if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text))
                {
                    logger.Error("Ошибка установки пароля!");
                }
                else
                {
                    logger.Info("Пароль изменен. Ok");
                }
            }
            else
            {
                string sql;
                try {
                    QSMain.CheckConnectionAlive();
                    sql = "SELECT version();";
                    MySqlCommand cmd     = new MySqlCommand(sql, QSMain.connectionDB);
                    var          version = (string)cmd.ExecuteScalar();
                    logger.Debug("Server version: " + version);
                    if (!version.EndsWith("-MariaDB") && Version.Parse(version) >= new Version(8, 0, 13))
                    {
                        cmd.CommandText = "ALTER USER @login IDENTIFIED BY @password;";
                        cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                        cmd.Parameters.AddWithValue("@password", entryPassword.Text);
                        cmd.ExecuteNonQuery();
                    }
                    else
                    {
                        cmd.CommandText = "SET PASSWORD FOR @login = PASSWORD(@password)";
                        cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                        cmd.Parameters.AddWithValue("@password", entryPassword.Text);
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)";
                        cmd.ExecuteNonQuery();
                    }

                    logger.Info("Пароль изменен. Ok");
                } catch (Exception ex) {
                    logger.Error(ex, "Ошибка установки пароля!");
                    QSMain.ErrorMessage(this, ex);
                }
            }
        }
Exemplo n.º 13
0
        bool RenameLogin()
        {
            logger.Info("Переименование учетной записи на сервере...");
            try {
                QSMain.CheckConnectionAlive();
                //Проверка существует ли логин
                string       sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login";
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                try {
                    if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                    {
                        string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " +
                                         "Переименование невозможно.";
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Error,
                                                             ButtonsType.Ok,
                                                             Message);
                        md.Destroy();
                        return(false);
                    }
                } catch (MySqlException ex) {
                    if (ex.Number == 1045)
                    {
                        logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую.");
                    }
                    else
                    {
                        logger.Error(ex, "Ошибка чтения таблицы пользователей!");
                        QSMain.ErrorMessage(this, ex);
                        return(false);
                    }
                }

                //Переименование пользователя.
                sql = "RENAME USER @old_login TO @new_login, @old_login @'localhost' TO @new_login @'localhost'";
                cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@old_login", OriginLogin);
                cmd.Parameters.AddWithValue("@new_login", entryLogin.Text);
                cmd.ExecuteNonQuery();
                logger.Info("Ok");
                return(true);
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка переименования пользователя!");
                QSMain.ErrorMessage(this, ex);
                return(false);
            }
        }
Exemplo n.º 14
0
        protected void UpdateList()
        {
            logger.Info("Получаем таблицу справочника " + nameRef + "...");
            entryFilter.Text = "";
            QSMain.CheckConnectionAlive();
            try
            {
                string    sql = SqlSelect.Replace("@tablename", TableRef);
                DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                cmd.CommandText = sql;

                using (DbDataReader rdr = cmd.ExecuteReader())
                {
                    RefListStore.Clear();
                    object[] Values = new object[RefListStore.NColumns];
                    while (rdr.Read())
                    {
                        Values[0] = rdr.GetInt32(0);
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        for (int i = 1; i < Columns.Count; i++)
                        {
                            Values[i] = String.Format(Columns[i].DisplayFormat, Fields);
                        }
                        if (_OrdinalField != "")
                        {
                            Values[OrdinalColumn] = rdr.GetInt32(rdr.GetOrdinal(_OrdinalField));
                        }
                        RefListStore.AppendValues(Values);
                    }
                }
                logger.Info("Ok");
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Ошибка получения таблицы!");
                QSMain.ErrorMessage(this, ex);
            }
            OnTreeviewrefCursorChanged((object)treeviewref, EventArgs.Empty);
            TestOrdinalChanged();
        }
Exemplo n.º 15
0
        void UpdateUsers()
        {
            if (!QSMain.TestConnection())
            {
                return;
            }
            QSMain.CheckConnectionAlive();
            logger.Info("Получаем таблицу пользователей...");

            string sql = "SELECT * FROM users ";

            if (!chkShowInactive.Active)
            {
                sql += " WHERE deactivated = 0";
            }
            MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);

            MySqlDataReader rdr = cmd.ExecuteReader();

            UsersListStore.Clear();
            while (rdr.Read())
            {
                bool deactivated = false;
                try {
                    deactivated = DBWorks.GetBoolean(rdr, "deactivated", false);
                } catch {
                    logger.Warn("В базе отсутствует поле deactivated!");
                }
                UsersListStore.AppendValues(int.Parse(rdr ["id"].ToString()),
                                            rdr ["login"].ToString(),
                                            rdr ["name"].ToString(),
                                            (bool)rdr ["admin"],
                                            deactivated,
                                            deactivated ? "grey" : "black");
            }
            rdr.Close();

            logger.Info("Ok");

            OnTreeviewUsersCursorChanged(null, null);
        }
Exemplo n.º 16
0
        public bool StartProgressBar(Thread thread, int seconds)
        {
            progressbar1.Adjustment.Upper = seconds;
            double percentInSecond = 1.0 / 20.0;

            for (int i = 0; i < seconds * 20; i++)
            {
                if (!thread.IsAlive)
                {
                    return(false);
                }
                progressbar1.Adjustment.Value += percentInSecond;
                Thread.Sleep(50);
                QSMain.WaitRedraw();
            }
            if (thread.IsAlive)
            {
                thread.Abort();
            }
            logger.Warn("Таймаут ожидания потока с проверкой...");
            return(true);
        }
Exemplo n.º 17
0
        protected void OnButtonDeleteClicked(object sender, EventArgs e)
        {
            TreeIter iter;

            treeviewUsers.Selection.GetSelected(out iter);
            int    itemid    = (int)UsersListStore.GetValue(iter, 0);
            string loginname = UsersListStore.GetValue(iter, 1).ToString();
            bool   result;

            if (QSMain.IsOrmDeletionConfigered)
            {
                result = QSMain.OnOrmDeletion("users", itemid);
            }
            else
            {
                Delete winDel = new Delete();
                result = winDel.RunDeletion("users", itemid);
                winDel.Destroy();
            }

            if (result)
            {
                if (QSSaaS.Session.IsSaasConnection)
                {
                    logger.Info("Удаляем пользователя в облаке...");
                    QSSaaS.ISaaSService svc = QSSaaS.Session.GetSaaSService();

                    if (!svc.changeBaseAccessFromProgram(QSSaaS.Session.SessionId, loginname, QSSaaS.Session.SaasBaseName, false))
                    {
                        logger.Error("Ошибка удаления доступа к базе на сервере SaaS.");
                    }

                    if (svc.UserAccessBaseCount(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname) == 0)
                    {
                        if (MessageDialogWorks.RunQuestionDialog($"У пользователя '{loginname}' на сервисе QS:Облако больше не осталось баз данных, к которым он имеет доступ. Удалить пользователя с QS:Облако тоже?"))
                        {
                            if (!svc.DeleteCloudUser(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname))
                            {
                                var text = "Удаления пользователя с QS:Облако не произошло.";
                                logger.Error(text);
                                MessageDialogWorks.RunErrorDialog(text);
                            }
                        }
                    }
                }
                else
                {
                    logger.Info("Удаляем пользователя MySQL...");
                    string sql;
                    sql = "DROP USER @login, @login @'localhost'";
                    try {
                        QSMain.CheckConnectionAlive();
                        MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                        cmd.Parameters.AddWithValue("@login", loginname);
                        cmd.ExecuteNonQuery();
                        logger.Info("Пользователь удалён. Ok");

                        if (QSMain.User.Id == itemid)
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning, ButtonsType.Close,
                                                                 "Был удален пользователь, под которым Вы подключились к базе данных, чтобы недопустить некорректных операций программа закроется. Зайдите в программу от имени другого пользователя.");
                            md.Run();
                            md.Destroy();
                            Environment.Exit(0);
                        }
                    } catch (Exception ex) {
                        logger.Error(ex, "Ошибка удаления пользователя!");
                        QSMain.ErrorMessage(this, ex);
                    }
                }
            }

            UpdateUsers();
        }
Exemplo n.º 18
0
        int FillObjects(string Table, TreeIter root, TableInfo.Params ParametersIn)
        {
            TreeIter     DeleteIter, ClearIter, GroupIter, ItemIter;
            int          Totalcount = 0;
            int          DelCount   = 0;
            int          ClearCount = 0;
            int          GroupCount;
            DbCommand    cmd;
            DbDataReader rdr;

            QSMain.CheckConnectionAlive();
            logger.Debug("Поиск зависимостей для таблицы {0}", Table);
            if (!QSMain.ProjectTables.ContainsKey(Table))
            {
                ErrorString = "Нет описания для таблицы " + Table;
                logger.Error(ErrorString);
                ErrorHappens = true;
                return(0);
            }
            if (QSMain.ProjectTables[Table].DeleteItems.Count > 0)
            {
                if (!ObjectsTreeStore.IterIsValid(root))
                {
                    DeleteIter = ObjectsTreeStore.AppendNode();
                }
                else
                {
                    DeleteIter = ObjectsTreeStore.AppendNode(root);
                }
                foreach (KeyValuePair <string, TableInfo.DeleteDependenceItem> pair in QSMain.ProjectTables[Table].DeleteItems)
                {
                    GroupCount = 0;
                    if (!QSMain.ProjectTables.ContainsKey(pair.Key))
                    {
                        ErrorString = String.Format("Зависимость удаления у таблицы {1} ссылается на таблицу {0} описания для которой нет.", pair.Key, Table);
                        logger.Error(ErrorString);
                        ErrorHappens = true;
                        return(0);
                    }
                    string sql = QSMain.ProjectTables[pair.Key].SqlSelect + pair.Value.sqlwhere;
                    cmd             = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    AddParameters(cmd, pair.Value.SqlParam, ParametersIn);

                    rdr = cmd.ExecuteReader();
                    if (!rdr.HasRows)
                    {
                        rdr.Close();
                        continue;
                    }
                    GroupIter = ObjectsTreeStore.AppendNode(DeleteIter);
                    int IndexIntParam = 0;
                    int IndexStrParam = 0;
                    if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt != "")
                    {
                        IndexIntParam = rdr.GetOrdinal(QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt);
                    }
                    if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr != "")
                    {
                        IndexStrParam = rdr.GetOrdinal(QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr);
                    }
                    List <object[]> ReadedData = new List <object[]>();
                    while (rdr.Read())
                    {
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        ReadedData.Add(Fields);
                    }
                    rdr.Close();

                    foreach (object[] row in ReadedData)
                    {
                        ItemIter = ObjectsTreeStore.AppendValues(GroupIter, String.Format(QSMain.ProjectTables[pair.Key].DisplayString, row));
                        if (QSMain.ProjectTables[pair.Key].DeleteItems.Count > 0 || QSMain.ProjectTables[pair.Key].ClearItems.Count > 0)
                        {
                            TableInfo.Params OutParam = new TableInfo.Params();
                            if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt != "")
                            {
                                OutParam.ParamInt = Convert.ToInt32(row[IndexIntParam]);
                            }
                            if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr != "")
                            {
                                OutParam.ParamStr = row[IndexStrParam].ToString();
                            }
                            Totalcount += FillObjects(pair.Key, ItemIter, OutParam);
                        }
                        GroupCount++;
                        Totalcount++;
                        DelCount++;
                    }
                    ObjectsTreeStore.SetValues(GroupIter, QSMain.ProjectTables[pair.Key].ObjectsName + "(" + GroupCount.ToString() + ")");
                }
                if (DelCount > 0)
                {
                    ObjectsTreeStore.SetValues(DeleteIter, String.Format("Будет удалено ({0}/{1}) объектов:", DelCount, Totalcount));
                }
                else
                {
                    ObjectsTreeStore.Remove(ref DeleteIter);
                }
            }

            if (QSMain.ProjectTables[Table].ClearItems.Count > 0)
            {
                if (!ObjectsTreeStore.IterIsValid(root))
                {
                    ClearIter = ObjectsTreeStore.AppendNode();
                }
                else
                {
                    ClearIter = ObjectsTreeStore.AppendNode(root);
                }
                foreach (KeyValuePair <string, TableInfo.ClearDependenceItem> pair in QSMain.ProjectTables[Table].ClearItems)
                {
                    GroupCount = 0;
                    if (!QSMain.ProjectTables.ContainsKey(pair.Key))
                    {
                        ErrorString = String.Format("Зависимость очистки у таблицы {1} ссылается на таблицу {0} описания для которой нет.", pair.Key, Table);
                        logger.Error(ErrorString);
                        ErrorHappens = true;
                        return(0);
                    }
                    string sql = QSMain.ProjectTables[pair.Key].SqlSelect + pair.Value.sqlwhere;
                    cmd             = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    AddParameters(cmd, pair.Value.SqlParam, ParametersIn);

                    rdr = cmd.ExecuteReader();
                    if (!rdr.HasRows)
                    {
                        rdr.Close();
                        continue;
                    }
                    GroupIter = ObjectsTreeStore.AppendNode(ClearIter);

                    while (rdr.Read())
                    {
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        ItemIter = ObjectsTreeStore.AppendValues(GroupIter, String.Format(QSMain.ProjectTables[pair.Key].DisplayString, Fields));
                        GroupCount++;
                        Totalcount++;
                        ClearCount++;
                    }
                    ObjectsTreeStore.SetValues(GroupIter, QSMain.ProjectTables[pair.Key].ObjectsName + "(" + GroupCount.ToString() + ")");
                    rdr.Close();
                }
                if (ClearCount > 0)
                {
                    ObjectsTreeStore.SetValues(ClearIter, String.Format("Будет очищено ссылок у {0} объектов:", ClearCount));
                }
                else
                {
                    ObjectsTreeStore.Remove(ref ClearIter);
                }
            }
            return(Totalcount);
        }
Exemplo n.º 19
0
 protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e)
 {
     switch (e.ReferenceTable) {
     case "doc_types":
             ComboWorks.ComboFillReference (comboDocType, "doc_types", ComboWorks.ListMode.OnlyItems);
     break;
     }
 }
Exemplo n.º 20
0
        /// <summary>Заполняет комбобокс элементами справочника.
        /// <param name="listmode">Режимы списка:
        /// 0 - Только элементы;
        /// 1 - Есть пункт "Все" с кодом 0;
        /// 2 - Есть пункт "Нет" с кодом -1;</param> </summary>
        public static void ComboFillReference(ComboBox combo, string TableRef, ListMode listmode, bool SetDefault = true, string OrderBy = "")
        {
            combo.Clear();
            CellRendererText text  = new CellRendererText();
            ListStore        store = new ListStore(typeof(string), typeof(int));

            combo.Model = store;
            combo.PackStart(text, false);
            combo.AddAttribute(text, "text", 0);
            logger.Info("Запрос справочника " + TableRef + "...");
            try
            {
                QSMain.CheckConnectionAlive();
                int    count = 0;
                string sql   = String.Format("SELECT id, name FROM {0} ", TableRef);
                if (OrderBy != "")
                {
                    sql += "ORDER BY " + OrderBy;
                }
                DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                cmd.CommandText = sql;
                using (DbDataReader rdr = cmd.ExecuteReader())
                {
                    switch (listmode)
                    {
                    case ListMode.WithAll:                     //Все
                        store.AppendValues("Все", 0);
                        break;

                    case ListMode.WithNo:                     //Нет
                        store.AppendValues("нет", -1);
                        break;

                    default:
                        break;
                    }

                    while (rdr.Read())
                    {
                        store.AppendValues(rdr["name"].ToString(), int.Parse(rdr["id"].ToString()));
                        count++;
                    }
                }
                if (SetDefault && listmode != ListMode.OnlyItems)
                {
                    combo.Active = 0;
                }
                if (SetDefault && listmode == ListMode.WithNo && count == 1)
                {
                    combo.Active = 1;
                }
                if (SetDefault && listmode == ListMode.OnlyItems && count == 1)
                {
                    combo.Active = 0;
                }
                logger.Info("Ok");
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Ошибка получения данных справочника!");
            }
        }
Exemplo n.º 21
0
        void on_editnode_response(object obj, ResponseArgs args)
        {
            if (args.ResponseId == ResponseType.Ok)
            {
                logger.Info("Запись " + nameNode + "...");
                string sql, InsertDescriptString, UpdateDescriptString;
                if (DescriptionField)
                {
                    if (ParentFieldName == "")
                    {
                        InsertDescriptString = " (name, description) VALUES (@name, @descript)";
                    }
                    else
                    {
                        InsertDescriptString = " (name, description, " + ParentFieldName + ") VALUES (@name, @descript, @parent)";
                    }
                    UpdateDescriptString = ", description = @descript ";
                }
                else
                {
                    if (ParentFieldName == "")
                    {
                        InsertDescriptString = " (name) VALUES (@name)";
                    }
                    else
                    {
                        InsertDescriptString = " (name, " + ParentFieldName + ") VALUES (@name, @parent)";
                    }
                    UpdateDescriptString = "";
                }
                if (NewNode)
                {
                    sql = "INSERT INTO " + TableRef + InsertDescriptString;
                }
                else
                {
                    sql = "UPDATE " + TableRef + " SET name = @name " + UpdateDescriptString +
                          "WHERE id = @id";
                }
                QSMain.CheckConnectionAlive();
                try
                {
                    DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;

                    DbParameter param = cmd.CreateParameter();
                    param.ParameterName = "@id";
                    param.Value         = SelectedID;
                    cmd.Parameters.Add(param);

                    param = cmd.CreateParameter();
                    param.ParameterName = "@name";
                    param.Value         = inputNameEntry.Text;
                    cmd.Parameters.Add(param);

                    if (DescriptionField)
                    {
                        param = cmd.CreateParameter();
                        param.ParameterName = "@descript";
                        param.Value         = inputDiscriptionEntry.Text;
                        cmd.Parameters.Add(param);
                    }
                    if (ParentFieldName != "")
                    {
                        param = cmd.CreateParameter();
                        param.ParameterName = "@parent";
                        param.Value         = ParentId;
                        cmd.Parameters.Add(param);
                    }
                    cmd.ExecuteNonQuery();

                    if (NewNode && OrdinalField != "")
                    {
                        cmd             = QSMain.ConnectionDB.CreateCommand();
                        cmd.CommandText = @"select last_insert_rowid()";
                        int ItemId = Convert.ToInt32(cmd.ExecuteScalar());

                        cmd                 = QSMain.ConnectionDB.CreateCommand();
                        cmd.CommandText     = String.Format("UPDATE {0} SET {1} = @id WHERE id = @id", TableRef, OrdinalField);
                        param               = cmd.CreateParameter();
                        param.ParameterName = "@id";
                        param.Value         = ItemId;
                        cmd.Parameters.Add(param);

                        cmd.ExecuteNonQuery();
                    }

                    logger.Info("Ok");
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка записи {0}!", nameNode);
                    QSMain.ErrorMessage(this, ex);
                }
            }
        }
Exemplo n.º 22
0
        /// <summary>Заполняет комбобокс любыми данными из базы.
        /// <param name="listmode">Режимы списка:
        /// 0 - Только элементы;
        /// 1 - Есть пункт "Все" с кодом 0;
        /// 2 - Есть пункт "Нет" с кодом -1;</param> </summary>
        public static void ComboFillUniversal(ComboBox combo, string SqlSelect, string DisplayString, System.Data.IDataParameter[] Parameters, int KeyField, ListMode listmode, bool WithDBValues = false)
        {
            combo.Clear();
            CellRendererText text = new CellRendererText();
            ListStore        store;

            if (WithDBValues)
            {
                store = new ListStore(typeof(string), typeof(int), typeof(object[]));
            }
            else
            {
                store = new ListStore(typeof(string), typeof(int));
            }
            combo.Model = store;
            combo.PackStart(text, false);
            combo.AddAttribute(text, "text", 0);
            logger.Info("Запрос элементов комбобокс...");
            try
            {
                QSMain.CheckConnectionAlive();
                int       count = 0;
                DbCommand cmd   = QSMain.ConnectionDB.CreateCommand();
                cmd.CommandText = SqlSelect;
                if (Parameters != null)
                {
                    cmd.Parameters.AddRange(Parameters);
                }
                using (DbDataReader rdr = cmd.ExecuteReader())
                {
                    switch (listmode)
                    {
                    case ListMode.WithAll:                             //Все
                        store.AppendValues("Все", 0);
                        break;

                    case ListMode.WithNo:                             //Нет
                        store.AppendValues("нет", -1);
                        break;

                    default:
                        break;
                    }

                    while (rdr.Read())
                    {
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        if (WithDBValues)
                        {
                            store.AppendValues(String.Format(DisplayString, Fields),
                                               Convert.ToInt32(Fields[KeyField]),
                                               Fields);
                        }
                        else
                        {
                            store.AppendValues(String.Format(DisplayString, Fields),
                                               Convert.ToInt32(Fields[KeyField]));
                        }
                        count++;
                    }
                }
                if (listmode == ListMode.WithNo && count == 1)
                {
                    combo.Active = 1;
                }
                if (listmode == ListMode.OnlyItems && count == 1)
                {
                    combo.Active = 0;
                }
                logger.Info("Ok");
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Ошибка получения данных для комбобокс!");
            }
        }
Exemplo n.º 23
0
        bool CreateLogin()
        {
            logger.Info("Создание учетной записи на сервере...");

            try {
                //Проверка существует ли логин
                string sql = "SELECT COUNT(*) FROM users WHERE login = @login";
                QSMain.CheckConnectionAlive();
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                {
                    string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " +
                                     "Создание второго пользователя с таким же логином невозможно.";
                    MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                         MessageType.Warning,
                                                         ButtonsType.Ok,
                                                         Message);
                    md.Run();
                    md.Destroy();
                    return(false);
                }

                sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login";
                cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                try {
                    if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                    {
                        string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " +
                                         "Если он использовался для доступа к другим базам, может возникнуть путаница. " +
                                         "Использовать этот логин?";
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Warning,
                                                             ButtonsType.YesNo,
                                                             Message);
                        bool result = (ResponseType)md.Run() == ResponseType.Yes;
                        md.Destroy();
                        return(result);
                    }
                } catch (MySqlException ex) {
                    if (ex.Number == 1045)
                    {
                        logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую.");
                    }
                    else
                    {
                        return(false);
                    }
                }
                //Создание пользователя.
                sql = "CREATE USER @login IDENTIFIED BY @password";
                cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                cmd.Parameters.AddWithValue("@password", entryPassword.Text);
                cmd.ExecuteNonQuery();
                cmd.CommandText = "CREATE USER @login @'localhost' IDENTIFIED BY @password";
                cmd.ExecuteNonQuery();

                logger.Info("Ok");
                return(true);
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка создания пользователя!");
                QSMain.ErrorMessage(this, ex);
                return(false);
            }
        }
Exemplo n.º 24
0
 protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e)
 {
     switch (e.ReferenceTable) {
     case "place_types":
         ComboWorks.ComboFillReference (comboPlaceType, "place_types", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboContractPlaceT, "place_types", ComboWorks.ListMode.WithAll);
         break;
     case "organizations":
         ComboWorks.ComboFillReference (comboPlaceOrg, "organizations", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboContractOrg, "organizations", ComboWorks.ListMode.WithAll);
         break;
     case "contract_category":
         ComboWorks.ComboFillReference (comboContractCategory, "contract_category", ComboWorks.ListMode.WithAll);
         break;
     }
 }
Exemplo n.º 25
0
        private void DeleteObjects(string Table, TableInfo.Params ParametersIn)
        {
            DbCommand    cmd;
            DbDataReader rdr;
            string       sql;

            if (!QSMain.ProjectTables.ContainsKey(Table))
            {
                ErrorString = "Нет описания для таблицы " + Table;
                logger.Error(ErrorString);
                ErrorHappens = true;
                return;
            }
            QSMain.CheckConnectionAlive();
            if (QSMain.ProjectTables[Table].DeleteItems.Count > 0)
            {
                foreach (KeyValuePair <string, TableInfo.DeleteDependenceItem> pair in QSMain.ProjectTables[Table].DeleteItems)
                {
                    if (QSMain.ProjectTables[pair.Key].DeleteItems.Count > 0 || QSMain.ProjectTables[pair.Key].ClearItems.Count > 0)
                    {
                        sql             = "SELECT * FROM " + pair.Key + " " + pair.Value.sqlwhere;
                        cmd             = QSMain.ConnectionDB.CreateCommand();
                        cmd.CommandText = sql;
                        AddParameters(cmd, pair.Value.SqlParam, ParametersIn);
                        rdr = cmd.ExecuteReader();
                        List <TableInfo.Params> ReadedData = new List <TableInfo.Params>();
                        string IntFieldName = QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt;
                        string StrFieldName = QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr;
                        while (rdr.Read())
                        {
                            TableInfo.Params OutParam = new TableInfo.Params();
                            if (IntFieldName != "")
                            {
                                OutParam.ParamInt = rdr.GetInt32(rdr.GetOrdinal(IntFieldName));
                            }
                            if (StrFieldName != "")
                            {
                                OutParam.ParamStr = rdr.GetString(rdr.GetOrdinal(StrFieldName));
                            }
                            ReadedData.Add(OutParam);
                        }
                        rdr.Close();

                        foreach (TableInfo.Params row in ReadedData)
                        {
                            DeleteObjects(pair.Key, row);
                        }
                    }

                    sql             = "DELETE FROM " + pair.Key + " " + pair.Value.sqlwhere;
                    cmd             = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    AddParameters(cmd, pair.Value.SqlParam, ParametersIn);
                    cmd.ExecuteNonQuery();
                }
            }

            if (QSMain.ProjectTables[Table].ClearItems.Count > 0)
            {
                foreach (KeyValuePair <string, TableInfo.ClearDependenceItem> pair in QSMain.ProjectTables[Table].ClearItems)
                {
                    sql = "UPDATE " + pair.Key + " SET ";
                    bool first = true;
                    foreach (string FieldName in pair.Value.ClearFields)
                    {
                        if (!first)
                        {
                            sql += ", ";
                        }
                        sql  += FieldName + " = NULL ";
                        first = false;
                    }
                    sql            += pair.Value.sqlwhere;
                    cmd             = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    AddParameters(cmd, pair.Value.SqlParam, ParametersIn);
                    cmd.ExecuteNonQuery();
                }
            }

            sql = "DELETE FROM " + Table + " WHERE ";
            bool FirstKey = true;

            if (QSMain.ProjectTables[Table].PrimaryKey.ParamInt != "")
            {
                sql     += QSMain.ProjectTables[Table].PrimaryKey.ParamInt + " = @IntParam ";
                FirstKey = false;
            }
            if (QSMain.ProjectTables[Table].PrimaryKey.ParamStr != "")
            {
                if (!FirstKey)
                {
                    sql += "AND ";
                }
                sql     += QSMain.ProjectTables[Table].PrimaryKey.ParamStr + " = @StrParam ";
                FirstKey = false;
            }
            cmd             = QSMain.ConnectionDB.CreateCommand();
            cmd.CommandText = sql;
            TableInfo.PrimaryKeys TempParams = new TableInfo.PrimaryKeys(
                QSMain.ProjectTables[Table].PrimaryKey.ParamInt != "" ? "@IntParam" : "",
                QSMain.ProjectTables[Table].PrimaryKey.ParamStr != "" ? "@StrParam" : ""
                );
            AddParameters(cmd, TempParams, ParametersIn);
            cmd.ExecuteNonQuery();
        }
Exemplo n.º 26
0
        protected void OnButtonOkClicked(object sender, EventArgs e)
        {
            string       sql;
            ISaaSService svc = null;

            if (entryLogin.Text == "root")
            {
                string        Message = "Операции с пользователем root запрещены.";
                MessageDialog md      = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                          MessageType.Warning,
                                                          ButtonsType.Ok,
                                                          Message);
                md.Run();
                md.Destroy();
                return;
            }

            if (Session.IsSaasConnection)
            {
                int dlgRes;
                svc = Session.GetSaaSService();
                if (NewUser)
                {
                    //Проверка существует ли логин
                    sql = "SELECT COUNT(*) FROM users WHERE login = @login";
                    QSMain.CheckConnectionAlive();
                    MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                    cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                    if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                    {
                        string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " +
                                         "Создание второго пользователя с таким же логином невозможно.";
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Warning,
                                                             ButtonsType.Ok,
                                                             Message);
                        md.Run();
                        md.Destroy();
                        return;
                    }
                    //Регистрируем пользователя в SaaS
                    Result result = svc.registerUserV3(entryLogin.Text, entryPassword.Text, Session.SessionId, entryName.Text, entryEmail.Text);
                    if (!result.Success)
                    {
                        if (result.Error == ErrorType.UserExists)
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning,
                                                                 ButtonsType.YesNo,
                                                                 "Пользователь с таким логином уже существует. Предоставить ему доступ к базе?\n" +
                                                                 "ВНИМАНИЕ: Если вы указали новый пароль для пользователя, то он применен не будет.");
                            dlgRes = md.Run();
                            md.Destroy();
                            if ((ResponseType)dlgRes == ResponseType.No)
                            {
                                return;
                            }
                        }
                        else
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning,
                                                                 ButtonsType.Close,
                                                                 result.Description);
                            md.Run();
                            md.Destroy();
                            return;
                        }
                    }
                    //Создаем запись в Users.
                    sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " +
                          "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")";
                }
                else
                {
                    if (entryPassword.Text != passFill)
                    {
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Warning,
                                                             ButtonsType.YesNo,
                                                             "Изменение пароля произойдет во всех базах, к которым пользователь имеет доступ.\nПродолжить?");
                        dlgRes = md.Run();
                        md.Destroy();
                        if ((ResponseType)dlgRes == ResponseType.Yes && !svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text))
                        {
                            MessageDialog md1 = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                  MessageType.Warning,
                                                                  ButtonsType.Close,
                                                                  "Ошибка изменения пароля пользователя.");
                            md1.Run();
                            md1.Destroy();
                            return;
                        }
                        else if ((ResponseType)dlgRes != ResponseType.Yes)
                        {
                            return;
                        }
                    }
                    sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, " + QSMain.AdminFieldName + " = @admin," +
                          "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id";
                }
            }
            else
            {
                if (NewUser)
                {
                    if (!CreateLogin())
                    {
                        return;
                    }
                    sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " +
                          "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")";
                }
                else
                {
                    if (OriginLogin != entryLogin.Text && !RenameLogin())
                    {
                        return;
                    }
                    if (entryPassword.Text != passFill)
                    {
                        ChangePassword();
                    }
                    sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, login = @login, " + QSMain.AdminFieldName + " = @admin," +
                          "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id";
                }
                UpdatePrivileges();
                logger.Info("Запись пользователя...");
            }
            try {
                QSMain.CheckConnectionAlive();
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);

                cmd.Parameters.AddWithValue("@id", entryID.Text);
                cmd.Parameters.AddWithValue("@name", entryName.Text);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                cmd.Parameters.AddWithValue("@admin", checkAdmin.Active);
                cmd.Parameters.AddWithValue("@deactivated", checkDeactivated.Active);
                cmd.Parameters.AddWithValue("@email", entryEmail.Text);
                foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons)
                {
                    cmd.Parameters.AddWithValue("@" + QSMain.ProjectPermission[Pair.Key].DataBaseName,
                                                Pair.Value.Active);
                }

                if (permissionViews != null)
                {
                    foreach (var view in permissionViews)
                    {
                        cmd.Parameters.AddWithValue(view.DBFieldName, view.DBFieldValue);
                    }
                }

                if (textviewComments.Buffer.Text == "")
                {
                    cmd.Parameters.AddWithValue("@description", DBNull.Value);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@description", textviewComments.Buffer.Text);
                }

                cmd.ExecuteNonQuery();
                if (QSMain.User.Login == entryLogin.Text)
                {
                    QSMain.User.LoadUserInfo();
                }
                logger.Info("Ok");
                Respond(ResponseType.Ok);
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка записи пользователя!");
                QSMain.ErrorMessage(this, ex);
            }

            //Предоставляем пользователю доступ к базе
            if (Session.IsSaasConnection)
            {
                if (!svc.changeBaseAccessFromProgram(Session.SessionId, entryLogin.Text, Session.SaasBaseName, !checkDeactivated.Active, checkAdmin.Active))
                {
                    MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                         MessageType.Warning,
                                                         ButtonsType.Close,
                                                         "Ошибка предоставления доступа к базе данных.");
                    md.Run();
                    md.Destroy();
                    return;
                }
            }
        }
Exemplo n.º 27
0
 void UpdatePrivileges()
 {
     logger.Info("Устанавливаем права...");
     try {
         string privileges;
         if (checkAdmin.Active)
         {
             privileges = "ALL";
         }
         else
         {
             privileges = "SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW";
         }
         string sql = $"GRANT {privileges} ON `{QSMain.connectionDB.Database}`.* TO @login, @login @'localhost'";
         QSMain.CheckConnectionAlive();
         MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
         cmd.Parameters.AddWithValue("@login", entryLogin.Text);
         cmd.ExecuteNonQuery();
         if (checkAdmin.Active)
         {
             cmd.CommandText = "GRANT CREATE USER, GRANT OPTION ON *.* TO @login, @login @'localhost'";
         }
         else
         {
             cmd.CommandText = "REVOKE CREATE USER, GRANT OPTION ON *.* FROM @login, @login @'localhost'";
         }
         cmd.ExecuteNonQuery();
         bool GrantMake = false;
         if (checkAdmin.Active)
         {
             sql       = "GRANT SELECT, UPDATE ON mysql.* TO @login, @login @'localhost'";
             GrantMake = true;
         }
         else
         {
             sql = "SHOW GRANTS FOR @login";
             cmd = new MySqlCommand(sql, QSMain.connectionDB);
             cmd.Parameters.AddWithValue("@login", entryLogin.Text);
             using (MySqlDataReader rdr = cmd.ExecuteReader()) {
                 while (rdr.Read())
                 {
                     if (rdr[0].ToString().IndexOf("mysql") > 0)
                     {
                         GrantMake = true;
                     }
                 }
             }
             sql = "REVOKE SELECT, UPDATE ON mysql.* FROM @login, @login @'localhost'";
         }
         if (GrantMake)
         {
             cmd = new MySqlCommand(sql, QSMain.connectionDB);
             cmd.Parameters.AddWithValue("@login", entryLogin.Text);
             cmd.ExecuteNonQuery();
         }
         logger.Info("Права установлены. Ok");
     } catch (MySqlException ex) when(ex.Number == 1044)
     {
         logger.Error(ex, "Ошибка установки прав!");
         MessageDialogWorks.RunErrorDialog("У вас не достаточно прав на сервере MySQL для установки полномочий другим пользователям. Возможно некоторые права не были установлены.");
     } catch (Exception ex) {
         logger.Error(ex, "Ошибка установки прав!");
         QSMain.ErrorMessage(this, ex);
     }
 }
Exemplo n.º 28
0
 protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e)
 {
     /*	switch (e.ReferenceTable) {
     case "doc_types":
         ComboWorks.ComboFillReference (comboDocType, "doc_types", 0);
     break;
     } */
 }
Exemplo n.º 29
0
 static void HandleRunErrorMessageDlg(object sender, QSMain.RunErrorMessageDlgEventArgs e)
 {
     if(currentCrashDlg != null)
     {
         logger.Debug ("Добавляем исключение в уже созданное окно.");
         currentCrashDlg.AddAnotherException (e.Exception, e.UserMessage);
     }
     else
     {
         logger.Debug ("Создание окна отправки отчета о падении.");
         currentCrashDlg = new ErrorMsg (e.ParentWindow, e.Exception, e.UserMessage);
         currentCrashDlg.Run ();
         currentCrashDlg.Destroy ();
         currentCrashDlg = null;
         logger.Debug ("Окно отправки отчета, уничтожено.");
     }
 }
Exemplo n.º 30
0
        public void UserFill(int UserId)
        {
            NewUser = false;
            logger.Info("Запрос пользователя №{0}...", UserId);
            string sql = "SELECT * FROM users WHERE users.id = @id";

            try {
                QSMain.CheckConnectionAlive();
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);

                cmd.Parameters.AddWithValue("@id", UserId);

                MySqlDataReader rdr = cmd.ExecuteReader();

                rdr.Read();
                bool   deactivated = false;
                string email       = String.Empty;
                try {
                    deactivated = DBWorks.GetBoolean(rdr, "deactivated", false);
                    email       = DBWorks.GetString(rdr, "email", String.Empty);
                } catch {
                }

                entryID.Text    = rdr["id"].ToString();
                entryLogin.Text = rdr["login"].ToString();
                //Если SaaS - запретить редактировать логин.
                entryLogin.Sensitive       = !Session.IsSaasConnection;
                OriginLogin                = rdr["login"].ToString();
                entryName.Text             = rdr["name"].ToString();
                entryPassword.Text         = passFill;
                entryEmail.Text            = email;
                checkDeactivated.Active    = deactivated;
                checkDeactivated.Sensitive = QSMain.User.Login != OriginLogin;
                checkAdmin.Active          = rdr.GetBoolean(QSMain.AdminFieldName);

                if (deactivated && Session.IsSaasConnection)                  //FIXME Очень странное условие. Нужно разобраться. Что делает этот блок и зачем?
                {
                    entryName.Sensitive        = entryPassword.Sensitive = entryEmail.Sensitive = false;
                    checkDeactivated.Sensitive = checkAdmin.Sensitive = false;
                }

                foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons)
                {
                    Pair.Value.Active = rdr.GetBoolean(QSMain.ProjectPermission[Pair.Key].DataBaseName);
                }

                if (permissionViews != null)
                {
                    foreach (var view in permissionViews)
                    {
                        view.DBFieldValue = DBWorks.GetString(rdr, view.DBFieldName);
                    }
                }

                textviewComments.Buffer.Text = rdr["description"].ToString();
                rdr.Close();

                this.Title = entryName.Text;
                logger.Info("Ok");
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка получения информации о пользователе!");
                QSMain.ErrorMessage(this, ex);
            }
        }
Exemplo n.º 31
0
 protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e)
 {
     switch (e.ReferenceTable) {
     case "place_types":
         ComboWorks.ComboFillReference (comboPlaceType, "place_types", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboContractPlaceT, "place_types", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboEventPlaceT, "place_types", ComboWorks.ListMode.WithAll);
         break;
     case "organizations":
         ComboWorks.ComboFillReference (comboPlaceOrg, "organizations", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboContractOrg, "organizations", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboAccrualOrg, "organizations", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboCashOrg, "organizations", ComboWorks.ListMode.WithAll);
         break;
     case "cash":
         ComboWorks.ComboFillReference (comboCashCash, "cash", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboAccrualCash, "cash", ComboWorks.ListMode.WithAll);
         break;
     case "income_items":
         if (notebookCash.CurrentPage == 0)
             ComboWorks.ComboFillReference (comboCashItem, "income_items", ComboWorks.ListMode.WithAll);
         ComboWorks.ComboFillReference (comboAccrualItem, "income_items", ComboWorks.ListMode.WithAll);
         break;
     case "expense_items":
         if (notebookCash.CurrentPage >= 1)
             ComboWorks.ComboFillReference (comboCashItem, "expense_items", ComboWorks.ListMode.WithAll);
         break;
     case "classes":
         ComboWorks.ComboFillReference (comboEventType, "classes", ComboWorks.ListMode.WithAll);
         break;
     }
 }