2021-09-13 Fred Gleason <fredg@paravelsystems.com>

* Added an 'RDGroups::create()' static method.
	* Added an 'RDGroups::remove()' static method.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-09-13 14:28:46 -04:00
parent b6f343df9b
commit 2666c2998e
5 changed files with 137 additions and 88 deletions

View File

@ -22424,3 +22424,6 @@
2021-09-13 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in 'RDCartFilter' that caused a SQL error to be
thrown during initialization.
2021-09-13 Fred Gleason <fredg@paravelsystems.com>
* Added an 'RDGroups::create()' static method.
* Added an 'RDGroups::remove()' static method.

View File

@ -392,6 +392,115 @@ QString RDGroup::xml() const
}
bool RDGroup::create(const QString &name,bool allow_all_users,
bool allow_all_services,QString *err_msg)
{
QString sql;
RDSqlQuery *q=NULL;
if(name.length()>10) {
*err_msg=QObject::tr("Name too long (ten characters max)");
return false;
}
if(name.isEmpty()||(name.toLower()==QObject::tr("all").toLower())) {
*err_msg=QObject::tr("Invalid group name");
return false;
}
sql=QString("select ")+
"`NAME` "+
"from `GROUPS` where "+
"`NAME`='"+RDEscapeString(name)+"'";
q=new RDSqlQuery(sql);
if(q->first()) {
*err_msg=QObject::tr("group already exists");
delete q;
return false;
}
delete q;
sql=QString("insert into `GROUPS` set ")+
"`NAME`='"+RDEscapeString(name)+"'";
if(!RDSqlQuery::apply(sql)) {
*err_msg=QObject::tr("unable to create database record");
return false;
}
//
// Create Default Users Perms
//
if(allow_all_users) {
sql="select `LOGIN_NAME` from `USERS`";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString("insert into `USER_PERMS` set ")+
"`USER_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
"`GROUP_NAME`='"+RDEscapeString(name)+"'";
RDSqlQuery::apply(sql);
}
delete q;
}
//
// Create Default Service Perms
//
if(allow_all_services) {
sql="select `NAME` from `SERVICES`";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString("insert into `AUDIO_PERMS` set ")+
"`SERVICE_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
"`GROUP_NAME`='"+RDEscapeString(name)+"'";
RDSqlQuery::apply(sql);
}
delete q;
}
*err_msg=QObject::tr("OK");
return true;
}
bool RDGroup::remove(const QString &name,QString *err_msg)
{
QString sql;
RDSqlQuery *q=NULL;
//
// Check for carts using group
//
sql=QString("select ")+
"`NUMBER` "+ // 00
"from `CART` where "+
"`GROUP_NAME`='"+RDEscapeString(name)+"'";
q=new RDSqlQuery(sql);
if(q->first()) {
*err_msg=QObject::tr("group name in use");
delete q;
return false;
}
sql=QString("delete from `USER_PERMS` where ")+
"`GROUP_NAME`='"+RDEscapeString(name)+"'";
RDSqlQuery::apply(sql);
sql=QString("delete from `AUDIO_PERMS` where ")+
"`GROUP_NAME`='"+RDEscapeString(name)+"'";
RDSqlQuery::apply(sql);
sql=QString("delete from `GROUPS` where ")+
"`NAME`='"+RDEscapeString(name)+"'";
RDSqlQuery::apply(sql);
sql=QString("delete from `REPLICATOR_MAP` where ")+
"`GROUP_NAME`='"+RDEscapeString(name)+"'";
RDSqlQuery::apply(sql);
*err_msg=QObject::tr("OK");
return true;
}
unsigned RDGroup::GetNextFreeCart(unsigned startcart) const
{
QString sql;

View File

@ -62,6 +62,9 @@ class RDGroup
RDCart::Type type,int quan) const;
bool cartNumberValid(unsigned cartnum) const;
QString xml() const;
static bool create(const QString &name,bool allow_all_users,
bool allow_all_services,QString *err_msg);
static bool remove(const QString &name,QString *err_msg);
private:
unsigned GetNextFreeCart(unsigned startcart) const;

View File

@ -127,72 +127,27 @@ QSizePolicy AddGroup::sizePolicy() const
void AddGroup::okData()
{
RDSqlQuery *q;
RDSqlQuery *q1;
QString sql;
QString err_msg;
if(group_name_edit->text().isEmpty()) {
QMessageBox::warning(this,tr("Invalid Name"),tr("You must give the group a name!"));
return;
}
sql=QString("insert into `GROUPS` set ")+
"`NAME`='"+RDEscapeString(group_name_edit->text())+"'";
q=new RDSqlQuery(sql);
if(!q->isActive()) {
QMessageBox::warning(this,tr("Group Exists"),tr("Group Already Exists!"),
1,0,0);
delete q;
if(!RDGroup::create(group_name_edit->text(),group_users_box->isChecked(),
group_svcs_box->isChecked(),&err_msg)) {
QMessageBox::warning(this,"RDAdmin - "+tr("Error"),
tr("Error creating group!")+"\n"+
"["+err_msg+"]");
return;
}
delete q;
//
// Create Default Users Perms
//
if(group_users_box->isChecked()) {
sql="select `LOGIN_NAME` from `USERS`";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString("insert into `USER_PERMS` set ")+
"`USER_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
"`GROUP_NAME`='"+RDEscapeString(group_name_edit->text())+"'";
RDSqlQuery::apply(sql);
}
delete q;
}
//
// Create Default Service Perms
//
if(group_svcs_box->isChecked()) {
sql="select `NAME` from `SERVICES`";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString("insert into `AUDIO_PERMS` set ")+
"`SERVICE_NAME`='"+RDEscapeString(q->value(0).toString())+"',"+
"`GROUP_NAME`='"+RDEscapeString(group_name_edit->text())+"'";
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
}
EditGroup *group=new EditGroup(group_name_edit->text(),this);
if(group->exec()<0) {
sql=QString("delete from `USER_PERMS` where ")+
"`GROUP_NAME`='"+RDEscapeString(group_name_edit->text())+"'";
q=new RDSqlQuery(sql);
delete q;
sql=QString("delete from `AUDIO_PERMS` where ")+
"`GROUP_NAME`='"+RDEscapeString(group_name_edit->text())+"'";
q=new RDSqlQuery(sql);
delete q;
sql=QString("delete from `GROUPS` where ")+
"`NAME`='"+RDEscapeString(group_name_edit->text())+"'";
q=new RDSqlQuery(sql);
delete q;
if(!group->exec()) {
if(!RDGroup::remove(group_name_edit->text(),&err_msg)) {
QMessageBox::warning(this,"RDAdmin - "+tr("Error"),
tr("Error removing stale database record!")+"\n"+
"["+err_msg+"]");
}
delete group;
done(false);
return;

View File

@ -134,7 +134,6 @@ void ListGroups::addData()
return;
}
delete add_group;
add_group=NULL;
QModelIndex index=list_groups_model->addGroup(grpname);
if(index.isValid()) {
list_groups_view->selectRow(index.row());
@ -187,13 +186,13 @@ void ListGroups::deleteData()
RDSqlQuery *q=NULL;
QString warning;
int carts=0;
QString err_msg;
QModelIndexList rows=list_groups_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
return;
}
QString grpname=list_groups_model->groupName(rows.first());
if(grpname.isEmpty()) {
return;
@ -229,33 +228,13 @@ void ListGroups::deleteData()
}
delete q;
//
// Delete Member Audio Perms
//
sql=QString("delete from `AUDIO_PERMS` where ")+
"`GROUP_NAME`='"+RDEscapeString(grpname)+"'";
RDSqlQuery::apply(sql);
if(!RDGroup::remove(grpname,&err_msg)) {
QMessageBox::warning(this,"RDAdmin - "+tr("Error"),
tr("Unable to remove group!")+"\n"+
"["+err_msg+"]");
return;
}
//
// Delete Member User Perms
//
sql=QString("delete from `USER_PERMS` where ")+
"`GROUP_NAME`='"+RDEscapeString(grpname)+"'";
RDSqlQuery::apply(sql);
//
// Delete Replicator Map Records
//
sql=QString("delete from `REPLICATOR_MAP` where ")+
"`GROUP_NAME`='"+RDEscapeString(grpname)+"'";
RDSqlQuery::apply(sql);
//
// Delete from Group List
//
sql=QString("delete from `GROUPS` where ")+
"`NAME`='"+RDEscapeString(grpname)+"'";
RDSqlQuery::apply(sql);
list_groups_model->removeGroup(grpname);
}